LUADOC - Farming Simulator 22

AIJobFieldWork

Parent
AIJob
Functions

applyCurrentState

Description
Definition
applyCurrentState()
Code
97function AIJobFieldWork:applyCurrentState(vehicle, mission, farmId, isDirectStart)
98 AIJobFieldWork:superClass().applyCurrentState(self, vehicle, mission, farmId, isDirectStart)
99
100 self.vehicleParameter:setVehicle(vehicle)
101
102 local x, z, angle, _
103 if vehicle.getLastJob ~= nil then
104 local lastJob = vehicle:getLastJob()
105 if not isDirectStart and lastJob ~= nil and lastJob:isa(AIJobFieldWork) then
106 x, z = lastJob.positionAngleParameter:getPosition()
107 angle = lastJob.positionAngleParameter:getAngle()
108 end
109 end
110
111 local snappingAngle = vehicle:getDirectionSnapAngle()
112 local terrainAngle = math.pi / math.max(g_currentMission.fieldGroundSystem:getGroundAngleMaxValue() + 1, 4) -- snap at least in 45deg angles
113 snappingAngle = math.max(snappingAngle, terrainAngle)
114 self.positionAngleParameter:setSnappingAngle(snappingAngle)
115
116 if x == nil or z == nil then
117 x, _, z = getWorldTranslation(vehicle.rootNode)
118 end
119 if angle == nil then
120 local dirX, _, dirZ = localDirectionToWorld(vehicle.rootNode, 0, 0, 1)
121 angle = MathUtil.getYRotationFromDirection(dirX, dirZ)
122 end
123
124 self.positionAngleParameter:setPosition(x, z)
125 self.positionAngleParameter:setAngle(angle)
126end

getDescription

Description
Definition
getDescription()
Code
187function AIJobFieldWork:getDescription()
188 local desc = AIJobFieldWork:superClass().getDescription(self)
189
190 local nextTask = self:getTaskByIndex(self.currentTaskIndex)
191 if nextTask == self.driveToTask then
192 desc = desc .. " - " .. g_i18n:getText("ai_taskDescriptionDriveToField")
193 elseif nextTask == self.fieldWorkTask then
194 desc = desc .. " - " .. g_i18n:getText("ai_taskDescriptionFieldWork")
195 end
196
197 return desc
198end

getIsAvailableForVehicle

Description
Definition
getIsAvailableForVehicle()
Code
130function AIJobFieldWork:getIsAvailableForVehicle(vehicle)
131 return vehicle.getCanStartFieldWork and vehicle:getCanStartFieldWork()
132end

getIsStartable

Description
Definition
getIsStartable()
Code
202function AIJobFieldWork:getIsStartable(connection)
203 if g_currentMission.aiSystem:getAILimitedReached() then
204 return false, AIJobFieldWork.START_ERROR_LIMIT_REACHED
205 end
206
207 local vehicle = self.vehicleParameter:getVehicle()
208 if vehicle == nil then
209 return false, AIJobFieldWork.START_ERROR_VEHICLE_DELETED
210 end
211
212 if not g_currentMission:getHasPlayerPermission("hireAssistant", connection, vehicle:getOwnerFarmId()) then
213 return false, AIJobFieldWork.START_ERROR_NO_PERMISSION
214 end
215
216 if vehicle:getIsInUse(connection) then
217 return false, AIJobFieldWork.START_ERROR_VEHICLE_IN_USE
218 end
219
220 return true, AIJob.START_SUCCESS
221end

getIsStartErrorText

Description
Definition
getIsStartErrorText()
Code
225function AIJobFieldWork.getIsStartErrorText(state)
226 if state == AIJobFieldWork.START_ERROR_LIMIT_REACHED then
227 return g_i18n:getText("ai_startStateLimitReached")
228 elseif state == AIJobFieldWork.START_ERROR_VEHICLE_DELETED then
229 return g_i18n:getText("ai_startStateVehicleDeleted")
230 elseif state == AIJobFieldWork.START_ERROR_NO_PERMISSION then
231 return g_i18n:getText("ai_startStateNoPermission")
232 elseif state == AIJobFieldWork.START_ERROR_VEHICLE_IN_USE then
233 return g_i18n:getText("ai_startStateVehicleInUse")
234 end
235
236 return g_i18n:getText("ai_startStateSuccess")
237end

getPricePerMs

Description
Definition
getPricePerMs()
Code
241function AIJobFieldWork:getPricePerMs()
242 return 0.0005
243end

getStartTaskIndex

Description
Definition
getStartTaskIndex()
Code
53function AIJobFieldWork:getStartTaskIndex()
54 if self.isDirectStart then
55 return 2
56 end
57
58 -- check if already at target position
59 local vehicle = self.vehicleParameter:getVehicle()
60 local x, _, z = getWorldTranslation(vehicle.rootNode)
61 local tx, tz = self.positionAngleParameter:getPosition()
62 local targetReached = MathUtil.vector2Length(x-tx, z-tz) < 3
63 if targetReached then
64 return 2
65 end
66
67 return 1
68end

getTarget

Description
Definition
getTarget()
Code
136function AIJobFieldWork:getTarget()
137 local angle = 0
138 if self.driveToTask.dirX ~= nil then
139 angle = MathUtil.getYRotationFromDirection(self.driveToTask.dirX, self.driveToTask.dirZ)
140 end
141
142 return self.driveToTask.x, self.driveToTask.z, angle
143end

getTitle

Description
Definition
getTitle()
Code
147function AIJobFieldWork:getTitle()
148 local vehicle = self.vehicleParameter:getVehicle()
149 if vehicle ~= nil then
150 return vehicle:getName()
151 end
152
153 return ""
154end

new

Description
Definition
new()
Code
22function AIJobFieldWork.new(isServer, customMt)
23 local self = AIJob.new(isServer, customMt or AIJobFieldWork_mt)
24
25 self.driveToTask = AITaskDriveTo.new(isServer, self)
26 self.fieldWorkTask = AITaskFieldWork.new(isServer, self)
27
28 self:addTask(self.driveToTask)
29 self:addTask(self.fieldWorkTask)
30
31 self.isDirectStart = false
32
33 self.vehicleParameter = AIParameterVehicle.new()
34 self.positionAngleParameter = AIParameterPositionAngle.new(math.rad(0))
35
36 self:addNamedParameter("vehicle", self.vehicleParameter)
37 self:addNamedParameter("positionAngle", self.positionAngleParameter)
38
39 local vehicleGroup = AIParameterGroup.new(g_i18n:getText("ai_parameterGroupTitleVehicle"))
40 vehicleGroup:addParameter(self.vehicleParameter)
41
42 local positionGroup = AIParameterGroup.new(g_i18n:getText("ai_parameterGroupTitlePosition"))
43 positionGroup:addParameter(self.positionAngleParameter)
44
45 table.insert(self.groupedParameters, vehicleGroup)
46 table.insert(self.groupedParameters, positionGroup)
47
48 return self
49end

setValues

Description
Definition
setValues()
Code
158function AIJobFieldWork:setValues()
159 self:resetTasks()
160
161 local vehicle = self.vehicleParameter:getVehicle()
162 self.driveToTask:setVehicle(vehicle)
163 self.fieldWorkTask:setVehicle(vehicle)
164
165 local angle = self.positionAngleParameter:getAngle()
166 local x, z = self.positionAngleParameter:getPosition()
167 local dirX, dirZ = MathUtil.getDirectionFromYRotation(angle)
168 self.driveToTask:setTargetDirection(dirX, dirZ)
169 self.driveToTask:setTargetPosition(x, z)
170end

start

Description
Definition
start()
Code
72function AIJobFieldWork:start(farmId)
73 AIJobFieldWork:superClass().start(self, farmId)
74
75 -- Client start notification will be done by vehicle
76 if self.isServer then
77 local vehicle = self.vehicleParameter:getVehicle()
78 vehicle:createAgent(self.helperIndex)
79 vehicle:aiJobStarted(self, self.helperIndex, farmId)
80 end
81end

stop

Description
Definition
stop()
Code
85function AIJobFieldWork:stop(aiMessage)
86 -- Client stop notifcation will be done by vehicle
87 if self.isServer then
88 local vehicle = self.vehicleParameter:getVehicle()
89 vehicle:deleteAgent()
90 vehicle:aiJobFinished()
91 end
92 AIJobFieldWork:superClass().stop(self, aiMessage)
93end

validate

Description
Definition
validate()
Code
174function AIJobFieldWork:validate(farmId)
175 self:setParamterValid(true)
176
177 local isValid, errorMessage = self.vehicleParameter:validate()
178 if not isValid then
179 self.vehicleParameter:setIsValid(false)
180 end
181
182 return isValid, errorMessage
183end