LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

FruitPreparer

Description
Specialization for tools preparing the fruits for harvesting e.g. potato haulm toppers and sugar beet defoliators
Functions

doCheckSpeedLimit

Description
Returns if speed limit should be checked
Definition
doCheckSpeedLimit()
Return Values
booleancheckSpeedlimitcheck speed limit
Code
208function FruitPreparer:doCheckSpeedLimit(superFunc)
209 return superFunc(self) or (self:getIsTurnedOn() and (self.getIsImplementChainLowered == nil or self:getIsImplementChainLowered()))
210end

getAllowCutterAIFruitRequirements

Description
Definition
getAllowCutterAIFruitRequirements()
Code
214function FruitPreparer:getAllowCutterAIFruitRequirements(superFunc)
215 return false
216end

getDefaultSpeedLimit

Description
Returns default speed limit
Definition
getDefaultSpeedLimit()
Return Values
floatspeedLimitspeed limit
Code
267function FruitPreparer.getDefaultSpeedLimit()
268 return 15
269end

getDirtMultiplier

Description
Definition
getDirtMultiplier()
Code
220function FruitPreparer:getDirtMultiplier(superFunc)
221 local spec = self.spec_fruitPreparer
222
223 if spec.isWorking then
224 return superFunc(self) + self:getWorkDirtMultiplier() * self:getLastSpeed() / self.speedLimit
225 end
226
227 return superFunc(self)
228end

getDoGroundManipulation

Description
Returns if tool does ground manipulation
Definition
getDoGroundManipulation()
Return Values
booleandoGroundManipulationdo ground manipulation
Code
200function FruitPreparer:getDoGroundManipulation(superFunc)
201 local spec = self.spec_fruitPreparer
202 return superFunc(self) and spec.isWorking
203end

getIsRandomlyMovingPartActive

Description
Definition
getIsRandomlyMovingPartActive()
Code
254function FruitPreparer:getIsRandomlyMovingPartActive(superFunc, part)
255 local retValue = superFunc(self, part)
256
257 if part.moveOnlyIfPreparerCut then
258 retValue = retValue and self.spec_fruitPreparer.isWorking
259 end
260
261 return retValue
262end

getWearMultiplier

Description
Definition
getWearMultiplier()
Code
232function FruitPreparer:getWearMultiplier(superFunc)
233 local spec = self.spec_fruitPreparer
234
235 if spec.isWorking then
236 return superFunc(self) + self:getWorkWearMultiplier() * self:getLastSpeed() / self.speedLimit
237 end
238
239 return superFunc(self)
240end

initSpecialization

Description
Called on specialization initializing
Definition
initSpecialization()
Code
15function FruitPreparer.initSpecialization()
16 g_workAreaTypeManager:addWorkAreaType("fruitPreparer", false)
17
18 local schema = Vehicle.xmlSchema
19 schema:setXMLSpecializationType("FruitPreparer")
20
21 schema:register(XMLValueType.STRING, "vehicle.fruitPreparer#fruitType", "Fruit type")
22 schema:register(XMLValueType.BOOL, "vehicle.fruitPreparer#aiUsePreparedState", "AI uses prepared state instead of unprepared state", "true if vehicle has also the Cutter specialization")
23
24 schema:register(XMLValueType.INT, WorkArea.WORK_AREA_XML_KEY .. ".fruitPreparer#dropWorkAreaIndex", "Drop area index")
25 schema:register(XMLValueType.INT, WorkArea.WORK_AREA_XML_CONFIG_KEY .. ".fruitPreparer#dropWorkAreaIndex", "Drop area index")
26
27 AnimationManager.registerAnimationNodesXMLPaths(schema, "vehicle.fruitPreparer.animationNodes")
28 SoundManager.registerSampleXMLPaths(schema, "vehicle.fruitPreparer.sounds", "work")
29
30 schema:register(XMLValueType.BOOL, RandomlyMovingParts.RANDOMLY_MOVING_PART_XML_KEY .. "#moveOnlyIfPreparerCut", "Move only if fruit preparer cuts something", false)
31
32 schema:setXMLSpecializationType()
33end

loadRandomlyMovingPartFromXML

Description
Definition
loadRandomlyMovingPartFromXML()
Code
244function FruitPreparer:loadRandomlyMovingPartFromXML(superFunc, part, xmlFile, key)
245 local retValue = superFunc(self, part, xmlFile, key)
246
247 part.moveOnlyIfPreparerCut = xmlFile:getValue(key .. "#moveOnlyIfPreparerCut", false)
248
249 return retValue
250end

loadWorkAreaFromXML

Description
Loads work areas from xml
Definition
loadWorkAreaFromXML(table workArea, integer xmlFile, string key)
Arguments
tableworkAreaworkArea
integerxmlFileid of xml object
stringkeykey
Return Values
booleansuccesssuccess
Code
183function FruitPreparer:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key)
184 local retValue = superFunc(self, workArea, xmlFile, key)
185
186 if workArea.type == WorkAreaType.FRUITPREPARER then
187 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, key.."#dropStartIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19
188 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, key.."#dropWidthIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19
189 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, key.."#dropHeightIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19
190
191 workArea.dropWorkAreaIndex = xmlFile:getValue(key..".fruitPreparer#dropWorkAreaIndex")
192 end
193
194 return retValue
195end

onDelete

Description
Called on deleting
Definition
onDelete()
Code
125function FruitPreparer:onDelete()
126 local spec = self.spec_fruitPreparer
127 g_soundManager:deleteSamples(spec.samples)
128 g_animationManager:deleteAnimations(spec.animationNodes)
129end

onEndWorkAreaProcessing

Description
Definition
onEndWorkAreaProcessing()
Code
273function FruitPreparer:onEndWorkAreaProcessing(dt)
274 if self.isServer then
275 local spec = self.spec_fruitPreparer
276 local isWorking = g_time - spec.lastWorkTime < 500
277 if isWorking ~= spec.isWorking then
278 self:raiseDirtyFlags(spec.dirtyFlag)
279 spec.isWorking = isWorking
280 end
281 end
282end

onLoad

Description
Called on loading
Definition
onLoad(table savegame)
Arguments
tablesavegamesavegame
Code
77function FruitPreparer:onLoad(savegame)
78 local spec = self.spec_fruitPreparer
79
80 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnAnimation#name", "vehicle.turnOnVehicle.turnedAnimation#name") -- FS15 to FS17
81 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnOnAnimation#speed", "vehicle.turnOnVehicle.turnedAnimation#turnOnSpeedScale") -- FS15 to FS17
82
83 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.fruitPreparer#useReelStateToTurnOn") -- FS17 to FS19
84 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.fruitPreparer#onlyActiveWhenLowered") -- FS17 to FS19
85 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.vehicle.fruitPreparerSound", "vehicle.fruitPreparer.sounds.work") -- FS17 to FS19
86 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, "vehicle.turnedOnRotationNodes.turnedOnRotationNode", "vehicle.fruitPreparer.animationNodes.animationNode", "fruitPreparer") -- FS17 to FS19
87
88 if self.isClient then
89 spec.samples = {}
90 spec.samples.work = g_soundManager:loadSampleFromXML(self.xmlFile, "vehicle.fruitPreparer.sounds", "work", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self)
91
92 spec.animationNodes = g_animationManager:loadAnimations(self.xmlFile, "vehicle.fruitPreparer.animationNodes", self.components, self, self.i3dMappings)
93 end
94
95 spec.fruitType = FruitType.UNKNOWN
96 local fruitType = self.xmlFile:getValue("vehicle.fruitPreparer#fruitType")
97 if fruitType ~= nil then
98 local desc = g_fruitTypeManager:getFruitTypeByName(fruitType)
99 if desc ~= nil then
100 spec.fruitType = desc.index
101
102 if self.setAIFruitRequirements ~= nil then
103 self:setAIFruitRequirements(desc.index, desc.minPreparingGrowthState, desc.maxPreparingGrowthState)
104
105 local aiUsePreparedState = self.xmlFile:getValue("vehicle.fruitPreparer#aiUsePreparedState", self.spec_cutter ~= nil)
106 if aiUsePreparedState then
107 self:addAIFruitRequirement(desc.index, desc.preparedGrowthState, desc.preparedGrowthState)
108 end
109 end
110 else
111 Logging.xmlWarning(self.xmlFile, "Unable to find fruitType '%s' in fruitPreparer", fruitType)
112 end
113 else
114 Logging.xmlWarning(self.xmlFile, "Missing fruitType in fruitPreparer")
115 end
116
117 spec.isWorking = false
118 spec.lastWorkTime = -math.huge
119
120 spec.dirtyFlag = self:getNextDirtyFlag()
121end

onReadUpdateStream

Description
Called on on update
Definition
onReadUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdstream ID
integertimestamptimestamp
tableconnectionconnection
Code
136function FruitPreparer:onReadUpdateStream(streamId, timestamp, connection)
137 if connection:getIsServer() then
138 local spec = self.spec_fruitPreparer
139 spec.isWorking = streamReadBool(streamId)
140 end
141end

onTurnedOff

Description
Called on turn off
Definition
onTurnedOff(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
169function FruitPreparer:onTurnedOff()
170 if self.isClient then
171 local spec = self.spec_fruitPreparer
172 g_soundManager:stopSamples(spec.samples)
173 g_animationManager:stopAnimations(spec.animationNodes)
174 end
175end

onTurnedOn

Description
Called on turn on
Definition
onTurnedOn(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
158function FruitPreparer:onTurnedOn()
159 if self.isClient then
160 local spec = self.spec_fruitPreparer
161 g_soundManager:playSample(spec.samples.work)
162 g_animationManager:startAnimations(spec.animationNodes)
163 end
164end

onWriteUpdateStream

Description
Called on on update
Definition
onWriteUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdstream ID
tableconnectionconnection
integerdirtyMaskdirty mask
Code
148function FruitPreparer:onWriteUpdateStream(streamId, connection, dirtyMask)
149 if not connection:getIsServer() then
150 local spec = self.spec_fruitPreparer
151 streamWriteBool(streamId, spec.isWorking)
152 end
153end

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
39function FruitPreparer.prerequisitesPresent(specializations)
40 return SpecializationUtil.hasSpecialization(WorkArea, specializations) and SpecializationUtil.hasSpecialization(TurnOnVehicle, specializations)
41end

processFruitPreparerArea

Description
Definition
processFruitPreparerArea()
Code
286function FruitPreparer:processFruitPreparerArea(workArea)
287 local spec = self.spec_fruitPreparer
288 local workAreaSpec = self.spec_workArea
289
290 local xs,_,zs = getWorldTranslation(workArea.start)
291 local xw,_,zw = getWorldTranslation(workArea.width)
292 local xh,_,zh = getWorldTranslation(workArea.height)
293
294 local dxs, dzs = xs, zs
295 local dxw, dzw = xw, zw
296 local dxh, dzh = xh, zh
297
298 if workArea.dropWorkAreaIndex ~= nil then
299 local dropArea = workAreaSpec.workAreas[workArea.dropWorkAreaIndex]
300 if dropArea ~= nil then
301 dxs, _, dzs = getWorldTranslation(dropArea.start)
302 dxw, _, dzw = getWorldTranslation(dropArea.width)
303 dxh, _, dzh = getWorldTranslation(dropArea.height)
304 end
305 end
306
307 local area = FSDensityMapUtil.updateFruitPreparerArea(spec.fruitType, xs,zs, xw,zw, xh,zh, dxs,dzs, dxw,dzw, dxh,dzh)
308 if area > 0 then
309 spec.lastWorkTime = g_time
310 end
311
312 return 0, area
313end

registerEventListeners

Description
Definition
registerEventListeners()
Code
64function FruitPreparer.registerEventListeners(vehicleType)
65 SpecializationUtil.registerEventListener(vehicleType, "onLoad", FruitPreparer)
66 SpecializationUtil.registerEventListener(vehicleType, "onDelete", FruitPreparer)
67 SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", FruitPreparer)
68 SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", FruitPreparer)
69 SpecializationUtil.registerEventListener(vehicleType, "onTurnedOn", FruitPreparer)
70 SpecializationUtil.registerEventListener(vehicleType, "onTurnedOff", FruitPreparer)
71 SpecializationUtil.registerEventListener(vehicleType, "onEndWorkAreaProcessing", FruitPreparer)
72end

registerFunctions

Description
Definition
registerFunctions()
Code
45function FruitPreparer.registerFunctions(vehicleType)
46 SpecializationUtil.registerFunction(vehicleType, "processFruitPreparerArea", FruitPreparer.processFruitPreparerArea)
47end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
51function FruitPreparer.registerOverwrittenFunctions(vehicleType)
52 SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", FruitPreparer.loadWorkAreaFromXML)
53 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDoGroundManipulation", FruitPreparer.getDoGroundManipulation)
54 SpecializationUtil.registerOverwrittenFunction(vehicleType, "doCheckSpeedLimit", FruitPreparer.doCheckSpeedLimit)
55 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getAllowCutterAIFruitRequirements", FruitPreparer.getAllowCutterAIFruitRequirements)
56 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDirtMultiplier", FruitPreparer.getDirtMultiplier)
57 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getWearMultiplier", FruitPreparer.getWearMultiplier)
58 SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadRandomlyMovingPartFromXML", FruitPreparer.loadRandomlyMovingPartFromXML)
59 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsRandomlyMovingPartActive", FruitPreparer.getIsRandomlyMovingPartActive)
60end