LUADOC - Farming Simulator 17

Printable Version

Script v1.4.4.0

Engine v7.0.0.2

Foundation Reference

WaterTrailer

Description
Class for water trailers
Functions

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(Fillable, specializations);
18end;

load

Description
Called on loading
Definition
load(table savegame)
Arguments
tablesavegamesavegame
Code
23function 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;
47end;

delete

Description
Called on deleting
Definition
delete()
Code
51function 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;
66end;

readStream

Description
Called on client side on join
Definition
readStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
72function WaterTrailer:readStream(streamId, connection)
73 local isWaterTrailerFilling = streamReadBool(streamId);
74 self:setIsWaterTrailerFilling(isWaterTrailerFilling, true);
75end;

writeStream

Description
Called on server side on join
Definition
writeStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
81function WaterTrailer:writeStream(streamId, connection)
82 streamWriteBool(streamId, self.isWaterTrailerFilling);
83end;

updateTick

Description
Called on update tick
Definition
updateTick(float dt)
Arguments
floatdttime since last call in ms
Code
97function 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;
153end;

draw

Description
Called on draw
Definition
draw()
Code
157function 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;
163end;

onDetach

Description
Called if vehicle gets detached
Definition
onDetach()
Code
167function WaterTrailer:onDetach()
168 if self.waterTrailerActivatableAdded then
169 g_currentMission:removeActivatableObject(self.waterTrailerActivatable);
170 self.waterTrailerActivatableAdded = false;
171 end;
172end;

onLeave

Description
Called on leaving the vehicle
Definition
onLeave()
Code
176function WaterTrailer:onLeave()
177 if self.waterTrailerActivatableAdded then
178 g_currentMission:removeActivatableObject(self.waterTrailerActivatable);
179 self.waterTrailerActivatableAdded = false;
180 end;
181end;

setIsWaterTrailerFilling

Description
Set is water trailer filling state
Definition
setIsWaterTrailerFilling(boolean isFilling, boolean noEventSend)
Arguments
booleanisFillingnew is filling state
booleannoEventSendno event send
Code
187function 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;
197end;

addWaterTrailerFillTrigger

Description
Add trigger to water trailer fill triggers
Definition
addWaterTrailerFillTrigger(table trigger)
Arguments
tabletriggertrigger to add
Code
202function WaterTrailer:addWaterTrailerFillTrigger(trigger)
203 table.insert(self.waterTrailerFillTriggers, trigger);
204end;

removeWaterTrailerFillTrigger

Description
Remove trigger from water trailer fill triggers
Definition
removeWaterTrailerFillTrigger(table trigger)
Arguments
tabletriggertrigger to remove
Code
209function 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;
216end;