Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1 | -- FillTrigger class |
2 | -- |
3 | -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved. |
4 | |
5 | FillTrigger = {} |
6 | |
7 | local FillTrigger_mt = Class(FillTrigger); |
8 | |
9 | function FillTrigger:onCreate(id) |
10 | local trigger = FillTrigger:new(); |
11 | if trigger:load(id) then |
12 | g_currentMission:addNonUpdateable(trigger); |
13 | else |
14 | trigger:delete(); |
15 | end |
16 | end; |
17 | |
18 | function FillTrigger:new(mt) |
19 | local self = {}; |
20 | if mt == nil then |
21 | mt = FillTrigger_mt; |
22 | end |
23 | setmetatable(self, mt); |
24 | |
25 | self.triggerId = 0; |
26 | self.nodeId = 0; |
27 | |
28 | self.moneyChangeId = getMoneyTypeId(); |
29 | |
30 | return self; |
31 | end; |
32 | |
33 | function FillTrigger:load(nodeId, fillType, parent) |
34 | self.nodeId = nodeId; |
35 | |
36 | self.triggerId = Utils.indexToObject(nodeId, getUserAttribute(nodeId, "triggerIndex")); |
37 | if self.triggerId == nil then |
38 | self.triggerId = nodeId; |
39 | end |
40 | addTrigger(self.triggerId, "triggerCallback", self); |
41 | |
42 | if fillType ~= nil then |
43 | self.fillType = fillType; |
44 | else |
45 | self.fillType = Fillable.FILLTYPE_UNKNOWN; |
46 | local fillTypeStr = getUserAttribute(nodeId, "fillType"); |
47 | if fillTypeStr ~= nil then |
48 | local desc = Fillable.fillTypeNameToDesc[fillTypeStr]; |
49 | if desc ~= nil then |
50 | self.fillType = desc.index; |
51 | end; |
52 | end |
53 | end; |
54 | |
55 | self.parent = parent; |
56 | |
57 | self.isSiloTrigger = Utils.getNoNil(getUserAttribute(nodeId, "isSiloTrigger"), false); |
58 | |
59 | self.isEnabled = true; |
60 | |
61 | return true; |
62 | end; |
63 | |
64 | function FillTrigger:delete() |
65 | removeTrigger(self.triggerId); |
66 | end; |
67 | |
68 | function FillTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId) |
69 | if self.isEnabled and (onEnter or onLeave) then |
70 | local fillable = g_currentMission.objectToTrailer[otherShapeId]; |
71 | if fillable ~= nil and fillable.addFillTrigger ~= nil and fillable.removeFillTrigger ~= nil and fillable ~= self.parent then |
72 | if onEnter then |
73 | fillable:addFillTrigger(self); |
74 | else -- onLeave |
75 | fillable:removeFillTrigger(self); |
76 | g_currentMission:showMoneyChange(self.moneyChangeId); |
77 | end; |
78 | end; |
79 | end; |
80 | end; |
81 | |
82 | function FillTrigger:fill(tool, delta) |
83 | |
84 | if not tool:allowFillType(self.fillType, false) then |
85 | return 0.0; |
86 | end |
87 | local oldFillLevel = tool:getFillLevel(self.fillType); |
88 | if self.isSiloTrigger then |
89 | local silo = g_currentMission:getSiloAmount(self.fillType); |
90 | delta = math.min(delta, silo); |
91 | if delta > 0 then |
92 | tool:setFillLevel(oldFillLevel + delta, self.fillType, true); |
93 | delta = tool:getFillLevel(self.fillType) - oldFillLevel; |
94 | |
95 | g_currentMission:setSiloAmount(self.fillType, silo - delta); |
96 | end |
97 | elseif self.parent ~= nil then |
98 | if self.parent.fillLevel > 0 then |
99 | delta = math.min(delta, self.parent.fillLevel); |
100 | if delta > 0 then |
101 | tool:setFillLevel(oldFillLevel + delta, self.fillType, true); |
102 | delta = tool:getFillLevel(self.fillType) - oldFillLevel; |
103 | |
104 | self.parent:setFillLevel(self.parent.fillLevel - delta, self.fillType, true); |
105 | end |
106 | end; |
107 | else |
108 | tool:setFillLevel(oldFillLevel + delta, self.fillType, true); |
109 | delta = tool:getFillLevel(self.fillType) - oldFillLevel; |
110 | |
111 | local fillTypeDesc = Fillable.fillTypeIndexToDesc[self.fillType] |
112 | if fillTypeDesc ~= nil then |
113 | |
114 | local price = delta*fillTypeDesc.pricePerLiter; |
115 | g_currentMission.missionStats:updateStats("expenses", price); |
116 | g_currentMission:addSharedMoney(-price, "other"); |
117 | g_currentMission:addMoneyChange(-price, self.moneyChangeId); |
118 | end |
119 | end |
120 | |
121 | return delta; |
122 | end |
123 | |
124 | function FillTrigger:getIsActivatable(fillable) |
125 | if not fillable:allowFillType(self.fillType, false) or (self.isSiloTrigger and g_currentMission:getSiloAmount(self.fillType) <= 0) or (self.parent ~= nil and self.parent.fillLevel <= 0) then |
126 | return false; |
127 | end; |
128 | return true; |
129 | end;
|
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de