LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

WaterTrailer

Description
Specialization for water trailer allowing it to also be filled at any water plane in the world
Functions

getDrawFirstFillText

Description
Definition
getDrawFirstFillText()
Code
166function WaterTrailer:getDrawFirstFillText(superFunc)
167 local spec = self.spec_waterTrailer
168 if self.isClient then
169 if self:getIsActiveForInput() and self:getIsSelected() then
170 if self:getFillUnitFillLevel(spec.fillUnitIndex) <= 0 and self:getFillUnitCapacity(spec.fillUnitIndex) ~= 0 then
171 return true
172 end
173 end
174 end
175
176 return superFunc(self)
177end

initSpecialization

Description
Definition
initSpecialization()
Code
22function WaterTrailer.initSpecialization()
23 local schema = Vehicle.xmlSchema
24 schema:setXMLSpecializationType("WaterTrailer")
25
26 schema:register(XMLValueType.INT, "vehicle.waterTrailer#fillUnitIndex", "Fill unit index")
27 schema:register(XMLValueType.FLOAT, "vehicle.waterTrailer#fillLitersPerSecond", "Fill liters per second", 500)
28 schema:register(XMLValueType.NODE_INDEX, "vehicle.waterTrailer#fillNode", "Fill node", "Root component")
29
30 SoundManager.registerSampleXMLPaths(schema, "vehicle.waterTrailer.sounds", "refill")
31
32 schema:setXMLSpecializationType()
33end

onDelete

Description
Called on deleting
Definition
onDelete()
Code
82function WaterTrailer:onDelete()
83 local spec = self.spec_waterTrailer
84 g_currentMission.activatableObjectsSystem:removeActivatable(spec.activatable)
85
86 g_soundManager:deleteSamples(spec.samples)
87end

onLoad

Description
Called on loading
Definition
onLoad(table savegame)
Arguments
tablesavegamesavegame
Code
61function WaterTrailer:onLoad(savegame)
62 local spec = self.spec_waterTrailer
63
64 local fillUnitIndex = self.xmlFile:getValue("vehicle.waterTrailer#fillUnitIndex")
65 if fillUnitIndex ~= nil then
66 spec.fillUnitIndex = fillUnitIndex
67 spec.fillLitersPerSecond = self.xmlFile:getValue("vehicle.waterTrailer#fillLitersPerSecond", 500)
68 spec.waterFillNode = self.xmlFile:getValue("vehicle.waterTrailer#fillNode", self.components[1].node, self.components, self.i3dMappings)
69 end
70
71 spec.isFilling = false
72 spec.activatable = WaterTrailerActivatable.new(self)
73
74 if self.isClient then
75 spec.samples = {}
76 spec.samples.refill = g_soundManager:loadSampleFromXML(self.xmlFile, "vehicle.waterTrailer.sounds", "refill", self.baseDirectory, self.components, 0, AudioGroup.VEHICLE, self.i3dMappings, self)
77 end
78end

onPreDetach

Description
Called if vehicle gets detached
Definition
onPreDetach(table attacherVehicle, table implement)
Arguments
tableattacherVehicleattacher vehicle
tableimplementimplement
Code
183function WaterTrailer:onPreDetach(attacherVehicle, implement)
184 local spec = self.spec_waterTrailer
185 g_currentMission.activatableObjectsSystem:removeActivatable(spec.activatable)
186end

onReadStream

Description
Called on client side on join
Definition
onReadStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
93function WaterTrailer:onReadStream(streamId, connection)
94 local isFilling = streamReadBool(streamId)
95 self:setIsWaterTrailerFilling(isFilling, true)
96end

onUpdateTick

Description
Called on update tick
Definition
onUpdateTick(float dt, boolean isActiveForInput, boolean isSelected)
Arguments
floatdttime since last call in ms
booleanisActiveForInputtrue if vehicle is active for input
booleanisSelectedtrue if vehicle is selected
Code
112function WaterTrailer:onUpdateTick(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
113 local spec = self.spec_waterTrailer
114
115 local _, y, _ = getWorldTranslation(spec.waterFillNode)
116 local isNearWater = (y <= self.waterY + 0.2)
117
118 if isNearWater then
119 g_currentMission.activatableObjectsSystem:addActivatable(spec.activatable)
120 else
121 g_currentMission.activatableObjectsSystem:removeActivatable(spec.activatable)
122 end
123
124 if self.isServer then
125 if spec.isFilling then
126 -- stop filling if not near the water anymore
127 if not isNearWater then
128 self:setIsWaterTrailerFilling(false)
129 end
130 end
131
132 if spec.isFilling then
133 if self:getFillUnitAllowsFillType(spec.fillUnitIndex, FillType.WATER) then
134 local delta = self:addFillUnitFillLevel(self:getOwnerFarmId(), spec.fillUnitIndex, spec.fillLitersPerSecond*dt*0.001, FillType.WATER, ToolType.TRIGGER, nil)
135 if delta <= 0 then
136 self:setIsWaterTrailerFilling(false)
137 end
138 end
139 end
140 end
141end

onWriteStream

Description
Called on server side on join
Definition
onWriteStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
102function WaterTrailer:onWriteStream(streamId, connection)
103 local spec = self.spec_waterTrailer
104 streamWriteBool(streamId, spec.isFilling)
105end

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
16function WaterTrailer.prerequisitesPresent(specializations)
17 return SpecializationUtil.hasSpecialization(FillUnit, specializations)
18end

registerEventListeners

Description
Definition
registerEventListeners()
Code
49function WaterTrailer.registerEventListeners(vehicleType)
50 SpecializationUtil.registerEventListener(vehicleType, "onLoad", WaterTrailer)
51 SpecializationUtil.registerEventListener(vehicleType, "onDelete", WaterTrailer)
52 SpecializationUtil.registerEventListener(vehicleType, "onReadStream", WaterTrailer)
53 SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", WaterTrailer)
54 SpecializationUtil.registerEventListener(vehicleType, "onUpdateTick", WaterTrailer)
55 SpecializationUtil.registerEventListener(vehicleType, "onPreDetach", WaterTrailer)
56end

registerFunctions

Description
Definition
registerFunctions()
Code
37function WaterTrailer.registerFunctions(vehicleType)
38 SpecializationUtil.registerFunction(vehicleType, "setIsWaterTrailerFilling", WaterTrailer.setIsWaterTrailerFilling)
39end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
43function WaterTrailer.registerOverwrittenFunctions(vehicleType)
44 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDrawFirstFillText", WaterTrailer.getDrawFirstFillText)
45end

setIsWaterTrailerFilling

Description
Set is water trailer filling state
Definition
setIsWaterTrailerFilling(boolean isFilling, boolean noEventSend)
Arguments
booleanisFillingnew is filling state
booleannoEventSendno event send
Code
147function WaterTrailer:setIsWaterTrailerFilling(isFilling, noEventSend)
148 local spec = self.spec_waterTrailer
149 if isFilling ~= spec.isFilling then
150 WaterTrailerSetIsFillingEvent.sendEvent(self, isFilling, noEventSend)
151
152 spec.isFilling = isFilling
153
154 if self.isClient then
155 if isFilling then
156 g_soundManager:playSample(spec.samples.refill)
157 else
158 g_soundManager:stopSample(spec.samples.refill)
159 end
160 end
161 end
162end