Script v1.4.4.0
- Handtools
- Events
- Objects
- Placeables
- Triggers
- Utils
- Vehicles
- Specializations
- AIVehicle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BuiltInCutterTrailer
- BunkerSiloCompacter
- Combine
- ConveyorBelt
- Cover
- CrabSteering
- Crawler
- Cultivator
- Cutter
- Cylindered
- Drivable
- DynamicMountAttacher
- Fillable
- FillActivatable
- FillVolume
- Foldable
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- FuelTrailer
- Honk
- HookLiftContainer
- HookLiftTrailer
- Leveler
- Lights
- LivestockTrailer
- ManureBarrel
- ManureSpreader
- MixerWagon
- Motorized
- Mountable
- Mower
- NonTabbable
- Overloading
- Pickup
- Pipe
- Plough
- PowerConsumer
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- RidgeMarker
- Roller
- Ropes
- RotorSpreader
- SemiTrailerFront
- Shovel
- SowingMachine
- SpeedRotatingParts
- Sprayer
- Steerable
- StrawBlower
- StumpCutter
- Tedder
- TensionBelts
- Trailer
- TreePlanter
- TreePlanterActivatable
- TreeSaw
- TurnOnVehicle
- Washable
- WaterTrailer
- Weeder
- WheelRotations
- Windrower
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkParticles
Engine v7.0.0.2
- General
- Entity
- Node
- Scenegraph
- Lighting
- Camera
- Shape
- Particle System
- Physics
- Spline
- Animation
- Overlays
- Sound
- Input
- XML
- Network
- Callbacks
- Text Rendering
- Terrain Detail
- Tire Track
- Editor
- Rendering
- String
- Math
- I3D
- Fillplanes
Foundation Reference
WaterTrailer
DescriptionClass for water trailersFunctions
- prerequisitesPresent
- load
- delete
- readStream
- writeStream
- updateTick
- draw
- onDetach
- onLeave
- setIsWaterTrailerFilling
- addWaterTrailerFillTrigger
- removeWaterTrailerFillTrigger
prerequisitesPresent
DescriptionChecks if all prerequisite specializations are loadedDefinition
prerequisitesPresent(table specializations)Arguments
table | specializations | specializations |
boolean | hasPrerequisite | true if all prerequisite specializations are loaded |
16 | function WaterTrailer.prerequisitesPresent(specializations) |
17 | return SpecializationUtil.hasSpecialization(Fillable, specializations); |
18 | end; |
load
DescriptionCalled on loadingDefinition
load(table savegame)Arguments
table | savegame | savegame |
23 | function WaterTrailer:load(savegame) |
24 | |
25 | self.setIsWaterTrailerFilling = SpecializationUtil.callSpecializationsFunction("setIsWaterTrailerFilling"); |
26 | self.removeWaterTrailerFillTrigger = SpecializationUtil.callSpecializationsFunction("removeWaterTrailerFillTrigger"); |
27 | self.addWaterTrailerFillTrigger = SpecializationUtil.callSpecializationsFunction("addWaterTrailerFillTrigger"); |
28 | |
29 | self.isWaterTrailerFilling = false; |
30 | self.waterTrailerActivatableAdded = false; |
31 | self.waterTrailerActivatable = WaterTrailerActivatable:new(self); |
32 | |
33 | self.waterTrailerFillTriggers = {}; |
34 | self.waterTrailerFillUnitIndex = 1 |
35 | |
36 | self.fillLitersPerSecond = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.fillLitersPerSecond"), 500); |
37 | |
38 | local waterTrailerFillTriggerNode = Utils.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.waterTrailerFillTrigger#index")); |
39 | |
40 | if waterTrailerFillTriggerNode ~= nil then |
41 | self.waterTrailerFillTrigger = WaterTrailerFillTrigger:new(waterTrailerFillTriggerNode, self); |
42 | end; |
43 | |
44 | if self.isClient then |
45 | self.sampleRefuel = SoundUtil.loadSample(self.xmlFile, {}, "vehicle.refuelSound", "$data/maps/sounds/refuel.wav", self.baseDirectory, self.components[1].node); |
46 | end; |
47 | end; |
delete
DescriptionCalled on deletingDefinition
delete()Code
51 | function WaterTrailer:delete() |
52 | for _, trigger in pairs(self.waterTrailerFillTriggers) do |
53 | trigger:onVehicleDeleted(self); |
54 | end |
55 | if self.waterTrailerActivatableAdded then |
56 | g_currentMission:removeActivatableObject(self.waterTrailerActivatable); |
57 | self.waterTrailerActivatableAdded = false; |
58 | end; |
59 | if self.waterTrailerFillTrigger ~= nil then |
60 | self.waterTrailerFillTrigger:delete(); |
61 | self.waterTrailerFillTrigger = nil; |
62 | end; |
63 | if self.isClient then |
64 | SoundUtil.deleteSample(self.sampleRefuel); |
65 | end; |
66 | end; |
readStream
DescriptionCalled on client side on joinDefinition
readStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
72 | function WaterTrailer:readStream(streamId, connection) |
73 | local isWaterTrailerFilling = streamReadBool(streamId); |
74 | self:setIsWaterTrailerFilling(isWaterTrailerFilling, true); |
75 | end; |
writeStream
DescriptionCalled on server side on joinDefinition
writeStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
81 | function WaterTrailer:writeStream(streamId, connection) |
82 | streamWriteBool(streamId, self.isWaterTrailerFilling); |
83 | end; |
updateTick
DescriptionCalled on update tickDefinition
updateTick(float dt)Arguments
float | dt | time since last call in ms |
97 | function WaterTrailer:updateTick(dt) |
98 | if self:getIsActive() or self.isWaterTrailerFilling then |
99 | local _,y,_ = getWorldTranslation(self.components[1].node); |
100 | local isNearWater = (y <= g_currentMission.waterY + 0.2); |
101 | local waterTrailerFillTrigger = nil; |
102 | if not isNearWater then |
103 | -- find the first trigger which is activable |
104 | for i=1, table.getn(self.waterTrailerFillTriggers) do |
105 | local trigger = self.waterTrailerFillTriggers[i]; |
106 | if trigger:getIsActivatable(self) then |
107 | isNearWater = true; |
108 | waterTrailerFillTrigger = trigger; |
109 | break; |
110 | end |
111 | end |
112 | end |
113 | if isNearWater then |
114 | if not self.waterTrailerActivatableAdded then |
115 | g_currentMission:addActivatableObject(self.waterTrailerActivatable); |
116 | self.waterTrailerActivatableAdded = true; |
117 | end; |
118 | else |
119 | if self.waterTrailerActivatableAdded then |
120 | g_currentMission:removeActivatableObject(self.waterTrailerActivatable); |
121 | self.waterTrailerActivatableAdded = false; |
122 | end; |
123 | end; |
124 | |
125 | if self.isServer then |
126 | -- stop filling if not near the water anymore |
127 | if self.isWaterTrailerFilling then |
128 | if not isNearWater then |
129 | self:setIsWaterTrailerFilling(false); |
130 | end |
131 | end |
132 | |
133 | if self.isWaterTrailerFilling then |
134 | local delta = self.fillLitersPerSecond*dt*0.001; |
135 | |
136 | if waterTrailerFillTrigger ~= nil then |
137 | delta = waterTrailerFillTrigger:fillWater(self, delta); |
138 | else |
139 | if self:allowFillType(FillUtil.FILLTYPE_WATER, false) then |
140 | local oldFillLevel = self:getFillLevel(FillUtil.FILLTYPE_WATER); |
141 | self:setFillLevel(oldFillLevel + delta, FillUtil.FILLTYPE_WATER, true); |
142 | delta = self:getFillLevel(FillUtil.FILLTYPE_WATER) - oldFillLevel; |
143 | else |
144 | delta = 0; |
145 | end |
146 | end |
147 | if delta <= 0 then |
148 | self:setIsWaterTrailerFilling(false); |
149 | end; |
150 | end; |
151 | end; |
152 | end; |
153 | end; |
draw
DescriptionCalled on drawDefinition
draw()Code
157 | function WaterTrailer:draw() |
158 | if self.isClient then |
159 | if self:getUnitFillLevel(self.waterTrailerFillUnitIndex) <= 0 and self:getUnitCapacity(self.waterTrailerFillUnitIndex) ~= 0 then |
160 | g_currentMission:addExtraPrintText(g_i18n:getText("info_firstFillTheTool")); |
161 | end; |
162 | end; |
163 | end; |
onDetach
DescriptionCalled if vehicle gets detachedDefinition
onDetach()Code
167 | function WaterTrailer:onDetach() |
168 | if self.waterTrailerActivatableAdded then |
169 | g_currentMission:removeActivatableObject(self.waterTrailerActivatable); |
170 | self.waterTrailerActivatableAdded = false; |
171 | end; |
172 | end; |
onLeave
DescriptionCalled on leaving the vehicleDefinition
onLeave()Code
176 | function WaterTrailer:onLeave() |
177 | if self.waterTrailerActivatableAdded then |
178 | g_currentMission:removeActivatableObject(self.waterTrailerActivatable); |
179 | self.waterTrailerActivatableAdded = false; |
180 | end; |
181 | end; |
setIsWaterTrailerFilling
DescriptionSet is water trailer filling stateDefinition
setIsWaterTrailerFilling(boolean isFilling, boolean noEventSend)Arguments
boolean | isFilling | new is filling state |
boolean | noEventSend | no event send |
187 | function WaterTrailer:setIsWaterTrailerFilling(isFilling, noEventSend) |
188 | WaterTrailerSetIsFillingEvent.sendEvent(self, isFilling, noEventSend) |
189 | self.isWaterTrailerFilling = isFilling; |
190 | if self.isClient and self.sampleRefuel ~= nil then |
191 | if isFilling then |
192 | SoundUtil.play3DSample(self.sampleRefuel); |
193 | else |
194 | SoundUtil.stop3DSample(self.sampleRefuel); |
195 | end; |
196 | end; |
197 | end; |
addWaterTrailerFillTrigger
DescriptionAdd trigger to water trailer fill triggersDefinition
addWaterTrailerFillTrigger(table trigger)Arguments
table | trigger | trigger to add |
202 | function WaterTrailer:addWaterTrailerFillTrigger(trigger) |
203 | table.insert(self.waterTrailerFillTriggers, trigger); |
204 | end; |
removeWaterTrailerFillTrigger
DescriptionRemove trigger from water trailer fill triggersDefinition
removeWaterTrailerFillTrigger(table trigger)Arguments
table | trigger | trigger to remove |
209 | function WaterTrailer:removeWaterTrailerFillTrigger(trigger) |
210 | for i=1, table.getn(self.waterTrailerFillTriggers) do |
211 | if self.waterTrailerFillTriggers[i] == trigger then |
212 | table.remove(self.waterTrailerFillTriggers, i); |
213 | break; |
214 | end; |
215 | end; |
216 | end; |