Script v1.4.4.0
- Handtools
- Events
- Objects
- AnimatedObject
- Bale
- Basketball
- Bga
- BunkerSilo
- FieldDefinition
- FillablePallet
- HelpIcons
- MountableObject
- Nightlight2
- NightlightFlicker
- PhysicsObject
- Rotator
- SaplingPallet
- ShovelTarget
- SimParticleSystem
- StationCrane
- Storage
- TourIcons
- Train
- VehicleSellingPoint
- Placeables
- Triggers
- Utils
- Vehicles
- Specializations
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
Bga
DescriptionClass for bgaFunctions
- onCreate
- new
- delete
- readStream
- writeStream
- readUpdateStream
- writeUpdateStream
- load
- loadFromAttributesAndNodes
- getSaveAttributesAndNodes
- update
- updateTick
- updateDisplayNumbers
- objectDeleteTriggerCallback
- liquidManureFillLevelChanged
- allowFillType
- setFillLevel
- getFillLevel
- getFreeCapacity
onCreate
DescriptionCreating bga objectDefinition
onCreate(integer id)Arguments
integer | id | node id |
15 | function 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; |
24 | end; |
new
DescriptionCreating bga objectDefinition
new(boolean isServer, boolean isClient, table customMt)Arguments
boolean | isServer | is server |
boolean | isClient | is client |
table | customMt | customMt |
table | instance | Instance of object |
32 | function 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; |
67 | end; |
delete
DescriptionDeleting bga objectDefinition
delete()Code
71 | function 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); |
91 | end; |
readStream
DescriptionCalled on client side on joinDefinition
readStream(integer streamId, table connection)Arguments
integer | streamId | stream ID |
table | connection | connection |
97 | function 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; |
107 | end; |
writeStream
DescriptionCalled on server side on joinDefinition
writeStream(integer streamId, table connection)Arguments
integer | streamId | stream ID |
table | connection | connection |
113 | function 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; |
121 | end; |
readUpdateStream
DescriptionCalled on client side on updateDefinition
readUpdateStream(integer streamId, integer timestamp, table connection)Arguments
integer | streamId | stream ID |
integer | timestamp | timestamp |
table | connection | connection |
128 | function 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; |
138 | end; |
writeUpdateStream
DescriptionCalled on server side on updateDefinition
writeUpdateStream(integer streamId, table connection, integer dirtyMask)Arguments
integer | streamId | stream ID |
table | connection | connection |
integer | dirtyMask | dirty mask |
145 | function 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; |
153 | end; |
load
DescriptionLoad bgaDefinition
load(integer nodeId)Arguments
integer | nodeId | node id |
boolean | success | success |
159 | function 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; |
306 | end; |
loadFromAttributesAndNodes
DescriptionLoading from attributes and nodesDefinition
loadFromAttributesAndNodes(integer xmlFile, string key, boolean resetVehicles)Arguments
integer | xmlFile | id of xml object |
string | key | key |
boolean | resetVehicles | reset vehicles |
boolean | success | success |
314 | function 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; |
336 | end; |
getSaveAttributesAndNodes
DescriptionGet save attributes and nodesDefinition
getSaveAttributesAndNodes(string nodeIdent)Arguments
string | nodeIdent | node ident |
string | attributes | attributes |
string | nodes | nodes |
343 | function 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; |
370 | end; |
update
DescriptionUpdateDefinition
update(float dt)Arguments
float | dt | time since last call in ms |
375 | function 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; |
414 | end; |
updateTick
DescriptionUpdateTickDefinition
updateTick(float dt)Arguments
float | dt | time since last call in ms |
419 | function 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; |
453 | end; |
updateDisplayNumbers
DescriptionUpdate display numbersDefinition
updateDisplayNumbers(integer fillLevel)Arguments
integer | fillLevel | fill level |
458 | function Bga:updateDisplayNumbers(fillLevel) |
459 | if self.displayNumbers ~= nil then |
460 | Utils.setNumberShaderByValue(self.displayNumbers, math.floor(fillLevel), 0); |
461 | end; |
462 | end; |
objectDeleteTriggerCallback
DescriptionobjectDeleteTriggerCallbackDefinition
objectDeleteTriggerCallback(integer triggerId, integer otherId, boolean onEnter, boolean onLeave, boolean onStay)Arguments
integer | triggerId | id of trigger |
integer | otherId | id of actor |
boolean | onEnter | on enter |
boolean | onLeave | on leave |
boolean | onStay | on stay |
471 | function 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; |
489 | end; |
liquidManureFillLevelChanged
DescriptionliquidManureFillLevelChangedDefinition
liquidManureFillLevelChanged(integer fillLevel, integer fillType, table fillTrigger)Arguments
integer | fillLevel | fill level |
integer | fillType | fill type |
table | fillTrigger | fill trigger |
496 | function Bga:liquidManureFillLevelChanged(fillLevel, fillType, fillTrigger) |
497 | if self.isServer then |
498 | self:raiseDirtyFlags(self.bgaDirtyFlag); |
499 | end |
500 | end; |
allowFillType
DescriptionChecks if fill type is allowedDefinition
allowFillType(integer fillType)Arguments
integer | fillType | fill type |
boolean | allowFillType | allow fill type |
506 | function 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 |
513 | end; |
setFillLevel
DescriptionSet fill levelDefinition
setFillLevel(integer fillLevel, integer fillType, boolean fillable, table trigger)Arguments
integer | fillLevel | fill level |
integer | fillType | fill type |
boolean | fillable | fillable |
table | trigger | trigger |
521 | function 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 |
543 | end; |
getFillLevel
DescriptionGet fill levelDefinition
getFillLevel(integer fillType)Arguments
integer | fillType | fill type |
integer | fillLevel | fill level |
549 | function Bga:getFillLevel(fillType) |
550 | if fillType == FillUtil.FILLTYPE_LIQUIDMANURE then |
551 | return self.liquidManureFillLevel |
552 | else |
553 | return self.bunkerFillLevel; |
554 | end |
555 | end; |
getFreeCapacity
DescriptionGet free capacityDefinition
getFreeCapacity(integer fillType)Arguments
integer | fillType | fill type |
integer | freeCapacity | free capacity |
561 | function 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 |
567 | end; |