LUADOC - Farming Simulator 22

AIJobGoTo

Parent
AIJob
Functions

applyCurrentState

Description
Definition
applyCurrentState()
Code
109function AIJobGoTo:applyCurrentState(vehicle, mission, farmId, isDirectStart)
110 AIJobGoTo:superClass().applyCurrentState(self, vehicle, mission, farmId, isDirectStart)
111
112 self.vehicleParameter:setVehicle(vehicle)
113
114 local x, z, angle, _
115 if vehicle.getLastJob ~= nil then
116 local lastJob = vehicle:getLastJob()
117 if not isDirectStart and lastJob ~= nil and lastJob:isa(AIJobGoTo) then
118 x, z = lastJob.positionAngleParameter:getPosition()
119 angle = lastJob.positionAngleParameter:getAngle()
120 end
121 end
122
123 local snappingAngle = vehicle:getDirectionSnapAngle()
124 local terrainAngle = math.pi / math.max(g_currentMission.fieldGroundSystem:getGroundAngleMaxValue() + 1, 4) -- snap at least in 45deg angles
125 snappingAngle = math.max(snappingAngle, terrainAngle)
126 self.positionAngleParameter:setSnappingAngle(snappingAngle)
127
128 if x == nil or z == nil then
129 x, _, z = getWorldTranslation(vehicle.rootNode)
130 end
131 if angle == nil then
132 local dirX, _, dirZ = localDirectionToWorld(vehicle.rootNode, 0, 0, 1)
133 angle = MathUtil.getYRotationFromDirection(dirX, dirZ)
134 end
135
136 self.positionAngleParameter:setPosition(x, z)
137 self.positionAngleParameter:setAngle(angle)
138end

getDescription

Description
Definition
getDescription()
Code
177function AIJobGoTo:getDescription()
178 local desc = AIJobGoTo:superClass().getDescription(self)
179
180 local nextTask = self:getTaskByIndex(self.currentTaskIndex)
181 if nextTask == self.driveToTask then
182 desc = desc .. " - " .. g_i18n:getText("ai_taskDescriptionDriveToTarget")
183 end
184
185 return desc
186end

getIsAvailableForVehicle

Description
Definition
getIsAvailableForVehicle()
Code
88function AIJobGoTo:getIsAvailableForVehicle(vehicle)
89 if vehicle.createAgent == nil or vehicle.setAITarget == nil or not vehicle:getCanStartAIVehicle() then
90 return false
91 end
92
93 return true
94end

getIsStartable

Description
Definition
getIsStartable()
Code
190function AIJobGoTo:getIsStartable(connection)
191 if g_currentMission.aiSystem:getAILimitedReached() then
192 return false, AIJobGoTo.START_ERROR_LIMIT_REACHED
193 end
194
195 local vehicle = self.vehicleParameter:getVehicle()
196 if vehicle == nil then
197 return false, AIJobGoTo.START_ERROR_VEHICLE_DELETED
198 end
199
200 if not g_currentMission:getHasPlayerPermission("hireAssistant", connection, vehicle:getOwnerFarmId()) then
201 return false, AIJobGoTo.START_ERROR_NO_PERMISSION
202 end
203
204 if vehicle:getIsInUse(connection) then
205 return false, AIJobGoTo.START_ERROR_VEHICLE_IN_USE
206 end
207
208 return true, AIJob.START_SUCCESS
209end

getIsStartErrorText

Description
Definition
getIsStartErrorText()
Code
213function AIJobGoTo.getIsStartErrorText(state)
214 if state == AIJobGoTo.START_ERROR_LIMIT_REACHED then
215 return g_i18n:getText("ai_startStateLimitReached")
216 elseif state == AIJobGoTo.START_ERROR_VEHICLE_DELETED then
217 return g_i18n:getText("ai_startStateVehicleDeleted")
218 elseif state == AIJobGoTo.START_ERROR_NO_PERMISSION then
219 return g_i18n:getText("ai_startStateNoPermission")
220 elseif state == AIJobGoTo.START_ERROR_VEHICLE_IN_USE then
221 return g_i18n:getText("ai_startStateVehicleInUse")
222 end
223
224 return g_i18n:getText("ai_startStateSuccess")
225end

getTarget

Description
Definition
getTarget()
Code
77function AIJobGoTo:getTarget()
78 local angle = nil
79 if self.driveToTask.dirX ~= nil then
80 angle = MathUtil.getYRotationFromDirection(self.driveToTask.dirX, self.driveToTask.dirZ)
81 end
82
83 return self.driveToTask.x, self.driveToTask.z, angle
84end

getTitle

Description
Definition
getTitle()
Code
98function AIJobGoTo:getTitle()
99 local vehicle = self.vehicleParameter:getVehicle()
100 if vehicle ~= nil then
101 return vehicle:getName()
102 end
103
104 return ""
105end

new

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

setValues

Description
Definition
setValues()
Code
142function AIJobGoTo:setValues()
143 self:resetTasks()
144
145 self.driveToTask:setVehicle(self.vehicleParameter:getVehicle())
146
147 local angle = self.positionAngleParameter:getAngle()
148 local x, z = self.positionAngleParameter:getPosition()
149 local dirX, dirZ = MathUtil.getDirectionFromYRotation(angle)
150 self.driveToTask:setTargetDirection(dirX, dirZ)
151 self.driveToTask:setTargetPosition(x, z)
152end

start

Description
Definition
start()
Code
48function AIJobGoTo:start(farmId)
49 AIJobGoTo:superClass().start(self, farmId)
50
51 local vehicle = self.vehicleParameter:getVehicle()
52 if vehicle ~= nil then
53 if self.isServer then
54 vehicle:createAgent(self.helperIndex)
55 end
56 vehicle:aiJobStarted(self, self.helperIndex, farmId)
57 end
58end

stop

Description
Definition
stop()
Code
62function AIJobGoTo:stop(aiMessage)
63
64 local vehicle = self.vehicleParameter:getVehicle()
65 if vehicle ~= nil then
66 if self.isServer then
67 vehicle:deleteAgent()
68 end
69 vehicle:aiJobFinished()
70 end
71
72 AIJobGoTo:superClass().stop(self, aiMessage)
73end

validate

Description
Definition
validate()
Code
156function AIJobGoTo:validate(farmId)
157 self:setParamterValid(true)
158
159 local isVehicleValid, errorMessageVehicle = self.vehicleParameter:validate()
160 if not isVehicleValid then
161 self.vehicleParameter:setIsValid(false)
162 end
163
164 local isPositionValid, errorMessagePosition = self.positionAngleParameter:validate()
165 if not isPositionValid then
166 self.positionAngleParameter:setIsValid(false)
167 end
168
169 local isValid = isVehicleValid and isPositionValid
170 local errorMessage = errorMessageVehicle or errorMessagePosition
171
172 return isValid, errorMessage
173end