LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

Mower

Description
Specialization for vehicles with grass mowing functionality
Functions

actionEventToggleDrop

Description
Definition
actionEventToggleDrop()
Code
584function Mower.actionEventToggleDrop(self, actionName, inputValue, callbackState, isAnalog)
585 local spec = self.spec_mower
586 self:setUseMowerWindrowDropAreas(not spec.useWindrowDropAreas)
587end

doCheckSpeedLimit

Description
Returns if speed limit should be checked
Definition
doCheckSpeedLimit()
Return Values
booleancheckSpeedlimitcheck speed limit
Code
445function Mower:doCheckSpeedLimit(superFunc)
446 return superFunc(self) or (self:getIsTurnedOn() and (self.getIsLowered == nil or self:getIsLowered()))
447end

getCanBeSelected

Description
Definition
getCanBeSelected()
Code
451function Mower:getCanBeSelected(superFunc)
452 return true
453end

getDefaultSpeedLimit

Description
Returns default speed limit
Definition
getDefaultSpeedLimit()
Return Values
floatspeedLimitspeed limit
Code
578function Mower.getDefaultSpeedLimit()
579 return 20
580end

getDirtMultiplier

Description
Definition
getDirtMultiplier()
Code
457function Mower:getDirtMultiplier(superFunc)
458 local spec = self.spec_mower
459
460 local multiplier = superFunc(self)
461
462 if spec.isWorking then
463 multiplier = multiplier + self:getWorkDirtMultiplier() * self:getLastSpeed() / self.speedLimit
464 end
465
466 return multiplier
467end

getDropArea

Description
Definition
getDropArea()
Code
342function Mower:getDropArea(workArea)
343 if workArea.dropWindrow then
344 local dropArea = workArea
345 if workArea.dropAreaIndex ~= nil then
346 dropArea = self.spec_workArea.workAreas[workArea.dropAreaIndex]
347 if dropArea == nil then
348 print("Warning: Invalid dropAreaIndex '"..tostring(workArea.dropAreaIndex).."' in '"..tostring(self.configFileName).."'!")
349 workArea.dropAreaIndex = nil
350 end
351 end
352 return dropArea
353 end
354
355 return nil
356end

getMowerLoadPercentage

Description
Definition
getMowerLoadPercentage()
Code
566function Mower:getMowerLoadPercentage()
567 if self.spec_mower ~= nil then
568 return self.spec_mower.workAreaParameters.lastUsedAreasPct
569 end
570
571 return 0
572end

getWearMultiplier

Description
Definition
getWearMultiplier()
Code
471function Mower:getWearMultiplier(superFunc)
472 local spec = self.spec_mower
473
474 local multiplier = superFunc(self)
475
476 if spec.isWorking then
477 multiplier = multiplier + self:getWorkWearMultiplier() * self:getLastSpeed() / self.speedLimit
478 end
479
480 return multiplier
481end

initSpecialization

Description
Called on specialization initializing
Definition
initSpecialization()
Code
17function Mower.initSpecialization()
18 g_workAreaTypeManager:addWorkAreaType("mower", false)
19end

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
400function Mower:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key)
401 local retValue = superFunc(self, workArea, xmlFile, key)
402
403 if workArea.type == WorkAreaType.DEFAULT then
404 workArea.type = WorkAreaType.MOWER
405 end
406
407 if workArea.type == WorkAreaType.MOWER then
408 workArea.dropWindrow = Utils.getNoNil(getXMLBool(xmlFile, key .. ".mower#dropWindrow"), true)
409 workArea.dropAreaIndex = Utils.getNoNil(getXMLInt(xmlFile, key .. ".mower#dropAreaIndex"), 1)
410
411 workArea.lastPickupLiters = 0
412 end
413
414 if workArea.type == WorkAreaType.AUXILIARY then
415 workArea.litersToDrop = 0
416 if self.spec_mower.dropAreas == nil then
417 self.spec_mower.dropAreas = {}
418 end
419 table.insert(self.spec_mower.dropAreas, workArea)
420 end
421
422 return retValue
423end

onDelete

Description
Called on deleting
Definition
onDelete()
Code
172function Mower:onDelete()
173 if self.isClient then
174 local spec = self.spec_mower
175
176 for _, dropEffect in pairs(spec.dropEffects) do
177 g_effectManager:deleteEffects(dropEffect.effects)
178 end
179 g_animationManager:deleteAnimations(spec.animationNodes)
180 end
181end

onEndWorkAreaProcessing

Description
Definition
onEndWorkAreaProcessing()
Code
534function Mower:onEndWorkAreaProcessing(dt, hasProcessed)
535 local spec = self.spec_mower
536
537 for _, dropArea in ipairs(spec.dropAreas) do
538 if dropArea.litersToDrop > 0 then
539 self:processDropArea(dropArea, dt)
540 end
541 end
542
543 if self.isServer then
544 local lastStatsArea = spec.workAreaParameters.lastStatsArea
545 local lastTotalArea = spec.workAreaParameters.lastTotalArea
546
547 if lastStatsArea > 0 then
548 local ha = MathUtil.areaToHa(lastStatsArea, g_currentMission:getFruitPixelsToSqm()) -- 4096px are mapped to 2048m
549 local stats = g_currentMission:farmStats(self:getLastTouchedFarmlandFarmId())
550 stats:updateStats("threshedHectares", ha)
551 stats:updateStats("workedHectares", ha)
552 end
553 end
554
555 spec.workAreaParameters.lastUsedAreasTime = spec.workAreaParameters.lastUsedAreasTime + dt
556 if spec.workAreaParameters.lastUsedAreasTime > 500 then
557 spec.workAreaParameters.lastUsedAreasPct = spec.workAreaParameters.lastUsedAreas / math.max(spec.workAreaParameters.lastUsedAreasSum, 0.01)
558 spec.workAreaParameters.lastUsedAreas = 0
559 spec.workAreaParameters.lastUsedAreasSum = 0
560 spec.workAreaParameters.lastUsedAreasTime = 0
561 end
562end

onLoad

Description
Called on loading
Definition
onLoad(table savegame)
Arguments
tablesavegamesavegame
Code
69function Mower:onLoad(savegame)
70 local spec = self.spec_mower
71
72 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.mowerEffects.mowerEffect", "vehicle.mower.dropEffects.dropEffect") --FS17 to FS19
73 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.mowerEffects.mowerEffect#mowerCutArea", "vehicle.mower.dropEffects.dropEffect#dropAreaIndex") --FS17 to FS19
74 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.turnedOnRotationNodes.turnedOnRotationNode#type", "vehicle.mower.turnOnNodes.turnOnNode", "mower") --FS17 to FS19
75 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.mowerStartSound", "vehicle.turnOnVehicle.sounds.start") --FS17 to FS19
76 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.mowerStopSound", "vehicle.turnOnVehicle.sounds.stop") --FS17 to FS19
77 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.mowerSound", "vehicle.turnOnVehicle.sounds.work") --FS17 to FS19
78
79 if self.isClient then
80 spec.animationNodes = g_animationManager:loadAnimations(self.xmlFile, "vehicle.mower.animationNodes", self.components, self, self.i3dMappings)
81
82 spec.dropEffects = {}
83 local i = 0
84 while true do
85 local key = string.format("vehicle.mower.dropEffects.dropEffect(%d)", i)
86 if not hasXMLProperty(self.xmlFile, key) then
87 break
88 end
89 local effects = g_effectManager:loadEffect(self.xmlFile, key, self.components, self, self.i3dMappings)
90 if effects ~= nil then
91 local dropEffect = {}
92 dropEffect.effects = effects
93 dropEffect.dropAreaIndex = Utils.getNoNil(getXMLInt(self.xmlFile, key .. "#dropAreaIndex"), 1)
94 dropEffect.workAreaIndex = getXMLInt(self.xmlFile, key .. "#workAreaIndex")
95 if self.spec_workArea.workAreas[dropEffect.dropAreaIndex] == nil then
96 g_logManager:xmlWarning(self.configFileName, "Invalid dropAreaIndex '%s' in '%s'", dropEffect.dropAreaIndex, key)
97 dropEffect.dropAreaIndex = nil
98 end
99 dropEffect.activeTime = -1
100 dropEffect.activeTimeDuration = 750
101 dropEffect.isActive = false
102 dropEffect.isActiveSent = false
103 table.insert(spec.dropEffects, dropEffect)
104 end
105 i = i + 1
106 end
107 end
108
109 if spec.dropAreas == nil then
110 spec.dropAreas = {}
111 end
112
113 spec.fruitTypeConverters = {}
114 local converter = getXMLString(self.xmlFile, "vehicle.mower#fruitTypeConverter")
115 if converter ~= nil then
116 local data = g_fruitTypeManager:getConverterDataByName(converter)
117 if data ~= nil then
118 for input, converted in pairs(data) do
119 spec.fruitTypeConverters[input] = converted
120 end
121 end
122 else
123 print(string.format("Warning: Missing fruit type converter in '%s'", self.configFileName))
124 end
125
126 spec.fillUnitIndex = getXMLFloat(self.xmlFile, "vehicle.mower#fillUnitIndex")
127 spec.pickupFillScale = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.mower#pickupFillScale"), 1)
128
129 spec.toggleWindrowDropEnableText = getXMLString(self.xmlFile, "vehicle.mower.toggleWindrowDrop#enableText")
130 spec.toggleWindrowDropDisableText = getXMLString(self.xmlFile, "vehicle.mower.toggleWindrowDrop#disableText")
131 if spec.toggleWindrowDropEnableText ~= nil then
132 spec.toggleWindrowDropEnableText = g_i18n:convertText(spec.toggleWindrowDropEnableText, self.customEnvironment)
133 end
134 if spec.toggleWindrowDropDisableText ~= nil then
135 spec.toggleWindrowDropDisableText = g_i18n:convertText(spec.toggleWindrowDropDisableText, self.customEnvironment)
136 end
137
138 spec.toggleWindrowDropAnimation = getXMLString(self.xmlFile, "vehicle.mower.toggleWindrowDrop#animationName")
139 spec.enableWindrowDropAnimationSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.mower.toggleWindrowDrop#animationEnableSpeed"), 1)
140 spec.disableWindrowDropAnimationSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.mower.toggleWindrowDrop#animationDisableSpeed"), -spec.enableWindrowDropAnimationSpeed)
141
142 spec.useWindrowDropAreas = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.mower.toggleWindrowDrop#startEnabled"), false)
143
144 spec.workAreaParameters = {}
145 spec.workAreaParameters.lastChangedArea = 0
146 spec.workAreaParameters.lastStatsArea = 0
147 spec.workAreaParameters.lastTotalArea = 0
148 spec.workAreaParameters.lastUsedAreas = 0
149 spec.workAreaParameters.lastUsedAreasSum = 0
150 spec.workAreaParameters.lastUsedAreasPct = 0
151 spec.workAreaParameters.lastUsedAreasTime = 0
152
153 spec.isWorking = false
154
155 spec.dirtyFlag = self:getNextDirtyFlag()
156
157 if self.addAITerrainDetailRequiredRange ~= nil then
158 self:addAITerrainDetailRequiredRange(g_currentMission.grassValue, g_currentMission.grassValue, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels)
159 self:addAITerrainDetailRequiredRange(g_currentMission.sowingValue, g_currentMission.sowingValue, g_currentMission.terrainDetailTypeFirstChannel, g_currentMission.terrainDetailTypeNumChannels)
160 end
161
162 if self.addAIFruitRequirement ~= nil then
163 for inputFruitType, _ in pairs(spec.fruitTypeConverters) do
164 local desc = g_fruitTypeManager:getFruitTypeByIndex(inputFruitType)
165 self:addAIFruitRequirement(desc.index, desc.minHarvestingGrowthState, desc.maxHarvestingGrowthState)
166 end
167 end
168end

onReadStream

Description
Called on client side on join
Definition
onReadStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
187function Mower:onReadStream(streamId, connection)
188 local spec = self.spec_mower
189 if spec.toggleWindrowDropEnableText ~= nil and spec.toggleWindrowDropDisableText ~= nil then
190 local useMowerWindrowDropAreas = streamReadBool(streamId)
191 self:setUseMowerWindrowDropAreas(useMowerWindrowDropAreas, true)
192 end
193end

onReadUpdateStream

Description
Called on on update
Definition
onReadUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdstream ID
integertimestamptimestamp
tableconnectionconnection
Code
211function Mower:onReadUpdateStream(streamId, timestamp, connection)
212 if connection:getIsServer() then
213 local spec = self.spec_mower
214
215 if #spec.dropEffects > 0 then
216 if streamReadBool(streamId) then
217 for _, dropEffect in ipairs(spec.dropEffects) do
218 dropEffect.fillType = streamReadUIntN(streamId, FillTypeManager.SEND_NUM_BITS)
219 self:setDropEffectEnabled(dropEffect, streamReadBool(streamId))
220 end
221 end
222 end
223 end
224end

onRegisterActionEvents

Description
Definition
onRegisterActionEvents()
Code
427function Mower:onRegisterActionEvents(isActiveForInput, isActiveForInputIgnoreSelection)
428 if self.isClient then
429 local spec = self.spec_mower
430 self:clearActionEventsTable(spec.actionEvents)
431
432 if isActiveForInputIgnoreSelection then
433 if spec.toggleWindrowDropEnableText ~= nil and spec.toggleWindrowDropDisableText ~= nil then
434 local _, actionEventId = self:addActionEvent(spec.actionEvents, InputAction.IMPLEMENT_EXTRA3, self, Mower.actionEventToggleDrop, false, true, false, true, nil)
435 g_inputBinding:setActionEventTextPriority(actionEventId, GS_PRIO_LOW)
436 Mower.updateActionEventToggleDrop(self)
437 end
438 end
439 end
440end

onStartWorkAreaProcessing

Description
Definition
onStartWorkAreaProcessing()
Code
509function Mower:onStartWorkAreaProcessing(dt)
510 local spec = self.spec_mower
511
512 if self.isServer then
513 for _, dropEffect in pairs(spec.dropEffects) do
514 -- activate or deactivate dropEffect. Could be 1 frame delayed but safes a second for loop in onEndWorkAreaProcessing
515 if dropEffect.isActive ~= dropEffect.isActiveSent then
516 dropEffect.isActiveSent = dropEffect.isActive
517 self:setDropEffectEnabled(dropEffect, dropEffect.isActiveSent)
518 self:raiseDirtyFlags(spec.dirtyFlag)
519 end
520
521 dropEffect.isActive = false
522 end
523 end
524
525 spec.workAreaParameters.lastChangedArea = 0
526 spec.workAreaParameters.lastStatsArea = 0
527 spec.workAreaParameters.lastTotalArea = 0
528
529 spec.isWorking = false
530end

onTurnedOff

Description
Called on turn off
Definition
onTurnedOff(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
496function Mower:onTurnedOff()
497 if self.isClient then
498 local spec = self.spec_mower
499 for _, dropEffect in pairs(spec.dropEffects) do
500 self:setDropEffectEnabled(dropEffect, false)
501 end
502
503 g_animationManager:stopAnimations(spec.animationNodes)
504 end
505end

onTurnedOn

Description
Called on turn off
Definition
onTurnedOn(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
486function Mower:onTurnedOn()
487 if self.isClient then
488 local spec = self.spec_mower
489 g_animationManager:startAnimations(spec.animationNodes)
490 end
491end

onWriteStream

Description
Called on server side on join
Definition
onWriteStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
199function Mower:onWriteStream(streamId, connection)
200 local spec = self.spec_mower
201 if spec.toggleWindrowDropEnableText ~= nil and spec.toggleWindrowDropDisableText ~= nil then
202 streamWriteBool(streamId, spec.useWindrowDropAreas)
203 end
204end

onWriteUpdateStream

Description
Called on on update
Definition
onWriteUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdstream ID
tableconnectionconnection
integerdirtyMaskdirty mask
Code
231function Mower:onWriteUpdateStream(streamId, connection, dirtyMask)
232 if not connection:getIsServer() then
233 local spec = self.spec_mower
234
235 if #spec.dropEffects > 0 then
236 if streamWriteBool(streamId, bitAND(dirtyMask, spec.dirtyFlag) ~= 0) then
237 for _, dropEffect in ipairs(spec.dropEffects) do
238 streamWriteUIntN(streamId, dropEffect.fillType or FillType.UNKNOWN, FillTypeManager.SEND_NUM_BITS)
239 streamWriteBool(streamId, dropEffect.isActiveSent)
240 end
241 end
242 end
243 end
244end

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
25function Mower.prerequisitesPresent(specializations)
26 return SpecializationUtil.hasSpecialization(WorkArea, specializations) and SpecializationUtil.hasSpecialization(TurnOnVehicle, specializations)
27end

processDropArea

Description
Definition
processDropArea()
Code
298function Mower:processDropArea(dropArea, dt)
299 local spec = self.spec_mower
300
301 local dropped, lineOffset = 0
302 if dropArea.litersToDrop > g_densityMapHeightManager:getMinValidLiterValue(dropArea.fillType) then
303 local xs,_,zs = getWorldTranslation(dropArea.start)
304 local xw,_,zw = getWorldTranslation(dropArea.width)
305 local xh,_,zh = getWorldTranslation(dropArea.height)
306
307 local f = math.random() -- any benefit from randomness in this case?
308 local sx = xs + (f * (xh - xs))
309 local sz = zs + (f * (zh - zs))
310 local sy = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, sx,0,sz)
311
312 local f = math.random()
313 local ex = xw + (f * (xh - xs))
314 local ez = zw + (f * (zh - zs))
315 local ey = getTerrainHeightAtWorldPos(g_currentMission.terrainRootNode, ex,0,ez)
316
317 dropped, lineOffset = DensityMapHeightUtil.tipToGroundAroundLine(self, dropArea.litersToDrop, dropArea.fillType, sx,sy,sz, ex,ey,ez, 0, nil, dropArea.dropLineOffset, false, nil, false)
318
319 dropArea.litersToDrop = dropArea.litersToDrop - dropped
320 dropArea.dropLineOffset = lineOffset
321 end
322
323 for _, dropEffect in pairs(spec.dropEffects) do
324 if dropEffect.dropAreaIndex == dropArea.index and dropped > 0 and (dropEffect.workAreaIndex == nil or dropEffect.workAreaIndex == dropArea.workAreaIndex) then
325 if dropEffect.fillType ~= dropArea.fillType then
326 dropEffect.fillType = dropArea.fillType
327 g_effectManager:setFillType(dropEffect.effects, dropEffect.fillType)
328 end
329 dropEffect.activeTime = dropEffect.activeTimeDuration
330 dropEffect.isActive = true
331 else
332 dropEffect.activeTime = math.max(dropEffect.activeTime - dt, 0)
333 if dropEffect.activeTime > 0 then
334 dropEffect.isActive = true
335 end
336 end
337 end
338end

processMowerArea

Description
Definition
processMowerArea()
Code
248function Mower:processMowerArea(workArea, dt)
249 local spec = self.spec_mower
250
251 if self:getLastSpeed() > 1 then
252 spec.isWorking = true
253 end
254
255 local xs,_,zs = getWorldTranslation(workArea.start)
256 local xw,_,zw = getWorldTranslation(workArea.width)
257 local xh,_,zh = getWorldTranslation(workArea.height)
258
259 for inputFruitType, converterData in pairs(spec.fruitTypeConverters) do
260 local changedArea, totalArea, sprayFactor, plowFactor, limeFactor, weedFactor, _, _ = FSDensityMapUtil.cutFruitArea(inputFruitType, xs,zs, xw,zw, xh,zh, true, true, false)
261
262 if changedArea > 0 then
263 local multiplier = g_currentMission:getHarvestScaleMultiplier(inputFruitType, sprayFactor, plowFactor, limeFactor, weedFactor)
264 changedArea = changedArea * multiplier
265
266 local pixelToSqm = g_currentMission:getFruitPixelsToSqm()
267 local sqm = changedArea * pixelToSqm
268 local litersToDrop = sqm * g_fruitTypeManager:getFillTypeLiterPerSqm(converterData.fillTypeIndex, 1)
269
270 workArea.lastPickupLiters = litersToDrop
271
272 local dropArea = self:getDropArea(workArea)
273 if dropArea ~= nil then
274 dropArea.litersToDrop = dropArea.litersToDrop + litersToDrop
275 dropArea.fillType = converterData.fillTypeIndex
276 dropArea.workAreaIndex = workArea.index
277 elseif spec.fillUnitIndex ~= nil then
278 if self.isServer then
279 self:addFillUnitFillLevel(self:getOwnerFarmId(), spec.fillUnitIndex, litersToDrop, converterData.fillTypeIndex, ToolType.UNDEFINED)
280 end
281 end
282
283 spec.workAreaParameters.lastChangedArea = spec.workAreaParameters.lastChangedArea + changedArea
284 spec.workAreaParameters.lastStatsArea = spec.workAreaParameters.lastStatsArea + changedArea
285 spec.workAreaParameters.lastTotalArea = spec.workAreaParameters.lastTotalArea + totalArea
286
287 spec.workAreaParameters.lastUsedAreas = spec.workAreaParameters.lastUsedAreas + 1
288 end
289 end
290
291 spec.workAreaParameters.lastUsedAreasSum = spec.workAreaParameters.lastUsedAreasSum + 1
292
293 return spec.workAreaParameters.lastChangedArea, spec.workAreaParameters.lastTotalArea
294end

registerEventListeners

Description
Definition
registerEventListeners()
Code
51function Mower.registerEventListeners(vehicleType)
52 SpecializationUtil.registerEventListener(vehicleType, "onLoad", Mower)
53 SpecializationUtil.registerEventListener(vehicleType, "onDelete", Mower)
54 SpecializationUtil.registerEventListener(vehicleType, "onReadStream", Mower)
55 SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", Mower)
56 SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", Mower)
57 SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", Mower)
58 SpecializationUtil.registerEventListener(vehicleType, "onRegisterActionEvents", Mower)
59 SpecializationUtil.registerEventListener(vehicleType, "onTurnedOn", Mower)
60 SpecializationUtil.registerEventListener(vehicleType, "onTurnedOff", Mower)
61 SpecializationUtil.registerEventListener(vehicleType, "onStartWorkAreaProcessing", Mower)
62 SpecializationUtil.registerEventListener(vehicleType, "onEndWorkAreaProcessing", Mower)
63end

registerFunctions

Description
Definition
registerFunctions()
Code
31function Mower.registerFunctions(vehicleType)
32 SpecializationUtil.registerFunction(vehicleType, "processMowerArea", Mower.processMowerArea)
33 SpecializationUtil.registerFunction(vehicleType, "processDropArea", Mower.processDropArea)
34 SpecializationUtil.registerFunction(vehicleType, "getDropArea", Mower.getDropArea)
35 SpecializationUtil.registerFunction(vehicleType, "setDropEffectEnabled", Mower.setDropEffectEnabled)
36 SpecializationUtil.registerFunction(vehicleType, "setUseMowerWindrowDropAreas", Mower.setUseMowerWindrowDropAreas)
37end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
41function Mower.registerOverwrittenFunctions(vehicleType)
42 SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", Mower.loadWorkAreaFromXML)
43 SpecializationUtil.registerOverwrittenFunction(vehicleType, "doCheckSpeedLimit", Mower.doCheckSpeedLimit)
44 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanBeSelected", Mower.getCanBeSelected)
45 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDirtMultiplier", Mower.getDirtMultiplier)
46 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getWearMultiplier", Mower.getWearMultiplier)
47end

setDropEffectEnabled

Description
Enable mower effect
Definition
setDropEffectEnabled(table mowerEffect, boolean isActive)
Arguments
tablemowerEffectmower effect
booleanisActivenew is active state
Code
362function Mower:setDropEffectEnabled(dropEffect, isActive)
363 dropEffect.isActive = isActive
364 if self.isClient then
365 if isActive then
366 g_effectManager:setFillType(dropEffect.effects, dropEffect.fillType)
367 g_effectManager:startEffects(dropEffect.effects)
368 else
369 g_effectManager:stopEffects(dropEffect.effects)
370 end
371 end
372end

setUseMowerWindrowDropAreas

Description
Toggle use of windrower drop areas
Definition
setUseMowerWindrowDropAreas(boolean useMowerWindrowDropAreas, boolean noEventSend)
Arguments
booleanuseMowerWindrowDropAreasuse mower windrow drop areas
booleannoEventSendno event send
Code
378function Mower:setUseMowerWindrowDropAreas(useMowerWindrowDropAreas, noEventSend)
379 local spec = self.spec_mower
380 if useMowerWindrowDropAreas ~= spec.useWindrowDropAreas then
381 MowerToggleWindrowDropEvent.sendEvent(self, useMowerWindrowDropAreas, noEventSend)
382 spec.useWindrowDropAreas = useMowerWindrowDropAreas
383
384 if spec.toggleWindrowDropAnimation ~= nil and self.playAnimation ~= nil then
385 local speed = spec.enableWindrowDropAnimationSpeed
386 if not useMowerWindrowDropAreas then
387 speed = spec.disableWindrowDropAnimationSpeed
388 end
389 self:playAnimation(spec.toggleWindrowDropAnimation, speed, nil, true)
390 end
391 end
392end

updateActionEventToggleDrop

Description
Definition
updateActionEventToggleDrop()
Code
591function Mower.updateActionEventToggleDrop(self)
592 local spec = self.spec_mower
593 local actionEvent = spec.actionEvents[InputAction.IMPLEMENT_EXTRA3]
594 if actionEvent ~= nil then
595 local text = string.format(spec.toggleWindrowDropDisableText, self.typeDesc)
596 if not spec.useWindrowDropAreas then
597 text = string.format(spec.toggleWindrowDropEnableText, self.typeDesc)
598 end
599 g_inputBinding:setActionEventText(actionEvent.actionEventId, text)
600 end
601end