LUADOC - Farming Simulator 17

Printable Version

Bga

Description
Class for bga
Functions

onCreate

Description
Creating bga object
Definition
onCreate(integer id)
Arguments
integeridnode id
Code
15function Bga:onCreate(id)
16 local object = Bga:new(g_server ~= nil, g_client ~= nil);
17 if object:load(id) then
18 g_currentMission:addOnCreateLoadedObject(object);
19 g_currentMission:addOnCreateLoadedObjectToSave(object);
20 object:register(true);
21 else
22 object:delete();
23 end;
24end;

new

Description
Creating bga object
Definition
new(boolean isServer, boolean isClient, table customMt)
Arguments
booleanisServeris server
booleanisClientis client
tablecustomMtcustomMt
Return Values
tableinstanceInstance of object
Code
32function Bga:new(isServer, isClient, customMt)
33 local mt = customMt;
34 if mt == nil then
35 mt = Bga_mt;
36 end;
37
38 local self = Object:new(isServer, isClient, mt);
39 self.nodeId = 0;
40 self.tipTriggers = {};
41 self.bunkerFillLevel = 0;
42 self.liquidManureFillLevel = 0
43 self.sentBunkerFillLevel = self.bunkerFillLevel;
44 self.sentLiquidManureFillLevel = self.liquidManureFillLevel;
45
46 self.bunkerUseTime = 0;
47 self.bunkerUseSpeed = 100; -- liter per ingame seconds
48
49 self.bunkerPlaneMinY = 0;
50 self.bunkerPlaneMaxY = 1;
51 self.bunkerPlaneAlpha = 0;
52 self.bunkerPlaneMoveScale = 0.2;
53 self.bunkerPlaneNoScaling = false;
54
55 self.bunkerRolls = {};
56 self.bunkerRollsSpeed = -0.01;
57
58 self.bunkerCapacity = 50000;
59 self.liquidManureCapacity = 1000000
60
61 self.fillDeltaToManureDeltaScale = 0.3;
62 self.liquidManureToDigestateScale = 0.4
63 self.baleValueToFillDeltaScale = 1;
64
65 self.bgaDirtyFlag = self:getNextDirtyFlag();
66 return self;
67end;

delete

Description
Deleting bga object
Definition
delete()
Code
71function Bga:delete()
72 g_currentMission:removeOnCreateLoadedObjectToSave(self);
73 if self.digestateSiloTrigger ~= nil then
74 self.digestateSiloTrigger:delete();
75 end;
76 if self.isServer then
77 for _,trigger in pairs(self.tipTriggers) do
78 if trigger.isRegistered then
79 trigger:unregister();
80 trigger:delete();
81 end;
82 end;
83 end;
84 if self.objectDeleteTriggerId ~= nil then
85 removeTrigger(self.objectDeleteTriggerId);
86 end;
87 if self.nodeId ~= 0 then
88 g_currentMission:removeNodeObject(self.nodeId);
89 end;
90 Bga:superClass().delete(self);
91end;

readStream

Description
Called on client side on join
Definition
readStream(integer streamId, table connection)
Arguments
integerstreamIdstream ID
tableconnectionconnection
Code
97function Bga:readStream(streamId, connection)
98 if connection:getIsServer() then
99 local bunkerFillLevel = streamReadFloat32(streamId);
100 local liquidManureFillLevel = streamReadFloat32(streamId);
101 self:setFillLevel(bunkerFillLevel);
102 self:setFillLevel(liquidManureFillLevel, FillUtil.FILLTYPE_LIQUIDMANURE)
103 if self.digestateSiloTrigger ~= nil then
104 self.digestateSiloTrigger:setFillLevel(streamReadFloat32(streamId));
105 end
106 end;
107end;

writeStream

Description
Called on server side on join
Definition
writeStream(integer streamId, table connection)
Arguments
integerstreamIdstream ID
tableconnectionconnection
Code
113function Bga:writeStream(streamId, connection)
114 if not connection:getIsServer() then
115 streamWriteFloat32(streamId, self.bunkerFillLevel);
116 streamWriteFloat32(streamId, self.liquidManureFillLevel);
117 if self.digestateSiloTrigger ~= nil then
118 streamWriteFloat32(streamId, self.digestateSiloTrigger.fillLevel);
119 end
120 end;
121end;

readUpdateStream

Description
Called on client side on update
Definition
readUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdstream ID
integertimestamptimestamp
tableconnectionconnection
Code
128function Bga:readUpdateStream(streamId, timestamp, connection)
129 if connection:getIsServer() then
130 local bunkerFillLevel = streamReadFloat32(streamId);
131 local liquidManureFillLevel = streamReadFloat32(streamId);
132 self:setFillLevel(bunkerFillLevel);
133 self:setFillLevel(liquidManureFillLevel, FillUtil.FILLTYPE_LIQUIDMANURE)
134 if self.digestateSiloTrigger ~= nil then
135 self.digestateSiloTrigger:setFillLevel(streamReadFloat32(streamId));
136 end
137 end;
138end;

writeUpdateStream

Description
Called on server side on update
Definition
writeUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdstream ID
tableconnectionconnection
integerdirtyMaskdirty mask
Code
145function Bga:writeUpdateStream(streamId, connection, dirtyMask)
146 if not connection:getIsServer() then
147 streamWriteFloat32(streamId, self.bunkerFillLevel);
148 streamWriteFloat32(streamId, self.liquidManureFillLevel);
149 if self.digestateSiloTrigger ~= nil then
150 streamWriteFloat32(streamId, self.digestateSiloTrigger.fillLevel);
151 end
152 end;
153end;

load

Description
Load bga
Definition
load(integer nodeId)
Arguments
integernodeIdnode id
Return Values
booleansuccesssuccess
Code
159function Bga:load(nodeId)
160
161 self.nodeId = nodeId;
162
163 local digestateSiloIndex = getUserAttribute(nodeId, "liquidManureSiloIndex");
164 if digestateSiloIndex ~= nil then
165 local digestateSiloId = Utils.indexToObject(nodeId, digestateSiloIndex);
166 if digestateSiloId ~= nil then
167 self.digestateSiloTrigger = LiquidManureFillTrigger:new();
168 if self.digestateSiloTrigger:load(digestateSiloId, self, FillUtil.FILLTYPE_DIGESTATE) then
169 g_currentMission:addLiquidManureFillTrigger("$l10n_ui_bgaLiquidManureSilo", self.digestateSiloTrigger)
170 else
171 self.digestateSiloTrigger:delete();
172 self.digestateSiloTrigger = nil;
173 end
174 end;
175 end;
176
177 local tipTriggersIndex = getUserAttribute(nodeId, "tipTriggersIndex");
178 if tipTriggersIndex ~= nil then
179 local tipTriggersId = Utils.indexToObject(nodeId, tipTriggersIndex);
180 if tipTriggersId ~= nil then
181 local numChildren = getNumOfChildren(tipTriggersId);
182 for i=1,numChildren do
183 local childId = getChildAt(tipTriggersId, i-1);
184 local tipTrigger = TipTrigger:new(self.isServer, self.isClient);
185 local success = tipTrigger:load(childId, self);
186 if success then
187 tipTrigger.incomeName = "incomeBga";
188 g_currentMission:addOnCreateLoadedObject(tipTrigger);
189 tipTrigger:register(true);
190 tipTrigger:addTipTriggerTarget(self, false);
191 table.insert(self.tipTriggers, tipTrigger);
192 else
193 tipTrigger:delete();
194 end
195 end;
196 end;
197 end;
198
199 if self.isServer then
200 local objectDeleteTriggerIndex = getUserAttribute(nodeId, "objectDeleteTriggerIndex");
201 if objectDeleteTriggerIndex ~= nil then
202 self.objectDeleteTriggerId = Utils.indexToObject(nodeId, objectDeleteTriggerIndex);
203 if self.objectDeleteTriggerId ~= nil then
204 addTrigger(self.objectDeleteTriggerId, "objectDeleteTriggerCallback", self);
205 end;
206 end;
207
208 local silageCatcherIndex = getUserAttribute(nodeId, "silageCatcherIndex");
209 if silageCatcherIndex ~= nil then
210 local silageCatcherId = Utils.indexToObject(nodeId, silageCatcherIndex);
211 if silageCatcherId ~= nil then
212 print("Warning: Bga silageCatcherIndex is no longer supported. Use tipTrigger shovelTargetIndex instead");
213 end
214 end;
215 end;
216
217 local bunkerPlaneIndex = getUserAttribute(nodeId, "bunkerPlaneIndex");
218 if bunkerPlaneIndex ~= nil then
219 self.bunkerPlaneId = Utils.indexToObject(nodeId, bunkerPlaneIndex);
220 end;
221 local minY, maxY = Utils.getVectorFromString(getUserAttribute(nodeId, "bunkerPlaneMinMaxY"));
222 if minY ~= nil and maxY ~= nil then
223 self.bunkerPlaneMinY = minY;
224 self.bunkerPlaneMaxY = maxY;
225 end;
226
227 local bunkerPlaneNoScaling = Utils.getNoNil(getUserAttribute(nodeId, "bunkerPlaneNoScaling"), false);
228 if bunkerPlaneNoScaling then
229 self.bunkerPlaneNoScaling = true;
230 end;
231
232 local bunkerRollsIndex = getUserAttribute(nodeId, "bunkerRollsIndex");
233 if bunkerRollsIndex ~= nil then
234 local bunkerRollsIndices = Utils.splitString(" ", bunkerRollsIndex);
235 for _, index in pairs(bunkerRollsIndices) do
236 local bunkerRollsId = Utils.indexToObject(nodeId, index);
237 if bunkerRollsId ~= nil then
238 local numChildren = getNumOfChildren(bunkerRollsId);
239 for i=1,numChildren do
240 local childId = getChildAt(bunkerRollsId, i-1);
241 table.insert(self.bunkerRolls, childId);
242 end;
243 end;
244 end;
245 end;
246 local bunkerRollsSpeed = getUserAttribute(nodeId, "bunkerRollsSpeed");
247 if bunkerRollsSpeed ~= nil then
248 self.bunkerRollsSpeed = math.rad(bunkerRollsSpeed/1000);
249 end;
250
251 local weightDisplayIndex = getUserAttribute(nodeId, "weightDisplayIndex");
252 if weightDisplayIndex ~= nil then
253 self.displayNumbers = Utils.indexToObject(nodeId, weightDisplayIndex);
254 end;
255
256 local bunkerCapacityStr = getUserAttribute(nodeId, "bunkerCapacity");
257 if bunkerCapacityStr ~= nil then
258 self.bunkerCapacity = Utils.getNoNil(tonumber(bunkerCapacityStr), self.bunkerCapacity);
259 end;
260
261 local liquidManureCapacityStr = getUserAttribute(nodeId, "liquidManureCapacity");
262 if liquidManureCapacityStr ~= nil then
263 self.liquidManureCapacity = Utils.getNoNil(tonumber(liquidManureCapacityStr), self.liquidManureCapacity);
264 end;
265
266 local bunkerUseSpeedStr = getUserAttribute(nodeId, "bunkerUseSpeed");
267 if bunkerUseSpeedStr ~= nil then
268 self.bunkerUseSpeed = Utils.getNoNil(tonumber(bunkerUseSpeedStr), self.bunkerUseSpeed);
269 end;
270
271 local bunkerPlaneMoveScaleStr = getUserAttribute(nodeId, "bunkerPlaneMoveScale");
272 if bunkerPlaneMoveScaleStr ~= nil then
273 self.bunkerPlaneMoveScale = Utils.getNoNil(tonumber(bunkerPlaneMoveScaleStr), self.bunkerPlaneMoveScale);
274 end;
275
276 local fillDeltaToManureDeltaScaleStr = getUserAttribute(nodeId, "fillDeltaToManureDeltaScale");
277 if fillDeltaToManureDeltaScaleStr ~= nil then
278 self.fillDeltaToManureDeltaScale = Utils.getNoNil(tonumber(fillDeltaToManureDeltaScaleStr), self.fillDeltaToManureDeltaScale);
279 end;
280
281 local liquidManureToDigestateScaleStr = getUserAttribute(nodeId, "liquidManureToDigestateScale");
282 if liquidManureToDigestateScaleStr ~= nil then
283 self.liquidManureToDigestateScale = Utils.getNoNil(tonumber(liquidManureToDigestateScaleStr), self.liquidManureToDigestateScale);
284 end;
285
286 local baleValueToFillDeltaScaleStr = getUserAttribute(nodeId, "baleValueToFillDeltaScale");
287 if baleValueToFillDeltaScaleStr ~= nil then
288 self.baleValueToFillDeltaScale = Utils.getNoNil(tonumber(baleValueToFillDeltaScaleStr), self.baleValueToFillDeltaScale);
289 end;
290
291 self.bunkerFillLevel = 0;
292 self.sentBunkerFillLevel = self.bunkerFillLevel;
293 self:setFillLevel(0);
294
295 self.bunkerSoundId = Utils.indexToObject(nodeId, getUserAttribute(nodeId, "bunkerSoundIndex"));
296 self.bunkerSoundPlaying = false;
297 if self.bunkerSoundId ~= nil then
298 setVisibility(self.bunkerSoundId, false);
299 end
300
301 g_currentMission:addNodeObject(nodeId, self);
302
303 self.saveId = Utils.getNoNil(getUserAttribute(nodeId, "saveId"), "Bga");
304
305 return true;
306end;

loadFromAttributesAndNodes

Description
Loading from attributes and nodes
Definition
loadFromAttributesAndNodes(integer xmlFile, string key, boolean resetVehicles)
Arguments
integerxmlFileid of xml object
stringkeykey
booleanresetVehiclesreset vehicles
Return Values
booleansuccesssuccess
Code
314function Bga:loadFromAttributesAndNodes(xmlFile, key)
315
316 local digestateSiloFillLevel = getXMLFloat(xmlFile, key.."#digestateSiloFillLevel");
317 if digestateSiloFillLevel ~= nil then
318 if self.digestateSiloTrigger ~= nil then
319 self.digestateSiloTrigger:setFillLevel(digestateSiloFillLevel, true);
320 end;
321 end;
322 local liquidManureFillLevel = getXMLFloat(xmlFile, key.."#liquidManureFillLevel");
323 if liquidManureFillLevel ~= nil then
324 self:setFillLevel(liquidManureFillLevel, FillUtil.FILLTYPE_LIQUIDMANURE);
325 end;
326 local bunkerFillLevel = getXMLFloat(xmlFile, key.."#bunkerFillLevel");
327 if bunkerFillLevel ~= nil then
328 self:setFillLevel(bunkerFillLevel);
329 end;
330
331 for k, tipTrigger in pairs(self.tipTriggers) do
332 tipTrigger:loadFromAttributesAndNodes(xmlFile, string.format("%s.tipTrigger(%d)", key, k-1))
333 end
334
335 return true;
336end;

getSaveAttributesAndNodes

Description
Get save attributes and nodes
Definition
getSaveAttributesAndNodes(string nodeIdent)
Arguments
stringnodeIdentnode ident
Return Values
stringattributesattributes
stringnodesnodes
Code
343function Bga:getSaveAttributesAndNodes(nodeIdent)
344
345 local digestateSiloFillLevel = 0;
346 if self.digestateSiloTrigger ~= nil then
347 digestateSiloFillLevel = self.digestateSiloTrigger.fillLevel;
348 end;
349 local attributes = 'digestateSiloFillLevel="'..digestateSiloFillLevel..'" bunkerFillLevel="'..self.bunkerFillLevel..'" liquidManureFillLevel="'..self.liquidManureFillLevel..'"';
350 local nodes = "";
351
352 for k, tipTrigger in pairs(self.tipTriggers) do
353 local a,n = tipTrigger:getSaveAttributesAndNodes(nodeIdent.." ")
354
355 if nodes ~= "" then
356 nodes = nodes .. "\n"
357 end
358 nodes = nodes .. nodeIdent .. "<tipTrigger"
359 if a ~= nil and a ~= "" then
360 nodes = nodes .." ".. a
361 end
362 if n ~= nil and n ~= "" then
363 nodes = nodes ..">\n"..n.."\n"..nodeIdent.."</tipTrigger>"
364 else
365 nodes = nodes .. "/>"
366 end
367 end
368
369 return attributes, nodes;
370end;

update

Description
Update
Definition
update(float dt)
Arguments
floatdttime since last call in ms
Code
375function Bga:update(dt)
376
377 if self.isClient then
378 if self.digestateSiloTrigger ~= nil then
379 self.digestateSiloTrigger:update(dt);
380 end
381
382 local planeAlpha = math.min(1, self.bunkerFillLevel / self.bunkerCapacity);
383 local diff = planeAlpha - self.bunkerPlaneAlpha;
384 local movement = math.max(0.01, math.abs(diff));
385 if diff > 0 then
386 self.bunkerPlaneAlpha = math.min( planeAlpha, self.bunkerPlaneAlpha + movement*(dt/1000) );
387 elseif diff < 0 then
388 self.bunkerPlaneAlpha = math.max( planeAlpha, self.bunkerPlaneAlpha - movement*(dt/1000) );
389 end;
390 if self.bunkerPlaneId ~= nil then
391 local x, y, z = getTranslation(self.bunkerPlaneId);
392 setTranslation(self.bunkerPlaneId, x, self.bunkerPlaneMinY + self.bunkerPlaneAlpha * (self.bunkerPlaneMaxY - self.bunkerPlaneMinY), z);
393 if (not self.bunkerPlaneNoScaling) then
394 setScale(self.bunkerPlaneId, 1, math.max(0.01, self.bunkerPlaneAlpha), 1);
395 end;
396 end;
397
398 if self.bunkerPlaneAlpha > 0 then
399 for i=1, table.getn(self.bunkerRolls) do
400 rotate(self.bunkerRolls[i], 0, self.bunkerRollsSpeed*dt,0);
401 end;
402
403 if not self.bunkerSoundPlaying and self.bunkerSoundId ~= nil then
404 setVisibility(self.bunkerSoundId, true);
405 self.bunkerSoundPlaying = true;
406 end;
407 else
408 if self.bunkerSoundPlaying then
409 setVisibility(self.bunkerSoundId, false);
410 self.bunkerSoundPlaying = false;
411 end;
412 end;
413 end;
414end;

updateTick

Description
UpdateTick
Definition
updateTick(float dt)
Arguments
floatdttime since last call in ms
Code
419function Bga:updateTick(dt)
420 if self.isServer then
421 self.bunkerUseTime = self.bunkerUseTime + dt;
422 if self.bunkerUseTime > 1000 then
423
424 if self.bunkerFillLevel > 0 then
425 local oldFillLevel = self.bunkerFillLevel;
426 local bunkerUseSpeed = self.bunkerUseSpeed*g_currentMission.missionInfo.timeScale*0.001;
427 self:setFillLevel(self.bunkerFillLevel - self.bunkerUseTime * bunkerUseSpeed);
428 local delta = oldFillLevel-self.bunkerFillLevel;
429 if delta > 0 and self.digestateSiloTrigger ~= nil then
430 self.digestateSiloTrigger:setFillLevel(self.digestateSiloTrigger.fillLevel + delta*self.fillDeltaToManureDeltaScale);
431 end;
432 end;
433
434 if self.liquidManureFillLevel > 0 then
435 local oldFillLevel = self.liquidManureFillLevel;
436 local bunkerUseSpeed = self.bunkerUseSpeed*g_currentMission.missionInfo.timeScale*0.0005;
437 self:setFillLevel(self.liquidManureFillLevel - self.bunkerUseTime * bunkerUseSpeed, FillUtil.FILLTYPE_LIQUIDMANURE);
438 local delta = oldFillLevel-self.liquidManureFillLevel;
439 if delta > 0 and self.digestateSiloTrigger ~= nil then
440 self.digestateSiloTrigger:setFillLevel(self.digestateSiloTrigger.fillLevel + delta*self.liquidManureToDigestateScale);
441 end;
442 end
443
444 self.bunkerUseTime = 0;
445 end;
446
447 if self.bunkerFillLevel ~= self.sentBunkerFillLevel or self.liquidManureFillLevel ~= self.sentLiquidManureFillLevel then
448 self:raiseDirtyFlags(self.bgaDirtyFlag);
449 self.sentBunkerFillLevel = self.bunkerFillLevel;
450 self.sentLiquidManureFillLevel = self.liquidManureFillLevel;
451 end;
452 end;
453end;

updateDisplayNumbers

Description
Update display numbers
Definition
updateDisplayNumbers(integer fillLevel)
Arguments
integerfillLevelfill level
Code
458function Bga:updateDisplayNumbers(fillLevel)
459 if self.displayNumbers ~= nil then
460 Utils.setNumberShaderByValue(self.displayNumbers, math.floor(fillLevel), 0);
461 end;
462end;

objectDeleteTriggerCallback

Description
objectDeleteTriggerCallback
Definition
objectDeleteTriggerCallback(integer triggerId, integer otherId, boolean onEnter, boolean onLeave, boolean onStay)
Arguments
integertriggerIdid of trigger
integerotherIdid of actor
booleanonEnteron enter
booleanonLeaveon leave
booleanonStayon stay
Code
471function Bga:objectDeleteTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
472 if onEnter then
473 -- this happens, if a compound child of a deleted compound is entering
474 if otherId ~= 0 then
475 local object = g_currentMission:getNodeObject(otherId);
476 if object ~= nil then
477 if object:isa(Bale) then
478 local difficultyMultiplier = g_currentMission.missionInfo.sellPriceMultiplier;
479 local price = object:getValue() * difficultyMultiplier;
480 g_currentMission:addSharedMoney(price, "soldBales");
481 g_currentMission:addMoneyChange(price, FSBaseMission.MONEY_TYPE_SINGLE, true, g_i18n:getText("finance_soldBales"));
482 self:setFillLevel(self.bunkerFillLevel + object:getFillLevel() * self.baleValueToFillDeltaScale);
483
484 object:delete();
485 end;
486 end;
487 end;
488 end;
489end;

liquidManureFillLevelChanged

Description
liquidManureFillLevelChanged
Definition
liquidManureFillLevelChanged(integer fillLevel, integer fillType, table fillTrigger)
Arguments
integerfillLevelfill level
integerfillTypefill type
tablefillTriggerfill trigger
Code
496function Bga:liquidManureFillLevelChanged(fillLevel, fillType, fillTrigger)
497 if self.isServer then
498 self:raiseDirtyFlags(self.bgaDirtyFlag);
499 end
500end;

allowFillType

Description
Checks if fill type is allowed
Definition
allowFillType(integer fillType)
Arguments
integerfillTypefill type
Return Values
booleanallowFillTypeallow fill type
Code
506function Bga:allowFillType(fillType)
507 if fillType == FillUtil.FILLTYPE_LIQUIDMANURE then
508 return self.liquidManureFillLevel < self.liquidManureCapacity
509 else
510 -- this is called by the TipTrigger, so no need to check for accepted fill types
511 return self.bunkerFillLevel < self.bunkerCapacity;
512 end
513end;

setFillLevel

Description
Set fill level
Definition
setFillLevel(integer fillLevel, integer fillType, boolean fillable, table trigger)
Arguments
integerfillLevelfill level
integerfillTypefill type
booleanfillablefillable
tabletriggertrigger
Code
521function Bga:setFillLevel(fillLevel, fillType, fillable, trigger)
522 if fillType == FillUtil.FILLTYPE_LIQUIDMANURE then
523 local oldLiquidManureFillLevel = self.liquidManureFillLevel;
524 self.liquidManureFillLevel = Utils.clamp(fillLevel, 0, self.liquidManureCapacity);
525
526 local delta = self.liquidManureFillLevel-oldLiquidManureFillLevel
527 if delta > 0 and trigger ~= nil then
528 trigger:sellFillType(delta, FillUtil.FILLTYPE_LIQUIDMANURE)
529 end
530 else
531 local oldBunkerFillLevel = self.bunkerFillLevel;
532 self.bunkerFillLevel = Utils.clamp(fillLevel, 0, self.bunkerCapacity);
533
534 if self.bunkerFillLevel > oldBunkerFillLevel then
535 self.bunkerPlaneAlpha = math.min(1, self.bunkerFillLevel / self.bunkerCapacity);
536 end;
537 self:updateDisplayNumbers(self.bunkerFillLevel);
538 local delta = self.bunkerFillLevel-oldBunkerFillLevel
539 if delta > 0 and trigger ~= nil then
540 trigger:sellFillType(delta, fillType)
541 end
542 end
543end;

getFillLevel

Description
Get fill level
Definition
getFillLevel(integer fillType)
Arguments
integerfillTypefill type
Return Values
integerfillLevelfill level
Code
549function Bga:getFillLevel(fillType)
550 if fillType == FillUtil.FILLTYPE_LIQUIDMANURE then
551 return self.liquidManureFillLevel
552 else
553 return self.bunkerFillLevel;
554 end
555end;

getFreeCapacity

Description
Get free capacity
Definition
getFreeCapacity(integer fillType)
Arguments
integerfillTypefill type
Return Values
integerfreeCapacityfree capacity
Code
561function Bga:getFreeCapacity(fillType)
562 if fillType == FillUtil.FILLTYPE_LIQUIDMANURE then
563 return math.max(self.liquidManureCapacity - self.liquidManureFillLevel, 0)
564 else
565 return math.max(self.bunkerCapacity - self.bunkerFillLevel, 0);
566 end
567end;