Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- AIConveyorBelt
- AIDrivable
- AIFieldWorker
- AIImplement
- AIJobVehicle
- AIVehicle
- AIVehicleObstacle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- AutoLoader
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BaseMaterial
- BigBag
- BunkerSiloCompacter
- BunkerSiloInteractor
- CCTDrivable
- Combine
- ConnectionHoses
- ConveyorBelt
- Cover
- CrabSteering
- Crawlers
- CropSensor
- Cultivator
- Cutter
- Cylindered
- CylinderedFoldable
- Dashboard
- Dischargeable
- Drivable
- DynamicallyLoadedParts
- DynamicMountAttacher
- Enterable
- ExtendedAIVehicle
- ExtendedCombine
- ExtendedMotorized
- ExtendedMower
- ExtendedSowingMachine
- ExtendedSprayer
- ExtendedWearable
- FertilizingCultivator
- FertilizingSowingMachine
- FillTriggerVehicle
- FillUnit
- FillVolume
- Foldable
- FoliageBending
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- GroundAdjustedNodes
- GroundReference
- HeadlandAnimation
- Honk
- HookLiftContainer
- HookLiftTrailer
- IKChains
- InlineWrapper
- JigglingParts
- Leveler
- LicensePlates
- Lights
- LivestockTrailer
- Locomotive
- LogGrab
- ManureBarrel
- ManureSensor
- MixerWagon
- Motorized
- Mountable
- Mower
- Mulcher
- MultipleItemPurchase
- Pallet
- Pickup
- Pipe
- PlaceableAI
- PlaceableAnimatedObjects
- PlaceableBeehive
- PlaceableBeehivePalletSpa...
- PlaceableBunkerSilo
- PlaceableBuyingStation
- PlaceableCartridgePlayer
- PlaceableChargingStation
- PlaceableClearAreas
- PlaceableColorable
- PlaceableDeletedNodes
- PlaceableDoghouse
- PlaceableDynamicallyLoade...
- PlaceableFarmhouse
- PlaceableFence
- PlaceableFoliageAreas
- PlaceableGreenhouse
- PlaceableHighPressureWash...
- PlaceableHotspots
- PlaceableHusbandry
- PlaceableHusbandryAnimals
- PlaceableHusbandryFeeding...
- PlaceableHusbandryFence
- PlaceableHusbandryFood
- PlaceableHusbandryLiquidM...
- PlaceableHusbandryMilk
- PlaceableHusbandryPallets
- PlaceableHusbandryStraw
- PlaceableHusbandryWater
- PlaceableIncomePerHour
- PlaceableIndoorAreas
- PlaceableInfoTrigger
- PlaceableLeveling
- PlaceableLights
- PlaceableManureHeap
- PlaceablePlacement
- PlaceableProductionPoint
- PlaceableSellingStation
- PlaceableSilo
- PlaceableSiloExtension
- PlaceableSolarPanels
- PlaceableTipOcclusionArea...
- PlaceableTrainSystem
- PlaceableTriggerMarkers
- PlaceableVine
- PlaceableWardrobe
- PlaceableWeatherStation
- PlaceableWeighingStation
- PlaceableWindTurbine
- PlaceableWorkshop
- Plow
- PlowPacker
- PowerConsumer
- PowerTakeOffs
- PrecisionFarmingStatistic
- PushHandTool
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- Rideable
- RidgeMarker
- Roller
- Ropes
- RTKStation
- SaltSpreader
- SemiTrailerFront
- Shovel
- SlopeCompensation
- SmartAttach
- SoilSampler
- SowingMachine
- SpeedRotatingParts
- SplineVehicle
- Sprayer
- StonePicker
- StrawBlower
- StumpCutter
- SupportVehicle
- Suspensions
- Tedder
- TensionBeltObject
- TensionBelts
- TestAreas
- TipOccluder
- Trailer
- TreePlanter
- TreeSaplingPallet
- TreeSaw
- TurnOnVehicle
- VariableWorkWidth
- VehicleSettings
- VineCutter
- VineDetector
- VinePrepruner
- Washable
- WaterTrailer
- Wearable
- Weeder
- WeedSpotSpray
- Wheels
- WindBending
- Windrower
- Wipers
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkMode
- WorkParticles
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
StonePicker
DescriptionSpecialization for all stonePickers, requires WorkArea specializationFunctions
- doCheckSpeedLimit
- getCanBeTurnedOn
- getCanToggleTurnedOn
- getDefaultSpeedLimit
- getDirtMultiplier
- getDoGroundManipulation
- getIsWorkAreaActive
- getTurnedOnNotAllowedWarning
- getWearMultiplier
- initSpecialization
- loadWorkAreaFromXML
- onDeactivate
- onDelete
- onEndWorkAreaProcessing
- onFillUnitFillLevelChanged
- onLoad
- onPostAttach
- onReadStream
- onReadUpdateStream
- onStartWorkAreaProcessing
- onWriteStream
- onWriteUpdateStream
- prerequisitesPresent
- processStonePickerArea
- registerEventListeners
- registerFunctions
- registerOverwrittenFunctions
- setStonePickerEffectsState
doCheckSpeedLimit
DescriptionReturns if speed limit should be checkedDefinition
doCheckSpeedLimit()Return Values
boolean | checkSpeedlimit | check speed limit |
276 | function StonePicker:doCheckSpeedLimit(superFunc) |
277 | local spec = self.spec_stonePicker |
278 | return superFunc(self) or (self:getIsImplementChainLowered() and (not spec.needsActivation or self:getIsTurnedOn())) |
279 | end |
getCanBeTurnedOn
DescriptionDefinitiongetCanBeTurnedOn()Code
366 | function StonePicker:getCanBeTurnedOn(superFunc) |
367 | local spec = self.spec_stonePicker |
368 | |
369 | local freeCapacity = self:getFillUnitFreeCapacity(spec.fillUnitIndex) |
370 | if freeCapacity <= 0 and not self:getIsAIActive() then |
371 | return false |
372 | end |
373 | |
374 | return superFunc(self) |
375 | end |
getCanToggleTurnedOn
DescriptionDefinitiongetCanToggleTurnedOn()Code
392 | function StonePicker:getCanToggleTurnedOn(superFunc) |
393 | local spec = self.spec_stonePicker |
394 | if not spec.needsActivation then |
395 | return false |
396 | end |
397 | |
398 | return superFunc(self) |
399 | end |
getDefaultSpeedLimit
DescriptionReturns default speed limitDefinition
getDefaultSpeedLimit()Return Values
float | speedLimit | speed limit |
484 | function StonePicker.getDefaultSpeedLimit() |
485 | return 10 |
486 | end |
getDirtMultiplier
DescriptionReturns current dirt multiplierDefinition
getDirtMultiplier()Return Values
float | dirtMultiplier | current dirt multiplier |
297 | function StonePicker:getDirtMultiplier(superFunc) |
298 | local spec = self.spec_stonePicker |
299 | |
300 | local multiplier = superFunc(self) |
301 | if self.movingDirection > 0 and spec.isWorking and (not spec.needsActivation or self:getIsTurnedOn()) then |
302 | multiplier = multiplier + self:getWorkDirtMultiplier() * self:getLastSpeed() / spec.speedLimit |
303 | end |
304 | |
305 | return multiplier |
306 | end |
getDoGroundManipulation
DescriptionReturns if tool does ground manipulationDefinition
getDoGroundManipulation()Return Values
boolean | doGroundManipulation | do ground manipulation |
284 | function StonePicker:getDoGroundManipulation(superFunc) |
285 | local spec = self.spec_stonePicker |
286 | |
287 | if not spec.isWorking then |
288 | return false |
289 | end |
290 | |
291 | return superFunc(self) |
292 | end |
getIsWorkAreaActive
DescriptionDefinitiongetIsWorkAreaActive()Code
341 | function StonePicker:getIsWorkAreaActive(superFunc, workArea) |
342 | if workArea.type == WorkAreaType.STONEPICKER then |
343 | local spec = self.spec_stonePicker |
344 | |
345 | if spec.startActivationTime > g_currentMission.time then |
346 | return false |
347 | end |
348 | |
349 | if spec.onlyActiveWhenLowered and self.getIsLowered ~= nil then |
350 | if not self:getIsLowered(false) then |
351 | return false |
352 | end |
353 | end |
354 | |
355 | local freeCapacity = self:getFillUnitFreeCapacity(spec.fillUnitIndex) |
356 | if freeCapacity <= 0 and not self:getIsAIActive() then |
357 | return false |
358 | end |
359 | end |
360 | |
361 | return superFunc(self, workArea) |
362 | end |
getTurnedOnNotAllowedWarning
DescriptionDefinitiongetTurnedOnNotAllowedWarning()Code
379 | function StonePicker:getTurnedOnNotAllowedWarning(superFunc) |
380 | local spec = self.spec_stonePicker |
381 | |
382 | local freeCapacity = self:getFillUnitFreeCapacity(spec.fillUnitIndex) |
383 | if freeCapacity <= 0 and not self:getIsAIActive() then |
384 | return spec.texts.warningToolIsFull |
385 | end |
386 | |
387 | return superFunc(self) |
388 | end |
getWearMultiplier
DescriptionReturns current wear multiplierDefinition
getWearMultiplier()Return Values
float | dirtMultiplier | current wear multiplier |
312 | function StonePicker:getWearMultiplier(superFunc) |
313 | local spec = self.spec_stonePicker |
314 | local multiplier = superFunc(self) |
315 | |
316 | if self.movingDirection > 0 and spec.isWorking and (not spec.needsActivation or self:getIsTurnedOn()) then |
317 | multiplier = multiplier + self:getWorkWearMultiplier() * self:getLastSpeed() / self.speedLimit |
318 | end |
319 | |
320 | return multiplier |
321 | end |
initSpecialization
DescriptionCalled on specialization initializingDefinition
initSpecialization()Code
15 | function StonePicker.initSpecialization() |
16 | g_workAreaTypeManager:addWorkAreaType("stonePicker", true) |
17 | |
18 | local schema = Vehicle.xmlSchema |
19 | schema:setXMLSpecializationType("StonePicker") |
20 | |
21 | schema:register(XMLValueType.INT, "vehicle.stonePicker#fillUnitIndex", "Index of fillunit to be used for picked stones") |
22 | schema:register(XMLValueType.INT, "vehicle.stonePicker#loadInfoIndex", "Index of load info to use") |
23 | schema:register(XMLValueType.NODE_INDEX, "vehicle.stonePicker.directionNode#node", "Direction node") |
24 | schema:register(XMLValueType.BOOL, "vehicle.stonePicker.onlyActiveWhenLowered#value", "Only active when lowered", true) |
25 | schema:register(XMLValueType.BOOL, "vehicle.stonePicker.needsActivation#value", "Needs activation", true) |
26 | |
27 | EffectManager.registerEffectXMLPaths(schema, "vehicle.stonePicker.effects") |
28 | EffectManager.registerEffectXMLPaths(schema, "vehicle.stonePicker.soilEffects") |
29 | |
30 | SoundManager.registerSampleXMLPaths(schema, "vehicle.stonePicker.sounds", "work") |
31 | SoundManager.registerSampleXMLPaths(schema, "vehicle.stonePicker.sounds", "stone") |
32 | |
33 | schema:setXMLSpecializationType() |
34 | end |
loadWorkAreaFromXML
DescriptionLoads work areas from xmlDefinition
loadWorkAreaFromXML(table workArea, integer xmlFile, string key)Arguments
table | workArea | workArea |
integer | xmlFile | id of xml object |
string | key | key |
boolean | success | success |
329 | function StonePicker:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key) |
330 | local retValue = superFunc(self, workArea, xmlFile, key) |
331 | |
332 | if workArea.type == WorkAreaType.DEFAULT then |
333 | workArea.type = WorkAreaType.STONEPICKER |
334 | end |
335 | |
336 | return retValue |
337 | end |
onDeactivate
DescriptionDefinitiononDeactivate()Code
428 | function StonePicker:onDeactivate() |
429 | if self.isClient then |
430 | local spec = self.spec_stonePicker |
431 | g_soundManager:stopSamples(spec.samples) |
432 | spec.isWorkSamplePlaying = false |
433 | end |
434 | end |
onDelete
DescriptionCalled on deletingDefinition
onDelete()Code
140 | function StonePicker:onDelete() |
141 | local spec = self.spec_stonePicker |
142 | g_soundManager:deleteSamples(spec.samples) |
143 | g_effectManager:deleteEffects(spec.effects) |
144 | g_effectManager:deleteEffects(spec.soilEffects) |
145 | end |
onEndWorkAreaProcessing
DescriptionDefinitiononEndWorkAreaProcessing()Code
456 | function StonePicker:onEndWorkAreaProcessing(dt) |
457 | local spec = self.spec_stonePicker |
458 | |
459 | local params = spec.workAreaParameters |
460 | |
461 | if self.isServer then |
462 | local lastStatsArea = spec.workAreaParameters.lastStatsArea |
463 | if lastStatsArea > 0 then |
464 | self:updateLastWorkedArea(lastStatsArea) |
465 | end |
466 | |
467 | local state = (g_time - spec.workAreaParameters.lastChangedAreaTime) < 500 |
468 | local soilState = spec.isWorking and self:getIsOnField() |
469 | if spec.isEffectActive ~= state |
470 | or spec.effectGrowthState ~= spec.workAreaParameters.lastGrowthState |
471 | or soilState ~= spec.isSoilEffectActive then |
472 | self:setStonePickerEffectsState(state, spec.workAreaParameters.lastGrowthState, soilState) |
473 | self:raiseDirtyFlags(spec.dirtyFlag) |
474 | end |
475 | end |
476 | |
477 | local loadInfo = self:getFillVolumeLoadInfo(spec.loadInfoIndex) |
478 | self:addFillUnitFillLevel(self:getOwnerFarmId(), spec.fillUnitIndex, params.pickedLiters, FillType.STONE, ToolType.UNDEFINED, loadInfo) |
479 | end |
onFillUnitFillLevelChanged
DescriptionDefinitiononFillUnitFillLevelChanged()Code
403 | function StonePicker:onFillUnitFillLevelChanged(fillUnitIndex, fillLevelDelta, fillType, toolType, fillPositionData, appliedDelta) |
404 | local spec = self.spec_stonePicker |
405 | |
406 | if self.isServer then |
407 | if spec.fillUnitIndex == fillUnitIndex then |
408 | local freeCapacity = self:getFillUnitFreeCapacity(spec.fillUnitIndex) |
409 | if freeCapacity <= 0 and self:getIsTurnedOn() and not self:getIsAIActive() then |
410 | self:setIsTurnedOn(false, false) |
411 | end |
412 | end |
413 | end |
414 | end |
onLoad
DescriptionCalled on loadingDefinition
onLoad(table savegame)Arguments
table | savegame | savegame |
85 | function StonePicker:onLoad(savegame) |
86 | |
87 | if self:getGroundReferenceNodeFromIndex(1) == nil then |
88 | print("Warning: No ground reference nodes in "..self.configFileName) |
89 | end |
90 | |
91 | local spec = self.spec_stonePicker |
92 | |
93 | if self.isClient then |
94 | spec.samples = {} |
95 | spec.samples.work = g_soundManager:loadSampleFromXML(self.xmlFile, "vehicle.stonePicker.sounds", "work", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self) |
96 | spec.samples.stone = g_soundManager:loadSampleFromXML(self.xmlFile, "vehicle.stonePicker.sounds", "stone", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self) |
97 | spec.isWorkSamplePlaying = false |
98 | spec.isStoneSamplePlaying = false |
99 | |
100 | spec.effects = g_effectManager:loadEffect(self.xmlFile, "vehicle.stonePicker.effects", self.components, self, self.i3dMappings) |
101 | spec.soilEffects = g_effectManager:loadEffect(self.xmlFile, "vehicle.stonePicker.soilEffects", self.components, self, self.i3dMappings) |
102 | end |
103 | |
104 | spec.fillUnitIndex = self.xmlFile:getValue("vehicle.stonePicker#fillUnitIndex", 1) |
105 | spec.loadInfoIndex = self.xmlFile:getValue("vehicle.stonePicker#loadInfoIndex", 1) |
106 | spec.directionNode = self.xmlFile:getValue("vehicle.stonePicker.directionNode#node", self.components[1].node, self.components, self.i3dMappings) |
107 | spec.onlyActiveWhenLowered = self.xmlFile:getValue("vehicle.stonePicker.onlyActiveWhenLowered#value", true) |
108 | spec.needsActivation = self.xmlFile:getValue("vehicle.stonePicker.needsActivation#value", true) |
109 | |
110 | spec.startActivationTimeout = 2000 |
111 | spec.startActivationTime = 0 |
112 | spec.hasGroundContact = false |
113 | spec.isWorking = false |
114 | spec.isEffectActive = false |
115 | spec.effectGrowthState = 1 |
116 | spec.isSoilEffectActive = false |
117 | |
118 | spec.texts = {} |
119 | spec.texts.warningToolIsFull = g_i18n:getText("warning_toolIsFull") |
120 | |
121 | spec.workAreaParameters = {} |
122 | spec.workAreaParameters.angle = 0 |
123 | spec.workAreaParameters.pickedLiters = 0 |
124 | spec.workAreaParameters.lastChangedArea = 0 |
125 | spec.workAreaParameters.lastChangedAreaTime = -math.huge |
126 | spec.workAreaParameters.lastGrowthState = 1 |
127 | spec.workAreaParameters.lastStatsArea = 0 |
128 | spec.workAreaParameters.lastTotalArea = 0 |
129 | |
130 | if self.isServer then |
131 | local firstSowableValue, lastSowableValue = g_currentMission.fieldGroundSystem:getSowableRange() |
132 | self:addAITerrainDetailRequiredRange(firstSowableValue, lastSowableValue) |
133 | end |
134 | |
135 | spec.dirtyFlag = self:getNextDirtyFlag() |
136 | end |
onPostAttach
DescriptionCalled if vehicle gets attachedDefinition
onPostAttach(table attacherVehicle, integer inputJointDescIndex, integer jointDescIndex)Arguments
table | attacherVehicle | attacher vehicle |
integer | inputJointDescIndex | index of input attacher joint |
integer | jointDescIndex | index of attacher joint it gets attached to |
421 | function StonePicker:onPostAttach(attacherVehicle, inputJointDescIndex, jointDescIndex) |
422 | local spec = self.spec_stonePicker |
423 | spec.startActivationTime = g_currentMission.time + spec.startActivationTimeout |
424 | end |
onReadStream
DescriptionDefinitiononReadStream()Code
149 | function StonePicker:onReadStream(streamId, connection) |
150 | local state = streamReadBool(streamId) |
151 | local growthState = streamReadUIntN(streamId, 2) |
152 | local stateSoil = streamReadBool(streamId) |
153 | self:setStonePickerEffectsState(state, growthState, stateSoil) |
154 | end |
onReadUpdateStream
DescriptionDefinitiononReadUpdateStream()Code
167 | function StonePicker:onReadUpdateStream(streamId, timestamp, connection) |
168 | if connection.isServer then |
169 | if streamReadBool(streamId) then |
170 | local state = streamReadBool(streamId) |
171 | local growthState = streamReadUIntN(streamId, 2) |
172 | local stateSoil = streamReadBool(streamId) |
173 | self:setStonePickerEffectsState(state, growthState, stateSoil) |
174 | end |
175 | end |
176 | end |
onStartWorkAreaProcessing
DescriptionDefinitiononStartWorkAreaProcessing()Code
438 | function StonePicker:onStartWorkAreaProcessing(dt) |
439 | local spec = self.spec_stonePicker |
440 | |
441 | spec.isWorking = false |
442 | |
443 | local dx,_,dz = localDirectionToWorld(spec.directionNode, 0, 0, 1) |
444 | local angle = FSDensityMapUtil.convertToDensityMapAngle(MathUtil.getYRotationFromDirection(dx, dz), g_currentMission.fieldGroundSystem:getGroundAngleMaxValue()) |
445 | |
446 | spec.workAreaParameters.isActive = not spec.needsActivation or self:getIsTurnedOn() |
447 | spec.workAreaParameters.angle = angle |
448 | spec.workAreaParameters.pickedLiters = 0 |
449 | spec.workAreaParameters.lastChangedArea = 0 |
450 | spec.workAreaParameters.lastStatsArea = 0 |
451 | spec.workAreaParameters.lastTotalArea = 0 |
452 | end |
onWriteStream
DescriptionDefinitiononWriteStream()Code
158 | function StonePicker:onWriteStream(streamId, connection) |
159 | local spec = self.spec_stonePicker |
160 | streamWriteBool(streamId, spec.isEffectActive) |
161 | streamWriteUIntN(streamId, spec.effectGrowthState, 2) |
162 | streamWriteBool(streamId, spec.isSoilEffectActive) |
163 | end |
onWriteUpdateStream
DescriptionDefinitiononWriteUpdateStream()Code
180 | function StonePicker:onWriteUpdateStream(streamId, connection, dirtyMask) |
181 | if not connection.isServer then |
182 | local spec = self.spec_stonePicker |
183 | if streamWriteBool(streamId, bitAND(dirtyMask, spec.dirtyFlag) ~= 0) then |
184 | streamWriteBool(streamId, spec.isEffectActive) |
185 | streamWriteUIntN(streamId, spec.effectGrowthState, 2) |
186 | streamWriteBool(streamId, spec.isSoilEffectActive) |
187 | end |
188 | end |
189 | end |
prerequisitesPresent
DescriptionChecks if all prerequisite specializations are loadedDefinition
prerequisitesPresent(table specializations)Arguments
table | specializations | specializations |
boolean | hasPrerequisite | true if all prerequisite specializations are loaded |
40 | function StonePicker.prerequisitesPresent(specializations) |
41 | return SpecializationUtil.hasSpecialization(FillUnit, specializations) |
42 | and SpecializationUtil.hasSpecialization(WorkArea, specializations) |
43 | end |
processStonePickerArea
DescriptionDefinitionprocessStonePickerArea()Code
193 | function StonePicker:processStonePickerArea(workArea, dt) |
194 | local spec = self.spec_stonePicker |
195 | |
196 | if not spec.workAreaParameters.isActive then |
197 | return 0, 0 |
198 | end |
199 | |
200 | local xs,_,zs = getWorldTranslation(workArea.start) |
201 | local xw,_,zw = getWorldTranslation(workArea.width) |
202 | local xh,_,zh = getWorldTranslation(workArea.height) |
203 | |
204 | local params = spec.workAreaParameters |
205 | |
206 | local stoneFactor, touchedArea, totalArea = FSDensityMapUtil.updateStonePickerArea(xs,zs, xw,zw, xh,zh, params.angle) |
207 | local litersPerSqm = g_currentMission.stoneSystem:getLitersPerSqm() |
208 | local sqm = g_currentMission:getFruitPixelsToSqm() * touchedArea |
209 | local liters = sqm * litersPerSqm * stoneFactor |
210 | |
211 | params.pickedLiters = params.pickedLiters + liters |
212 | params.lastChangedArea = params.lastChangedArea + touchedArea |
213 | params.lastStatsArea = params.lastStatsArea + touchedArea |
214 | params.lastTotalArea = params.lastTotalArea + totalArea |
215 | if touchedArea > 0 then |
216 | params.lastChangedAreaTime = g_time |
217 | params.lastGrowthState = MathUtil.clamp(math.floor(stoneFactor + 0.49), 1, 3) |
218 | end |
219 | |
220 | FSDensityMapUtil.eraseTireTrack(xs,zs, xw,zw, xh,zh) |
221 | |
222 | spec.isWorking = self:getLastSpeed() > 0.5 |
223 | |
224 | return touchedArea, totalArea |
225 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
68 | function StonePicker.registerEventListeners(vehicleType) |
69 | SpecializationUtil.registerEventListener(vehicleType, "onLoad", StonePicker) |
70 | SpecializationUtil.registerEventListener(vehicleType, "onDelete", StonePicker) |
71 | SpecializationUtil.registerEventListener(vehicleType, "onReadStream", StonePicker) |
72 | SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", StonePicker) |
73 | SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", StonePicker) |
74 | SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", StonePicker) |
75 | SpecializationUtil.registerEventListener(vehicleType, "onPostAttach", StonePicker) |
76 | SpecializationUtil.registerEventListener(vehicleType, "onDeactivate", StonePicker) |
77 | SpecializationUtil.registerEventListener(vehicleType, "onStartWorkAreaProcessing", StonePicker) |
78 | SpecializationUtil.registerEventListener(vehicleType, "onEndWorkAreaProcessing", StonePicker) |
79 | SpecializationUtil.registerEventListener(vehicleType, "onFillUnitFillLevelChanged", StonePicker) |
80 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
47 | function StonePicker.registerFunctions(vehicleType) |
48 | SpecializationUtil.registerFunction(vehicleType, "processStonePickerArea", StonePicker.processStonePickerArea) |
49 | SpecializationUtil.registerFunction(vehicleType, "setStonePickerEffectsState", StonePicker.setStonePickerEffectsState) |
50 | end |
registerOverwrittenFunctions
DescriptionDefinitionregisterOverwrittenFunctions()Code
54 | function StonePicker.registerOverwrittenFunctions(vehicleType) |
55 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "doCheckSpeedLimit", StonePicker.doCheckSpeedLimit) |
56 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDoGroundManipulation", StonePicker.getDoGroundManipulation) |
57 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDirtMultiplier", StonePicker.getDirtMultiplier) |
58 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getWearMultiplier", StonePicker.getWearMultiplier) |
59 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", StonePicker.loadWorkAreaFromXML) |
60 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsWorkAreaActive", StonePicker.getIsWorkAreaActive) |
61 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanBeTurnedOn", StonePicker.getCanBeTurnedOn) |
62 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getTurnedOnNotAllowedWarning", StonePicker.getTurnedOnNotAllowedWarning) |
63 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getCanToggleTurnedOn", StonePicker.getCanToggleTurnedOn) |
64 | end |
setStonePickerEffectsState
DescriptionDefinitionsetStonePickerEffectsState()Code
229 | function StonePicker:setStonePickerEffectsState(state, growthState, stateSoil) |
230 | local spec = self.spec_stonePicker |
231 | if state ~= spec.isEffectActive or growthState ~= spec.effectGrowthState or stateSoil ~= spec.isSoilEffectActive then |
232 | spec.isEffectActive = state |
233 | spec.effectGrowthState = growthState |
234 | spec.isSoilEffectActive = stateSoil |
235 | |
236 | if self.isClient then |
237 | if state then |
238 | g_effectManager:setFillType(spec.effects, FillType.STONE, growthState) |
239 | g_effectManager:startEffects(spec.effects) |
240 | |
241 | if not spec.isStoneSamplePlaying then |
242 | g_soundManager:playSample(spec.samples.stone) |
243 | spec.isStoneSamplePlaying = true |
244 | end |
245 | else |
246 | g_effectManager:stopEffects(spec.effects) |
247 | |
248 | if spec.isStoneSamplePlaying then |
249 | g_soundManager:stopSample(spec.samples.stone) |
250 | spec.isStoneSamplePlaying = false |
251 | end |
252 | end |
253 | |
254 | if stateSoil then |
255 | g_effectManager:startEffects(spec.soilEffects) |
256 | |
257 | if not spec.isWorkSamplePlaying then |
258 | g_soundManager:playSample(spec.samples.work) |
259 | spec.isWorkSamplePlaying = true |
260 | end |
261 | else |
262 | g_effectManager:stopEffects(spec.soilEffects) |
263 | |
264 | if spec.isWorkSamplePlaying then |
265 | g_soundManager:stopSample(spec.samples.work) |
266 | spec.isWorkSamplePlaying = false |
267 | end |
268 | end |
269 | end |
270 | end |
271 | end |