LUADOC - Farming Simulator 22

FillTrigger

Description
Class for fill triggers
Functions

delete

Description
Delete fill trigger
Definition
delete()
Code
59function FillTrigger:delete()
60 -- remove the gas stations from all vehicles that are triggered by this trigger
61 for vehicle,count in pairs(self.vehiclesTriggerCount) do
62 if count > 0 then
63 if vehicle.removeFillUnitTrigger ~= nil then
64 vehicle:removeFillUnitTrigger(self)
65 end
66 end
67 end
68
69 g_soundManager:deleteSample(self.sample)
70
71 removeTrigger(self.triggerId)
72end

fillTriggerCallback

Description
Trigger callback
Definition
fillTriggerCallback(integer triggerId, integer otherId, boolean onEnter, boolean onLeave, boolean onStay)
Arguments
integertriggerIdid of trigger
integerotherIdid of actor
booleanonEnteron enter
booleanonLeaveon leave
booleanonStayon stay
Code
149function FillTrigger:fillTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
150 if self.isEnabled and (onEnter or onLeave) then
151 local vehicle = g_currentMission:getNodeObject(otherId)
152 if vehicle ~= nil and vehicle.addFillUnitTrigger ~= nil and vehicle.removeFillUnitTrigger ~= nil and vehicle ~= self and vehicle ~= self.sourceObject then
153 local count = Utils.getNoNil(self.vehiclesTriggerCount[vehicle], 0)
154 if onEnter then
155 local fillType = self:getCurrentFillType()
156 local fillUnitIndex = vehicle:getFirstValidFillUnitToFill(fillType)
157 if fillUnitIndex ~= nil then
158 self.vehiclesTriggerCount[vehicle] = count + 1
159
160 if count == 0 then
161 vehicle:addFillUnitTrigger(self, fillType, fillUnitIndex)
162 end
163 end
164 else
165 self.vehiclesTriggerCount[vehicle] = count - 1
166 if count <= 1 then
167 self.vehiclesTriggerCount[vehicle] = nil
168 vehicle:removeFillUnitTrigger(self)
169 g_currentMission:showMoneyChange(self.moneyChangeType, nil, false, vehicle:getActiveFarm())
170 end
171 end
172 end
173 end
174end

fillVehicle

Description
Fill vehicle
Definition
fillVehicle(table vehicle, float delta)
Arguments
tablevehiclevehicle to fill
floatdeltadelta
Return Values
floatdeltareal delta
Code
87function FillTrigger:fillVehicle(vehicle, delta, dt)
88 if self.fillLitersPerSecond ~= nil then
89 delta = math.min(delta, self.fillLitersPerSecond * 0.001 * dt)
90 end
91
92 local farmId = vehicle:getActiveFarm()
93
94 if self.sourceObject ~= nil then
95 local sourceFuelFillLevel = self.sourceObject:getFillUnitFillLevel(self.fillUnitIndex)
96 if sourceFuelFillLevel > 0 and g_currentMission.accessHandler:canFarmAccess(farmId, self.sourceObject) then
97 delta = math.min(delta, sourceFuelFillLevel)
98 if delta <= 0 then
99 return 0
100 end
101 else
102 return 0
103 end
104 end
105
106 local fillType = self:getCurrentFillType()
107
108 local fillUnitIndex = vehicle:getFirstValidFillUnitToFill(fillType)
109 if fillUnitIndex == nil then
110 return 0
111 end
112
113 delta = vehicle:addFillUnitFillLevel(farmId, fillUnitIndex, delta, fillType, ToolType.TRIGGER, nil)
114
115 if delta > 0 then
116 if self.sourceObject ~= nil then
117 self.sourceObject:addFillUnitFillLevel(farmId, self.fillUnitIndex, -delta, fillType, ToolType.TRIGGER, nil)
118 else
119 local price = delta * g_currentMission.economyManager:getPricePerLiter(fillType)
120 g_farmManager:updateFarmStats(farmId, "expenses", price)
121 g_currentMission:addMoney(-price, farmId, self.moneyChangeType, true)
122 end
123 end
124
125 return delta
126end

getIsActivatable

Description
Returns true if is activateable
Definition
getIsActivatable(table vehicle)
Arguments
tablevehiclevehicle
Return Values
booleanisActivateableis activateable
Code
132function FillTrigger:getIsActivatable(vehicle)
133 if self.sourceObject ~= nil then
134 if self.sourceObject:getFillUnitFillLevel(self.fillUnitIndex) > 0 and g_currentMission.accessHandler:canFarmAccess(vehicle:getActiveFarm(), self.sourceObject) then
135 return true
136 end
137 end
138
139 return false
140end

new

Description
Create fill trigger object
Definition
new(Integer id, table sourceObject, integer fillUnitIndex, table customMt)
Arguments
Integeridid of trigger node
tablesourceObjectsourceObject
integerfillUnitIndexfillUnitIndex
tablecustomMtcustom metatable (optional)
Return Values
tableinstanceinstance of gas station trigger
Code
28function FillTrigger.new(id, sourceObject, fillUnitIndex, fillLitersPerSecond, defaultFillType, customMt)
29 local self = {}
30 setmetatable(self, customMt or FillTrigger_mt)
31
32 self.customEnvironment = g_currentMission.loadingMapModName
33
34 self.triggerId = id
35 addTrigger(id, "fillTriggerCallback", self)
36
37 -- place sound at the same position as the trigger
38 self.soundNode = createTransformGroup("fillTriggerSoundNode")
39 link(getParent(id), self.soundNode)
40 setTranslation(self.soundNode, getTranslation(id))
41
42 self.sourceObject = sourceObject
43 self.vehiclesTriggerCount = {}
44 self.fillUnitIndex = fillUnitIndex
45 self.fillLitersPerSecond = fillLitersPerSecond
46 self.isEnabled = true
47
48 self.fillTypeIndex = FillType.DIESEL
49
50 return self
51end

onCreate

Description
On create fill trigger
Definition
onCreate(Integer id)
Arguments
Integeridid of trigger node
Code
13function FillTrigger:onCreate(id)
14 local fillTrigger = FillTrigger.new(id)
15 -- we can register this on client and server because onCreate is called on map load only
16 local moneyChangeType = MoneyType.register("other", "finance_purchaseFuel")
17 fillTrigger:setMoneyChangeType(moneyChangeType)
18 g_currentMission:addNonUpdateable(fillTrigger)
19end

onVehicleDeleted

Description
Called if vehicle gets out of trigger
Definition
onVehicleDeleted(table vehicle)
Arguments
tablevehiclevehicle
Code
77function FillTrigger:onVehicleDeleted(vehicle)
78 self.vehiclesTriggerCount[vehicle] = nil
79 g_currentMission:showMoneyChange(self.moneyChangeType, nil, false, vehicle:getActiveFarm())
80end