Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- AIConveyorBelt
- AIImplement
- AIVehicle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BaseMaterial
- BunkerSiloCompacter
- BunkerSiloInteractor
- BuyableBale
- CCTDrivable
- Combine
- ConnectionHoses
- ConveyorBelt
- Cover
- CrabSteering
- Crawlers
- Cultivator
- Cutter
- Cylindered
- CylinderedFoldable
- Dashboard
- Dischargeable
- Drivable
- DynamicallyLoadedParts
- DynamicMountAttacher
- Enterable
- FertilizingCultivator
- FertilizingSowingMachine
- FillTriggerVehicle
- FillUnit
- FillVolume
- Foldable
- FoliageBending
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- GroundAdjustedNodes
- GroundReference
- Honk
- HookLiftContainer
- HookLiftTrailer
- IKChains
- JigglingParts
- Leveler
- Lights
- LivestockTrailer
- Locomotive
- LogGrab
- ManureBarrel
- MixerWagon
- Motorized
- Mountable
- Mower
- Pickup
- Pipe
- Plow
- PowerConsumer
- PowerTakeOffs
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- Rideable
- RidgeMarker
- Roller
- Ropes
- SemiTrailerFront
- Shovel
- SlopeCompensation
- SmartAttach
- SowingMachine
- SpeedRotatingParts
- SplineVehicle
- Sprayer
- StrawBlower
- StumpCutter
- Suspensions
- Tedder
- TensionBeltObject
- TensionBelts
- TipOccluder
- Trailer
- TreePlanter
- TreeSaw
- TurnOnVehicle
- Washable
- WaterTrailer
- Wearable
- Weeder
- Wheels
- Windrower
- Wipers
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkMode
- WorkParticles
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
FruitPreparer
DescriptionSpecialization for tools preparing the fruits for harvesting e.g. potato haulm toppers and sugar beet defoliatorsFunctions
- doCheckSpeedLimit
- getAllowCutterAIFruitRequirements
- getDefaultSpeedLimit
- getDirtMultiplier
- getDoGroundManipulation
- getWearMultiplier
- initSpecialization
- loadWorkAreaFromXML
- onDelete
- onLoad
- onReadUpdateStream
- onStartWorkAreaProcessing
- onTurnedOff
- onTurnedOn
- onWriteUpdateStream
- prerequisitesPresent
- processFruitPreparerArea
- registerEventListeners
- registerFunctions
- registerOverwrittenFunctions
doCheckSpeedLimit
DescriptionReturns if speed limit should be checkedDefinition
doCheckSpeedLimit()Return Values
boolean | checkSpeedlimit | check speed limit |
189 | function FruitPreparer:doCheckSpeedLimit(superFunc) |
190 | return superFunc(self) or (self:getIsTurnedOn() and (self.getIsImplementChainLowered == nil or self:getIsImplementChainLowered())) |
191 | end |
getAllowCutterAIFruitRequirements
DescriptionDefinitiongetAllowCutterAIFruitRequirements()Code
195 | function FruitPreparer:getAllowCutterAIFruitRequirements(superFunc) |
196 | return false |
197 | end |
getDefaultSpeedLimit
DescriptionReturns default speed limitDefinition
getDefaultSpeedLimit()Return Values
float | speedLimit | speed limit |
226 | function FruitPreparer.getDefaultSpeedLimit() |
227 | return 15 |
228 | end |
getDirtMultiplier
DescriptionDefinitiongetDirtMultiplier()Code
201 | function FruitPreparer:getDirtMultiplier(superFunc) |
202 | local spec = self.spec_fruitPreparer |
203 | |
204 | if spec.isWorking then |
205 | return superFunc(self) + self:getWorkDirtMultiplier() * self:getLastSpeed() / self.speedLimit |
206 | end |
207 | |
208 | return superFunc(self) |
209 | end |
getDoGroundManipulation
DescriptionReturns if tool does ground manipulationDefinition
getDoGroundManipulation()Return Values
boolean | doGroundManipulation | do ground manipulation |
181 | function FruitPreparer:getDoGroundManipulation(superFunc) |
182 | local spec = self.spec_fruitPreparer |
183 | return superFunc(self) and spec.isWorking |
184 | end |
getWearMultiplier
DescriptionDefinitiongetWearMultiplier()Code
213 | function FruitPreparer:getWearMultiplier(superFunc) |
214 | local spec = self.spec_fruitPreparer |
215 | |
216 | if spec.isWorking then |
217 | return superFunc(self) + self:getWorkWearMultiplier() * self:getLastSpeed() / self.speedLimit |
218 | end |
219 | |
220 | return superFunc(self) |
221 | end |
initSpecialization
DescriptionCalled on specialization initializingDefinition
initSpecialization()Code
15 | function FruitPreparer.initSpecialization() |
16 | g_workAreaTypeManager:addWorkAreaType("fruitPreparer", false) |
17 | 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 |
164 | function FruitPreparer:loadWorkAreaFromXML(superFunc, workArea, xmlFile, key) |
165 | local retValue = superFunc(self, workArea, xmlFile, key) |
166 | |
167 | if workArea.type == WorkAreaType.FRUITPREPARER then |
168 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key.."#dropStartIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19 |
169 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key.."#dropWidthIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19 |
170 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key.."#dropHeightIndex", key..".fruitPreparer#dropWorkAreaIndex") -- FS17 to FS19 |
171 | |
172 | workArea.dropWorkAreaIndex = getXMLInt(xmlFile, key..".fruitPreparer#dropWorkAreaIndex") |
173 | end |
174 | |
175 | return retValue |
176 | end |
onDelete
DescriptionCalled on deletingDefinition
onDelete()Code
104 | function FruitPreparer:onDelete() |
105 | if self.isClient then |
106 | local spec = self.spec_fruitPreparer |
107 | g_soundManager:deleteSamples(spec.samples) |
108 | g_animationManager:deleteAnimations(spec.animationNodes) |
109 | end |
110 | end |
onLoad
DescriptionCalled on loadingDefinition
onLoad(table savegame)Arguments
table | savegame | savegame |
59 | function FruitPreparer:onLoad(savegame) |
60 | local spec = self.spec_fruitPreparer |
61 | |
62 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.turnOnAnimation#name", "vehicle.turnOnVehicle.turnedAnimation#name") -- FS15 to FS17 |
63 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.turnOnAnimation#speed", "vehicle.turnOnVehicle.turnedAnimation#turnOnSpeedScale") -- FS15 to FS17 |
64 | |
65 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.fruitPreparer#useReelStateToTurnOn") -- FS17 to FS19 |
66 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.fruitPreparer#onlyActiveWhenLowered") -- FS17 to FS19 |
67 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.vehicle.fruitPreparerSound", "vehicle.fruitPreparer.sounds.work") -- FS17 to FS19 |
68 | XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.turnedOnRotationNodes.turnedOnRotationNode", "vehicle.fruitPreparer.animationNodes.animationNode", "fruitPreparer") -- FS17 to FS19 |
69 | |
70 | if self.isClient then |
71 | spec.samples = {} |
72 | spec.samples.work = g_soundManager:loadSampleFromXML(self.xmlFile, "vehicle.fruitPreparer.sounds", "work", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self) |
73 | |
74 | spec.animationNodes = g_animationManager:loadAnimations(self.xmlFile, "vehicle.fruitPreparer.animationNodes", self.components, self, self.i3dMappings) |
75 | end |
76 | |
77 | spec.fruitType = FruitType.UNKNOWN |
78 | local fruitType = getXMLString(self.xmlFile, "vehicle.fruitPreparer#fruitType") |
79 | if fruitType ~= nil then |
80 | local desc = g_fruitTypeManager:getFruitTypeByName(fruitType) |
81 | if desc ~= nil then |
82 | spec.fruitType = desc.index |
83 | |
84 | if self.setAIFruitRequirements ~= nil then |
85 | self:setAIFruitRequirements(desc.index, desc.minPreparingGrowthState, desc.maxPreparingGrowthState) |
86 | |
87 | local aiUsePreparedState = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.fruitPreparer#aiUsePreparedState"), self.spec_cutter ~= nil) |
88 | if aiUsePreparedState then |
89 | self:addAIFruitRequirement(desc.index, desc.preparedGrowthState, desc.preparedGrowthState) |
90 | end |
91 | end |
92 | else |
93 | g_logManager:xmlWarning(self.configFileName, "Unable to find fruitType '%s' in fruitPreparer", fruitType) |
94 | end |
95 | else |
96 | g_logManager:xmlWarning(self.configFileName, "Missing fruitType in fruitPreparer") |
97 | end |
98 | |
99 | spec.isWorking = false |
100 | end |
onReadUpdateStream
DescriptionCalled on on updateDefinition
onReadUpdateStream(integer streamId, integer timestamp, table connection)Arguments
integer | streamId | stream ID |
integer | timestamp | timestamp |
table | connection | connection |
117 | function FruitPreparer:onReadUpdateStream(streamId, timestamp, connection) |
118 | if connection:getIsServer() then |
119 | local spec = self.spec_fruitPreparer |
120 | spec.isWorking = streamReadBool(streamId) |
121 | end |
122 | end |
onStartWorkAreaProcessing
DescriptionDefinitiononStartWorkAreaProcessing()Code
232 | function FruitPreparer:onStartWorkAreaProcessing(dt) |
233 | local spec = self.spec_fruitPreparer |
234 | spec.isWorking = false |
235 | end |
onTurnedOff
DescriptionCalled on turn offDefinition
onTurnedOff(boolean noEventSend)Arguments
boolean | noEventSend | no event send |
150 | function FruitPreparer:onTurnedOff() |
151 | if self.isClient then |
152 | local spec = self.spec_fruitPreparer |
153 | g_soundManager:stopSamples(spec.samples) |
154 | g_animationManager:stopAnimations(spec.animationNodes) |
155 | end |
156 | end |
onTurnedOn
DescriptionCalled on turn onDefinition
onTurnedOn(boolean noEventSend)Arguments
boolean | noEventSend | no event send |
139 | function FruitPreparer:onTurnedOn() |
140 | if self.isClient then |
141 | local spec = self.spec_fruitPreparer |
142 | g_soundManager:playSample(spec.samples.work) |
143 | g_animationManager:startAnimations(spec.animationNodes) |
144 | end |
145 | end |
onWriteUpdateStream
DescriptionCalled on on updateDefinition
onWriteUpdateStream(integer streamId, table connection, integer dirtyMask)Arguments
integer | streamId | stream ID |
table | connection | connection |
integer | dirtyMask | dirty mask |
129 | function FruitPreparer:onWriteUpdateStream(streamId, connection, dirtyMask) |
130 | if not connection:getIsServer() then |
131 | local spec = self.spec_fruitPreparer |
132 | streamWriteBool(streamId, spec.isWorking) |
133 | end |
134 | 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 |
23 | function FruitPreparer.prerequisitesPresent(specializations) |
24 | return SpecializationUtil.hasSpecialization(WorkArea, specializations) and SpecializationUtil.hasSpecialization(TurnOnVehicle, specializations) |
25 | end |
processFruitPreparerArea
DescriptionDefinitionprocessFruitPreparerArea()Code
239 | function FruitPreparer:processFruitPreparerArea(workArea) |
240 | local spec = self.spec_fruitPreparer |
241 | local workAreaSpec = self.spec_workArea |
242 | |
243 | local xs,_,zs = getWorldTranslation(workArea.start) |
244 | local xw,_,zw = getWorldTranslation(workArea.width) |
245 | local xh,_,zh = getWorldTranslation(workArea.height) |
246 | |
247 | local dxs, dzs = xs, zs |
248 | local dxw, dzw = xw, zw |
249 | local dxh, dzh = xh, zh |
250 | |
251 | if workArea.dropWorkAreaIndex ~= nil then |
252 | local dropArea = workAreaSpec.workAreas[workArea.dropWorkAreaIndex] |
253 | if dropArea ~= nil then |
254 | dxs, _, dzs = getWorldTranslation(dropArea.start) |
255 | dxw, _, dzw = getWorldTranslation(dropArea.width) |
256 | dxh, _, dzh = getWorldTranslation(dropArea.height) |
257 | end |
258 | end |
259 | |
260 | local area = FSDensityMapUtil.updateFruitPreparerArea(spec.fruitType, xs,zs, xw,zw, xh,zh, dxs,dzs, dxw,dzw, dxh,dzh) |
261 | if area > 0 then |
262 | spec.isWorking = true |
263 | end |
264 | |
265 | return 0, area |
266 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
46 | function FruitPreparer.registerEventListeners(vehicleType) |
47 | SpecializationUtil.registerEventListener(vehicleType, "onLoad", FruitPreparer) |
48 | SpecializationUtil.registerEventListener(vehicleType, "onDelete", FruitPreparer) |
49 | SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", FruitPreparer) |
50 | SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", FruitPreparer) |
51 | SpecializationUtil.registerEventListener(vehicleType, "onTurnedOn", FruitPreparer) |
52 | SpecializationUtil.registerEventListener(vehicleType, "onTurnedOff", FruitPreparer) |
53 | SpecializationUtil.registerEventListener(vehicleType, "onStartWorkAreaProcessing", FruitPreparer) |
54 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
29 | function FruitPreparer.registerFunctions(vehicleType) |
30 | SpecializationUtil.registerFunction(vehicleType, "processFruitPreparerArea", FruitPreparer.processFruitPreparerArea) |
31 | end |
registerOverwrittenFunctions
DescriptionDefinitionregisterOverwrittenFunctions()Code
35 | function FruitPreparer.registerOverwrittenFunctions(vehicleType) |
36 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadWorkAreaFromXML", FruitPreparer.loadWorkAreaFromXML) |
37 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDoGroundManipulation", FruitPreparer.getDoGroundManipulation) |
38 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "doCheckSpeedLimit", FruitPreparer.doCheckSpeedLimit) |
39 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getAllowCutterAIFruitRequirements", FruitPreparer.getAllowCutterAIFruitRequirements) |
40 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDirtMultiplier", FruitPreparer.getDirtMultiplier) |
41 | SpecializationUtil.registerOverwrittenFunction(vehicleType, "getWearMultiplier", FruitPreparer.getWearMultiplier) |
42 | end |