LUADOC - Farming Simulator 22

BaleUnloadTrigger

Parent
Object
Functions

baleTriggerCallback

Description
Callback method for the bale trigger
Definition
baleTriggerCallback(integer triggerId, integer otherId, bool onEnter, bool onLeave, bool onStay, integer otherShapeId)
Arguments
integertriggerId
integerotherId
boolonEnter
boolonLeave
boolonStay
integerotherShapeId
Code
172function BaleUnloadTrigger:baleTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay, otherShapeId)
173 if self.isEnabled then
174 local object = g_currentMission:getNodeObject(otherId)
175 if object ~= nil then
176 if object:isa(Bale) then
177 if onEnter then
178 local fillType = object:getFillType()
179
180 if self.target:getIsFillTypeAllowed(fillType)
181 and self.target:getIsFillTypeSupported(fillType)
182 and self.target:getIsToolTypeAllowed(ToolType.BALE) then
183 self:raiseActive()
184 table.addElement(self.balesInTrigger, object)
185 end
186 elseif onLeave then
187 for index, bale in ipairs(self.balesInTrigger) do
188 if bale == object then
189 table.remove(self.balesInTrigger, index)
190 break
191 end
192 end
193 end
194 else
195 -- automatic bale laoder unloading for mobile version
196 if Platform.gameplay.automaticBaleDrop then
197 if object:isa(Vehicle) then
198 if SpecializationUtil.hasSpecialization(BaleLoader, object.specializations) then
199 if onEnter then
200 table.addElement(self.baleLoadersInTrigger, object)
201 self:raiseActive()
202 elseif onLeave then
203 for index, baleLoader in ipairs(self.baleLoadersInTrigger) do
204 if baleLoader == object then
205 table.remove(self.baleLoadersInTrigger, index)
206 break
207 end
208 end
209 end
210 end
211 end
212 end
213 end
214 end
215 end
216end

delete

Description
Delete instance
Definition
delete()
Code
69function BaleUnloadTrigger:delete()
70 if self.triggerNode ~= nil and self.triggerNode ~= 0 then
71 removeTrigger(self.triggerNode)
72 self.triggerNode = 0
73 end
74 self.balesInTrigger = nil
75 self.baleLoadersInTrigger = nil
76
77 BaleUnloadTrigger:superClass().delete(self)
78end

load

Description
Loads elements of the class
Definition
load(table components, table xmlFile, string xmlNode, table target, table i3dMappings, integer rootNode)
Arguments
tablecomponentscomponents
tablexmlFilexml file object
stringxmlNodexml key
tabletargettarget object
tablei3dMappingsi3dMappings
integerrootNoderootNode
Return Values
booleansuccesssuccess
Code
44function BaleUnloadTrigger:load(components, xmlFile, xmlNode, target, i3dMappings, rootNode)
45 self.triggerNode = xmlFile:getValue(xmlNode .. "#triggerNode", nil, components, i3dMappings)
46 if self.triggerNode ~= nil then
47 if not CollisionFlag.getHasFlagSet(self.triggerNode, CollisionFlag.TRIGGER_DYNAMIC_OBJECT) then
48 Logging.xmlError(xmlFile, "Bale trigger '%s' does not have Bit '%d' (%s) set", xmlNode .. "#triggerNode", CollisionFlag.getBit(CollisionFlag.TRIGGER_DYNAMIC_OBJECT), "TRIGGER_DYNAMIC_OBJECT")
49 return false
50 end
51 addTrigger(self.triggerNode, "baleTriggerCallback", self)
52 else
53 return false
54 end
55
56 self.deleteLitersPerMS = xmlFile:getValue(xmlNode .. "#deleteLitersPerSecond", 4000) / 1000
57
58 if target ~= nil then
59 self:setTarget(target)
60 end
61
62 self.isEnabled = true
63
64 return true
65end

new

Description
Creates a new instance of the class
Definition
new(bool isServer, bool isClient, table customMt)
Arguments
boolisServertrue if we are server
boolisClienttrue if we are client
tablecustomMtmeta table
Return Values
tableselfreturns the instance
Code
25function BaleUnloadTrigger.new(isServer, isClient, customMt)
26 local self = Object.new(isServer, isClient, customMt or BaleUnloadTrigger_mt)
27
28 self.triggerNode = nil
29 self.balesInTrigger = {}
30 self.baleLoadersInTrigger = {}
31
32 return self
33end

registerXMLPaths

Description
Definition
registerXMLPaths()
Code
220function BaleUnloadTrigger.registerXMLPaths(schema, basePath)
221 schema:register(XMLValueType.NODE_INDEX, basePath .. "#triggerNode", "Trigger node")
222 schema:register(XMLValueType.FLOAT, basePath .. "#deleteLitersPerSecond", "Delete liters per second", 4000)
223end

setTarget

Description
Connects object using the trigger to the trigger
Definition
setTarget(table object)
Arguments
tableobjecttarget on which the unload trigger is attached
Code
83function BaleUnloadTrigger:setTarget(object)
84 assert(object.getIsFillTypeAllowed ~= nil)
85 assert(object.getIsToolTypeAllowed ~= nil)
86 assert(object.addFillUnitFillLevel ~= nil)
87
88 self.target = object
89end

update

Description
Update method
Definition
update(float dt)
Arguments
floatdtdelta time
Code
98function BaleUnloadTrigger:update(dt)
99 BaleUnloadTrigger:superClass().update(self, dt)
100
101 if self.isServer then
102 for index, bale in ipairs(self.balesInTrigger) do
103 if bale ~= nil and bale.nodeId ~= 0 then
104 if bale:getCanBeSold() then -- keep currently mounted bales in list, so they are handled once free
105 if bale.dynamicMountJointIndex == nil then
106 local fillType = bale:getFillType()
107 local fillLevel = bale:getFillLevel()
108 local fillInfo = nil
109
110 local delta = bale:getFillLevel()
111 if self.deleteLitersPerMS ~= nil then
112 delta = self.deleteLitersPerMS * dt
113 end
114
115 if delta > 0 then
116 delta = self.target:addFillUnitFillLevel(bale:getOwnerFarmId(), 1, delta, fillType, ToolType.BALE, fillInfo)
117 bale:setFillLevel(fillLevel - delta)
118 local newFillLevel = bale:getFillLevel()
119 if newFillLevel < 0.01 then
120 if fillType == FillType.COTTON then
121 local total = g_currentMission:farmStats(self:getOwnerFarmId()):updateStats("soldCottonBales", 1)
122 g_achievementManager:tryUnlock("CottonBales", total)
123 end
124
125 bale:delete()
126 table.remove(self.balesInTrigger, index)
127 break
128 end
129 end
130 end
131 end
132 else
133 table.remove(self.balesInTrigger, index)
134 end
135 end
136
137 for index, baleLoader in ipairs(self.baleLoadersInTrigger) do
138 if baleLoader:getIsAutomaticBaleUnloadingAllowed() then
139 local bales = baleLoader:getLoadedBales()
140 local unloadingAllowed = false
141 for i, bale in ipairs(bales) do
142 local fillType = bale:getFillType()
143
144 if self.target:getIsFillTypeAllowed(fillType)
145 and self.target:getIsFillTypeSupported(fillType)
146 and self.target:getIsToolTypeAllowed(ToolType.BALE) then
147 unloadingAllowed = true
148 break
149 end
150 end
151
152 if unloadingAllowed then
153 baleLoader:startAutomaticBaleUnloading()
154 end
155 end
156 end
157
158 if #self.balesInTrigger > 0 or #self.baleLoadersInTrigger > 0 then
159 self:raiseActive()
160 end
161 end
162end