LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

AIImplement

Description
Specialization for extending implements with AI functionality
Functions

addAIFruitProhibitions

Description
Definition
addAIFruitProhibitions()
Code
416function AIImplement:addAIFruitProhibitions(fruitType, minGrowthState, maxGrowthState)
417 local spec = self.spec_aiImplement
418
419 table.insert(spec.prohibitedFruitTypes, {fruitType=fruitType or 0,
420 minGrowthState=minGrowthState or 0,
421 maxGrowthState=maxGrowthState or 0})
422 self:updateFieldCropsQuery()
423end

addAIFruitRequirement

Description
Definition
addAIFruitRequirement()
Code
381function AIImplement:addAIFruitRequirement(fruitType, minGrowthState, maxGrowthState)
382 local spec = self.spec_aiImplement
383
384 table.insert(spec.requiredFruitTypes, {fruitType=fruitType or 0,
385 minGrowthState=minGrowthState or 0,
386 maxGrowthState=maxGrowthState or 0})
387 self:updateFieldCropsQuery()
388end

addAITerrainDetailProhibitedRange

Description
Definition
addAITerrainDetailProhibitedRange()
Code
477function AIImplement:addAITerrainDetailProhibitedRange(detailType1, detailType2, minState, maxState)
478 table.insert(self.spec_aiImplement.terrainDetailProhibitedValueRanges, {detailType1, detailType2, minState, maxState})
479 self:updateFieldCropsQuery()
480end

addAITerrainDetailRequiredRange

Description
Definition
addAITerrainDetailRequiredRange()
Code
444function AIImplement:addAITerrainDetailRequiredRange(detailType1, detailType2, minState, maxState)
445 table.insert(self.spec_aiImplement.terrainDetailRequiredValueRanges, {detailType1, detailType2, minState, maxState})
446 self:updateFieldCropsQuery()
447end

addVehicleToAIImplementList

Description
Definition
addVehicleToAIImplementList()
Code
220function AIImplement:addVehicleToAIImplementList(superFunc, list)
221 if self:getCanImplementBeUsedForAI() then
222 table.insert(list, {object=self})
223 end
224
225 superFunc(self, list)
226end

aiImplementEndLine

Description
Definition
aiImplementEndLine()
Code
591function AIImplement:aiImplementEndLine()
592 self.spec_aiImplement.isLineStarted = false
593 SpecializationUtil.raiseEvent(self, "onAIImplementEndLine")
594end

aiImplementStartLine

Description
Definition
aiImplementStartLine()
Code
584function AIImplement:aiImplementStartLine()
585 self.spec_aiImplement.isLineStarted = true
586 SpecializationUtil.raiseEvent(self, "onAIImplementStartLine")
587end

clearAIFruitProhibitions

Description
Definition
clearAIFruitProhibitions()
Code
427function AIImplement:clearAIFruitProhibitions()
428 local spec = self.spec_aiImplement
429 if #spec.prohibitedFruitTypes > 0 then
430 spec.prohibitedFruitTypes = {}
431 end
432 self:updateFieldCropsQuery()
433end

clearAIFruitRequirements

Description
Definition
clearAIFruitRequirements()
Code
392function AIImplement:clearAIFruitRequirements()
393 local spec = self.spec_aiImplement
394 if #spec.requiredFruitTypes > 0 then
395 spec.requiredFruitTypes = {}
396 end
397 self:updateFieldCropsQuery()
398end

clearAITerrainDetailProhibitedRange

Description
Definition
clearAITerrainDetailProhibitedRange()
Code
484function AIImplement:clearAITerrainDetailProhibitedRange()
485 self.spec_aiImplement.terrainDetailProhibitedValueRanges = {}
486 self:updateFieldCropsQuery()
487end

clearAITerrainDetailRequiredRange

Description
Definition
clearAITerrainDetailRequiredRange()
Code
451function AIImplement:clearAITerrainDetailRequiredRange()
452 self.spec_aiImplement.terrainDetailRequiredValueRanges = {}
453 self:updateFieldCropsQuery()
454end

createFieldCropsQuery

Description
Creates field crops query
Definition
createFieldCropsQuery()
Code
527function AIImplement:createFieldCropsQuery()
528 local spec = self.spec_aiImplement
529 local query = FieldCropsQuery:new(g_currentMission.terrainDetailId)
530 local _, useWindrowFruitType = self:getAIFruitExtraRequirements()
531
532 local fruitRequirements = self:getAIFruitRequirements()
533
534 for i=1, #fruitRequirements do
535 local fruitRequirement = fruitRequirements[i]
536 if fruitRequirement.fruitType ~= FruitType.UNKNOWN then
537 local ids = g_currentMission.fruits[fruitRequirement.fruitType]
538 if ids ~= nil and ids.id ~= 0 then
539 if useWindrowFruitType then
540 return 0, 1
541 end
542
543 local desc = g_fruitTypeManager:getFruitTypeByIndex(fruitRequirement.fruitType)
544 query:addRequiredCropType(ids.id, fruitRequirement.minGrowthState+1, fruitRequirement.maxGrowthState+1, desc.startStateChannel, desc.numStateChannels, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels)
545 end
546 end
547 end
548
549 local fruitProhibitions = self:getAIFruitProhibitions()
550 for i=1, #fruitProhibitions do
551 local fruitProhibition = fruitProhibitions[i]
552 if fruitProhibition.fruitType ~= FruitType.UNKNOWN then
553 local ids = g_currentMission.fruits[fruitProhibition.fruitType]
554 if ids ~= nil and ids.id ~= 0 then
555 local desc = g_fruitTypeManager:getFruitTypeByIndex(fruitProhibition.fruitType)
556 query:addProhibitedCropType(ids.id, fruitProhibition.minGrowthState+1, fruitProhibition.maxGrowthState+1, desc.startStateChannel, desc.numStateChannels, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels)
557 end
558 end
559 end
560
561 local terrainDetailRequiredValueRanges = self:getAITerrainDetailRequiredRange()
562 for i=1, #terrainDetailRequiredValueRanges do
563 local valueRange = terrainDetailRequiredValueRanges[i]
564 query:addRequiredGroundValue(valueRange[1], valueRange[2], valueRange[3], valueRange[4])
565 end
566
567 local terrainDetailProhibitValueRanges = self:getAITerrainDetailProhibitedRange()
568 for i=1, #terrainDetailProhibitValueRanges do
569 local valueRange = terrainDetailProhibitValueRanges[i]
570 query:addProhibitedGroundValue(valueRange[1], valueRange[2], valueRange[3], valueRange[4])
571 end
572
573 spec.fieldCropyQuery = query
574end

getAIAllowTurnBackward

Description
Definition
getAIAllowTurnBackward()
Code
330function AIImplement:getAIAllowTurnBackward()
331 return self.spec_aiImplement.allowTurnBackward
332end

getAIBlockTurnBackward

Description
Definition
getAIBlockTurnBackward()
Code
336function AIImplement:getAIBlockTurnBackward()
337 return self.spec_aiImplement.blockTurnBackward
338end

getAIFruitExtraRequirements

Description
Definition
getAIFruitExtraRequirements()
Code
366function AIImplement:getAIFruitExtraRequirements()
367 local spec = self.spec_aiImplement
368 return spec.useDensityHeightMap, spec.useWindrowFruitType
369end

getAIFruitProhibitions

Description
Definition
getAIFruitProhibitions()
Code
437function AIImplement:getAIFruitProhibitions()
438 return self.spec_aiImplement.prohibitedFruitTypes
439end

getAIFruitRequirements

Description
Definition
getAIFruitRequirements()
Code
402function AIImplement:getAIFruitRequirements()
403 return self.spec_aiImplement.requiredFruitTypes
404end

getAIHasNoFullCoverageArea

Description
Definition
getAIHasNoFullCoverageArea()
Code
303function AIImplement:getAIHasNoFullCoverageArea()
304 return self.spec_aiImplement.hasNoFullCoverageArea, self.spec_aiImplement.hasNoFullCoverageAreaOffset
305end

getAIImplementCollisionTriggers

Description
Definition
getAIImplementCollisionTriggers()
Code
309function AIImplement:getAIImplementCollisionTriggers(collisionTriggers)
310 local spec = self.spec_aiImplement
311 if spec.collisionTrigger ~= nil then
312 collisionTriggers[self] = spec.collisionTrigger
313 end
314end

getAIInvertMarkersOnTurn

Description
Definition
getAIInvertMarkersOnTurn()
Code
284function AIImplement:getAIInvertMarkersOnTurn(turnLeft)
285 return false
286end

getAILookAheadSize

Description
Definition
getAILookAheadSize()
Code
297function AIImplement:getAILookAheadSize()
298 return self.spec_aiImplement.lookAheadSize
299end

getAILowerIfAnyIsLowered

Description
Definition
getAILowerIfAnyIsLowered()
Code
324function AIImplement:getAILowerIfAnyIsLowered()
325 return self.spec_aiImplement.lowerIfAnyIsLowerd
326end

getAIMarkers

Description
Definition
getAIMarkers()
Code
256function AIImplement:getAIMarkers()
257 local spec = self.spec_aiImplement
258 if spec.useAttributesOfAttachedImplement then
259 if self.getAttachedImplements ~= nil then
260 for _, implement in ipairs(self:getAttachedImplements()) do
261 if implement.object.getAIMarkers ~= nil then
262 return implement.object:getAIMarkers()
263 end
264 end
265 end
266 end
267
268 if spec.aiMarkersInverted then
269 return spec.rightMarker, spec.leftMarker, spec.backMarker, true
270 else
271 return spec.leftMarker, spec.rightMarker, spec.backMarker, false
272 end
273end

getAIMinTurningRadius

Description
Definition
getAIMinTurningRadius()
Code
250function AIImplement:getAIMinTurningRadius()
251 return self.spec_aiImplement.minTurningRadius
252end

getAINeedsLowering

Description
Definition
getAINeedsLowering()
Code
318function AIImplement:getAINeedsLowering()
319 return self.spec_aiImplement.needsLowering
320end

getAISizeMarkers

Description
Definition
getAISizeMarkers()
Code
290function AIImplement:getAISizeMarkers()
291 local spec = self.spec_aiImplement
292 return spec.sizeLeftMarker, spec.sizeRightMarker, spec.sizeBackMarker
293end

getAITerrainDetailProhibitedRange

Description
Definition
getAITerrainDetailProhibitedRange()
Code
491function AIImplement:getAITerrainDetailProhibitedRange()
492 local spec = self.spec_aiImplement
493
494 if spec.useAttributesOfAttachedImplement then
495 if self.getAttachedImplements ~= nil then
496 for _, implement in ipairs(self:getAttachedImplements()) do
497 if implement.object.getAITerrainDetailProhibitedRange ~= nil then
498 return implement.object:getAITerrainDetailProhibitedRange()
499 end
500 end
501 end
502 end
503
504 return spec.terrainDetailProhibitedValueRanges
505end

getAITerrainDetailRequiredRange

Description
Definition
getAITerrainDetailRequiredRange()
Code
458function AIImplement:getAITerrainDetailRequiredRange()
459 local spec = self.spec_aiImplement
460
461 if spec.useAttributesOfAttachedImplement then
462 if self.getAttachedImplements ~= nil then
463 for _, implement in ipairs(self:getAttachedImplements()) do
464 if implement.object.getAITerrainDetailRequiredRange ~= nil then
465 return implement.object:getAITerrainDetailRequiredRange()
466 end
467 end
468 end
469 end
470
471 return spec.terrainDetailRequiredValueRanges
472end

getAIToolReverserDirectionNode

Description
Definition
getAIToolReverserDirectionNode()
Code
342function AIImplement:getAIToolReverserDirectionNode()
343 return self.spec_aiImplement.toolReverserDirectionNode
344end

getAITurnRadiusLimitation

Description
Definition
getAITurnRadiusLimitation()
Code
348function AIImplement:getAITurnRadiusLimitation()
349 local spec = self.spec_aiImplement
350
351 return spec.turningRadiusLimitation.radius, spec.turningRadiusLimitation.rotationJoint, spec.turningRadiusLimitation.wheels
352end

getAllowTireTracks

Description
Definition
getAllowTireTracks()
Code
230function AIImplement:getAllowTireTracks(superFunc)
231 return superFunc(self) and not self:getIsAIActive()
232end

getCanAIImplementContinueWork

Description
Definition
getCanAIImplementContinueWork()
Code
203function AIImplement:getCanAIImplementContinueWork()
204 return true
205end

getCanImplementBeUsedForAI

Description
Definition
getCanImplementBeUsedForAI()
Code
209function AIImplement:getCanImplementBeUsedForAI()
210 local leftMarker, rightMarker, backMarker, _ = self:getAIMarkers()
211 if leftMarker == nil or rightMarker == nil or backMarker == nil then
212 return false
213 end
214
215 return true
216end

getDoConsumePtoPower

Description
Definition
getDoConsumePtoPower()
Code
236function AIImplement:getDoConsumePtoPower(superFunc)
237 -- do not consume power during headland to avoid slow turning
238 local rootVehicle = self:getRootVehicle()
239 if rootVehicle.getAIIsTurning ~= nil then
240 if rootVehicle:getAIIsTurning() then
241 return false
242 end
243 end
244
245 return superFunc(self)
246end

getFieldCropsQuery

Description
Returns field crops query and creates it on first run
Definition
getFieldCropsQuery()
Code
509function AIImplement:getFieldCropsQuery()
510 if self.spec_aiImplement.fieldCropyQuery == nil then
511 self:createFieldCropsQuery()
512 end
513
514 return self.spec_aiImplement.fieldCropyQuery
515end

getIsAIImplementInLine

Description
Definition
getIsAIImplementInLine()
Code
578function AIImplement:getIsAIImplementInLine()
579 return self.spec_aiImplement.isLineStarted
580end

onLoad

Description
Called on loading
Definition
onLoad(table savegame)
Arguments
tablesavegamesavegame
Code
110function AIImplement:onLoad(savegame)
111 local spec = self.spec_aiImplement
112
113 local baseName = "vehicle.ai"
114
115 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".areaMarkers#leftIndex", baseName .. ".areaMarkers#leftNode") -- FS17 to FS 19
116 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".areaMarkers#rightIndex", baseName .. ".areaMarkers#rightNode") -- FS17 to FS 19
117 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".areaMarkers#backIndex", baseName .. ".areaMarkers#backNode") -- FS17 to FS 19
118
119 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".sizeMarkers#leftIndex", baseName .. ".sizeMarkers#leftNode") -- FS17 to FS 19
120 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".sizeMarkers#rightIndex", baseName .. ".sizeMarkers#rightNode") -- FS17 to FS 19
121 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".sizeMarkers#backIndex", baseName .. ".sizeMarkers#backNode") -- FS17 to FS 19
122
123 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".trafficCollisionTrigger#index", baseName .. ".collisionTrigger#node") -- FS17 to FS 19
124 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".trafficCollisionTrigger#node", baseName .. ".collisionTrigger#node") -- FS17 to FS 19
125 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".collisionTrigger#index", baseName .. ".collisionTrigger#node") -- FS17 to FS 19
126 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.aiLookAheadSize#value", baseName .. ".lookAheadSize#value") -- FS17 to FS 19
127
128 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".toolReverserDirectionNode#index", baseName .. ".toolReverserDirectionNode#node") -- FS17 to FS 19
129 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".turningRadiusLimiation", baseName .. ".turningRadiusLimitation") -- FS17 to FS 19
130
131 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, baseName .. ".forceTurnNoBackward#value", baseName .. ".allowTurnBackward#value (inverted)") -- FS17 to FS 19
132
133
134 spec.minTurningRadius = getXMLFloat(self.xmlFile, baseName .. ".minTurningRadius#value")
135
136 spec.leftMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".areaMarkers#leftNode"), self.i3dMappings)
137 spec.rightMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".areaMarkers#rightNode"), self.i3dMappings)
138 spec.backMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".areaMarkers#backNode"), self.i3dMappings)
139 spec.aiMarkersInverted = false
140
141 spec.sizeLeftMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".sizeMarkers#leftNode"), self.i3dMappings)
142 spec.sizeRightMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".sizeMarkers#rightNode"), self.i3dMappings)
143 spec.sizeBackMarker = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".sizeMarkers#backNode"), self.i3dMappings)
144
145 spec.collisionTrigger = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".collisionTrigger#node"), self.i3dMappings)
146 if spec.collisionTrigger ~= nil then
147 local rigidBodyType = getRigidBodyType(spec.collisionTrigger)
148 if rigidBodyType ~= "Kinematic" then
149 g_logManager:xmlWarning(self.configFileName, "'aiCollisionTrigger' is not a kinematic body type")
150 end
151
152 self:doCollisionMaskCheck(MathUtil.bitsToMask(20, 13), nil, spec.collisionTrigger, "aiCollisionTrigger")
153 end
154
155 spec.needsLowering = Utils.getNoNil(getXMLBool(self.xmlFile, baseName .. ".needsLowering#value"), true)
156 spec.lowerIfAnyIsLowerd = Utils.getNoNil(getXMLBool(self.xmlFile, baseName .. ".needsLowering#lowerIfAnyIsLowerd"), false)
157
158 spec.allowTurnBackward = Utils.getNoNil(getXMLBool(self.xmlFile, baseName .. ".allowTurnBackward#value"), true)
159 spec.blockTurnBackward = Utils.getNoNil(getXMLBool(self.xmlFile, baseName .. ".blockTurnBackward#value"), false)
160
161 spec.toolReverserDirectionNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".toolReverserDirectionNode#node"), self.i3dMappings)
162
163 spec.turningRadiusLimitation = {}
164 spec.turningRadiusLimitation.rotationJoint = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, baseName .. ".turningRadiusLimitation#rotationJointNode"), self.i3dMappings)
165 if spec.turningRadiusLimitation.rotationJoint ~= nil then
166 spec.turningRadiusLimitation.wheelIndices = {StringUtil.getVectorFromString(getXMLString(self.xmlFile, baseName .. ".turningRadiusLimitation#wheelIndices"))}
167 end
168
169 spec.turningRadiusLimitation.radius = getXMLFloat(self.xmlFile, baseName .. ".turningRadiusLimitation#radius")
170
171 spec.lookAheadSize = Utils.getNoNil(getXMLFloat(self.xmlFile, baseName .. ".lookAheadSize#value"), 2)
172 spec.useAttributesOfAttachedImplement = Utils.getNoNil(getXMLBool(self.xmlFile, baseName .. ".useAttributesOfAttachedImplement#value"), false)
173
174 spec.hasNoFullCoverageArea = Utils.getNoNil(getXMLString(self.xmlFile, baseName .. ".hasNoFullCoverageArea#value"), false)
175 spec.hasNoFullCoverageAreaOffset = Utils.getNoNil(getXMLFloat(self.xmlFile, baseName .. ".hasNoFullCoverageArea#offset"), 0)
176
177 spec.terrainDetailRequiredValueRanges = {}
178 spec.terrainDetailProhibitedValueRanges = {}
179
180 spec.requiredFruitTypes = {}
181 spec.prohibitedFruitTypes = {}
182
183 spec.isLineStarted = false
184end

onPostLoad

Description
Definition
onPostLoad()
Code
188function AIImplement:onPostLoad(savegame)
189 if self.getWheels ~= nil then
190 local spec = self.spec_aiImplement
191 if spec.turningRadiusLimitation.wheelIndices ~= nil then
192 spec.turningRadiusLimitation.wheels = {}
193 local wheels = self:getWheels()
194 for _, index in ipairs(spec.turningRadiusLimitation.wheelIndices) do
195 table.insert(spec.turningRadiusLimitation.wheels, wheels[index])
196 end
197 end
198 end
199end

prerequisitesPresent

Description
Checks if all prerequisite specializations are loaded
Definition
prerequisitesPresent(table specializations)
Arguments
tablespecializationsspecializations
Return Values
booleanhasPrerequisitetrue if all prerequisite specializations are loaded
Code
17function AIImplement.prerequisitesPresent(specializations)
18 return true
19end

registerEventListeners

Description
Definition
registerEventListeners()
Code
102function AIImplement.registerEventListeners(vehicleType)
103 SpecializationUtil.registerEventListener(vehicleType, "onLoad", AIImplement)
104 SpecializationUtil.registerEventListener(vehicleType, "onPostLoad", AIImplement)
105end

registerEvents

Description
Definition
registerEvents()
Code
23function AIImplement.registerEvents(vehicleType)
24 SpecializationUtil.registerEvent(vehicleType, "onAIImplementStart")
25 SpecializationUtil.registerEvent(vehicleType, "onAIImplementActive")
26 SpecializationUtil.registerEvent(vehicleType, "onAIImplementEnd")
27
28 SpecializationUtil.registerEvent(vehicleType, "onAIImplementStartLine")
29 SpecializationUtil.registerEvent(vehicleType, "onAIImplementEndLine")
30
31 SpecializationUtil.registerEvent(vehicleType, "onAIImplementStartTurn")
32 SpecializationUtil.registerEvent(vehicleType, "onAIImplementTurnProgress")
33 SpecializationUtil.registerEvent(vehicleType, "onAIImplementEndTurn")
34
35 SpecializationUtil.registerEvent(vehicleType, "onAIImplementBlock")
36 SpecializationUtil.registerEvent(vehicleType, "onAIImplementContinue")
37end

registerFunctions

Description
Definition
registerFunctions()
Code
41function AIImplement.registerFunctions(vehicleType)
42 SpecializationUtil.registerFunction(vehicleType, "getCanAIImplementContinueWork", AIImplement.getCanAIImplementContinueWork)
43 SpecializationUtil.registerFunction(vehicleType, "getCanImplementBeUsedForAI", AIImplement.getCanImplementBeUsedForAI)
44 SpecializationUtil.registerFunction(vehicleType, "getAIMinTurningRadius", AIImplement.getAIMinTurningRadius)
45 SpecializationUtil.registerFunction(vehicleType, "getAIMarkers", AIImplement.getAIMarkers)
46 SpecializationUtil.registerFunction(vehicleType, "setAIMarkersInverted", AIImplement.setAIMarkersInverted)
47 SpecializationUtil.registerFunction(vehicleType, "getAIInvertMarkersOnTurn", AIImplement.getAIInvertMarkersOnTurn)
48 SpecializationUtil.registerFunction(vehicleType, "getAISizeMarkers", AIImplement.getAISizeMarkers)
49 SpecializationUtil.registerFunction(vehicleType, "getAILookAheadSize", AIImplement.getAILookAheadSize)
50 SpecializationUtil.registerFunction(vehicleType, "getAIHasNoFullCoverageArea", AIImplement.getAIHasNoFullCoverageArea)
51
52 SpecializationUtil.registerFunction(vehicleType, "getAIImplementCollisionTriggers", AIImplement.getAIImplementCollisionTriggers)
53
54 SpecializationUtil.registerFunction(vehicleType, "getAINeedsLowering", AIImplement.getAINeedsLowering)
55 SpecializationUtil.registerFunction(vehicleType, "getAILowerIfAnyIsLowered", AIImplement.getAILowerIfAnyIsLowered)
56 SpecializationUtil.registerFunction(vehicleType, "getAIAllowTurnBackward", AIImplement.getAIAllowTurnBackward)
57 SpecializationUtil.registerFunction(vehicleType, "getAIBlockTurnBackward", AIImplement.getAIBlockTurnBackward)
58 SpecializationUtil.registerFunction(vehicleType, "getAIToolReverserDirectionNode", AIImplement.getAIToolReverserDirectionNode)
59 SpecializationUtil.registerFunction(vehicleType, "getAITurnRadiusLimitation", AIImplement.getAITurnRadiusLimitation)
60
61 SpecializationUtil.registerFunction(vehicleType, "setAIFruitProhibitions", AIImplement.setAIFruitProhibitions)
62 SpecializationUtil.registerFunction(vehicleType, "addAIFruitProhibitions", AIImplement.addAIFruitProhibitions)
63 SpecializationUtil.registerFunction(vehicleType, "clearAIFruitProhibitions", AIImplement.clearAIFruitProhibitions)
64 SpecializationUtil.registerFunction(vehicleType, "getAIFruitProhibitions", AIImplement.getAIFruitProhibitions)
65
66 SpecializationUtil.registerFunction(vehicleType, "setAIFruitExtraRequirements", AIImplement.setAIFruitExtraRequirements)
67 SpecializationUtil.registerFunction(vehicleType, "getAIFruitExtraRequirements", AIImplement.getAIFruitExtraRequirements)
68
69 SpecializationUtil.registerFunction(vehicleType, "setAIFruitRequirements", AIImplement.setAIFruitRequirements)
70 SpecializationUtil.registerFunction(vehicleType, "addAIFruitRequirement", AIImplement.addAIFruitRequirement)
71 SpecializationUtil.registerFunction(vehicleType, "clearAIFruitRequirements", AIImplement.clearAIFruitRequirements)
72 SpecializationUtil.registerFunction(vehicleType, "getAIFruitRequirements", AIImplement.getAIFruitRequirements)
73
74 SpecializationUtil.registerFunction(vehicleType, "addAITerrainDetailRequiredRange", AIImplement.addAITerrainDetailRequiredRange)
75 SpecializationUtil.registerFunction(vehicleType, "clearAITerrainDetailRequiredRange", AIImplement.clearAITerrainDetailRequiredRange)
76 SpecializationUtil.registerFunction(vehicleType, "getAITerrainDetailRequiredRange", AIImplement.getAITerrainDetailRequiredRange)
77
78 SpecializationUtil.registerFunction(vehicleType, "addAITerrainDetailProhibitedRange", AIImplement.addAITerrainDetailProhibitedRange)
79 SpecializationUtil.registerFunction(vehicleType, "clearAITerrainDetailProhibitedRange", AIImplement.clearAITerrainDetailProhibitedRange)
80 SpecializationUtil.registerFunction(vehicleType, "getAITerrainDetailProhibitedRange", AIImplement.getAITerrainDetailProhibitedRange)
81
82 SpecializationUtil.registerFunction(vehicleType, "getFieldCropsQuery", AIImplement.getFieldCropsQuery)
83 SpecializationUtil.registerFunction(vehicleType, "updateFieldCropsQuery", AIImplement.updateFieldCropsQuery)
84 SpecializationUtil.registerFunction(vehicleType, "createFieldCropsQuery", AIImplement.createFieldCropsQuery)
85
86 SpecializationUtil.registerFunction(vehicleType, "getIsAIImplementInLine", AIImplement.getIsAIImplementInLine)
87
88 SpecializationUtil.registerFunction(vehicleType, "aiImplementStartLine", AIImplement.aiImplementStartLine)
89 SpecializationUtil.registerFunction(vehicleType, "aiImplementEndLine", AIImplement.aiImplementEndLine)
90end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
94function AIImplement.registerOverwrittenFunctions(vehicleType)
95 SpecializationUtil.registerOverwrittenFunction(vehicleType, "addVehicleToAIImplementList", AIImplement.addVehicleToAIImplementList)
96 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getAllowTireTracks", AIImplement.getAllowTireTracks)
97 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDoConsumePtoPower", AIImplement.getDoConsumePtoPower)
98end

setAIFruitExtraRequirements

Description
Definition
setAIFruitExtraRequirements()
Code
356function AIImplement:setAIFruitExtraRequirements(useDensityHeightMap, useWindrowFruitType)
357 local spec = self.spec_aiImplement
358
359 spec.useDensityHeightMap = useDensityHeightMap or spec.useDensityHeightMap or false
360 spec.useWindrowFruitType = useWindrowFruitType or spec.useWindrowFruitType or false
361 self:updateFieldCropsQuery()
362end

setAIFruitProhibitions

Description
Definition
setAIFruitProhibitions()
Code
408function AIImplement:setAIFruitProhibitions(fruitType, minGrowthState, maxGrowthState)
409 self:clearAIFruitProhibitions()
410 self:addAIFruitProhibitions(fruitType, minGrowthState, maxGrowthState)
411 self:updateFieldCropsQuery()
412end

setAIFruitRequirements

Description
Definition
setAIFruitRequirements()
Code
373function AIImplement:setAIFruitRequirements(fruitType, minGrowthState, maxGrowthState)
374 self:clearAIFruitRequirements()
375 self:addAIFruitRequirement(fruitType, minGrowthState, maxGrowthState)
376 self:updateFieldCropsQuery()
377end

setAIMarkersInverted

Description
Definition
setAIMarkersInverted()
Code
277function AIImplement:setAIMarkersInverted(state)
278 local spec = self.spec_aiImplement
279 spec.aiMarkersInverted = not spec.aiMarkersInverted
280end

updateFieldCropsQuery

Description
Recreate if the Field crops query already exists (= if it was already used)
Definition
updateFieldCropsQuery()
Code
519function AIImplement:updateFieldCropsQuery()
520 if self.spec_aiImplement.fieldCropyQuery ~= nil then
521 self:createFieldCropsQuery()
522 end
523end