LUADOC - Farming Simulator 19

UnloadTrigger

Parent
Object
Functions

addFillUnitFillLevel

Description
Increase fill level
Definition
addFillUnitFillLevel(integer fillUnitIndex, float fillLevelDelta, integer fillTypeIndex, table toolType, table fillPositionData)
Arguments
integerfillUnitIndex
floatfillLevelDelta
integerfillTypeIndex
tabletoolType
tablefillPositionData
Return Values
bool
Code
273function UnloadTrigger:addFillUnitFillLevel(farmId, fillUnitIndex, fillLevelDelta, fillTypeIndex, toolType, fillPositionData)
274 local applied = self.target:addFillLevelFromTool(farmId, fillLevelDelta, fillTypeIndex, fillPositionData, toolType)
275 return applied
276end

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
380function UnloadTrigger:baleTriggerCallback(triggerId, otherId, onEnter, onLeave, onStay, otherShapeId)
381 if self.isEnabled then
382 local object = g_currentMission:getNodeObject(otherId)
383 if object ~= nil and object:isa(Bale) then
384 if onEnter then
385 local fillType = object:getFillType()
386
387 if self.target:getIsFillTypeAllowed(fillType) and self.target:getIsToolTypeAllowed(ToolType.BALE) then
388 if self.target:getFreeCapacity(fillType) > 0 then
389 self:raiseActive()
390 table.insert(self.balesInTrigger, object)
391 end
392 end
393
394 if self.fillTypes ~= nil and self.fillTypes[fillType] ~= true then
395 return
396 end
397 if self.avoidFillTypes ~= nil and self.avoidFillTypes[fillType] == true then
398 return
399 end
400 if self.acceptedToolTypes ~= nil and self.acceptedToolTypes[ToolType.BALE] ~= true then
401 return
402 end
403
404 if self.target:getIsFillTypeAllowed(fillType) and self.target:getIsToolTypeAllowed(ToolType.BALE) then
405 self:raiseActive()
406 table.insert(self.balesInTrigger, object)
407 end
408 elseif onLeave then
409 for index,bale in ipairs(self.balesInTrigger) do
410 if bale == object then
411 table.remove(self.balesInTrigger, index)
412 break
413 end
414 end
415 end
416 end
417 end
418end

delete

Description
Delete instance
Definition
delete()
Code
178function UnloadTrigger:delete()
179 if self.baleTriggerNode ~= nil and self.baleTriggerNode ~= 0 then
180 removeTrigger(self.baleTriggerNode)
181 self.baleTriggerNode = 0
182 end
183
184 UnloadTrigger:superClass().delete(self)
185end

getCustomDischargeNotAllowedWarning

Description
Definition
getCustomDischargeNotAllowedWarning()
Code
422function UnloadTrigger:getCustomDischargeNotAllowedWarning()
423 return self.notAllowedWarningText
424end

getFillUnitAllowsFillType

Description
Checks if fill type is allowed
Definition
getFillUnitAllowsFillType(integer fillUnitIndex, integer fillType)
Arguments
integerfillUnitIndex
integerfillType
Return Values
booltrueif allowed
Code
292function UnloadTrigger:getFillUnitAllowsFillType(fillUnitIndex, fillType)
293 return self:getIsFillTypeAllowed(fillType)
294end

getFillUnitExactFillRootNode

Description
Returns exactFillRootNode
Definition
getFillUnitExactFillRootNode(integer fillUnitIndex)
Arguments
integerfillUnitIndexindex of fillunit
Code
261function UnloadTrigger:getFillUnitExactFillRootNode(fillUnitIndex)
262 return self.exactFillRootNode
263end

getFillUnitFreeCapacity

Description
Returns the free capacity
Definition
getFillUnitFreeCapacity(integer fillUnitIndex, integer fillTypeIndex)
Arguments
integerfillUnitIndexfill unit index
integerfillTypeIndexfill type index
Return Values
floatfreeCapacityfree capacity
Code
345function UnloadTrigger:getFillUnitFreeCapacity(fillUnitIndex, fillTypeIndex, farmId)
346 if self.target.getFreeCapacity ~= nil then
347 return self.target:getFreeCapacity(fillTypeIndex, farmId)
348 end
349 return 0
350end

getFillUnitIndexFromNode

Description
Returns default value '1'
Definition
getFillUnitIndexFromNode(integer node)
Arguments
integernodescenegraph node
Code
254function UnloadTrigger:getFillUnitIndexFromNode(node)
255 return 1
256end

getIsFillTypeAllowed

Description
Checks if fillType is allowed
Definition
getIsFillTypeAllowed(integer fillType)
Arguments
integerfillType
Return Values
booleanisAllowedtrue if fillType is supported else false
Code
300function UnloadTrigger:getIsFillTypeAllowed(fillType)
301 return self:getIsFillTypeSupported(fillType)
302end

getIsFillTypeSupported

Description
Checks if fillType is supported
Definition
getIsFillTypeSupported(integer fillType)
Arguments
integerfillType
Return Values
booleanisSupportedtrue if fillType is supported else false
Code
308function UnloadTrigger:getIsFillTypeSupported(fillType)
309 local accepted = true
310
311 if self.target ~= nil then
312 if not self.target:getIsFillTypeAllowed(fillType) then
313 accepted = false
314 end
315 else
316 if self.fillTypes ~= nil then
317 if not self.fillTypes[fillType] then
318 accepted = false
319 end
320 end
321 end
322
323 if self.avoidFillTypes ~= nil then
324 if self.avoidFillTypes[fillType] then
325 accepted = false
326 end
327 end
328
329 return accepted
330end

getIsToolTypeAllowed

Description
Checks if toolType is allowed
Definition
getIsToolTypeAllowed(integer toolType)
Arguments
integertoolType
Return Values
booleanisAllowedtrue if toolType is allowed else false
Code
356function UnloadTrigger:getIsToolTypeAllowed(toolType)
357 local accepted = true
358
359 if self.acceptedToolTypes ~= nil then
360 if self.acceptedToolTypes[toolType] ~= true then
361 accepted = false
362 end
363 end
364
365 if accepted then
366 return self.target:getIsToolTypeAllowed(toolType)
367 else
368 return false
369 end
370end

load

Description
Loads elements of the class
Definition
load(table rootNode, string xmlFile, string xmlNode)
Arguments
tablerootNodeof the object
stringxmlFilefile to read
stringxmlNodexmlNode to read from
Return Values
boolreturntrue if successful
Code
50function UnloadTrigger:load(rootNode, xmlFile, xmlNode, target)
51 self:loadBaleTrigger(rootNode, xmlFile, xmlNode)
52
53 local exactFillRootNode = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "exactFillRootNode", getXMLString, rootNode)
54 self.exactFillRootNode = I3DUtil.indexToObject(rootNode, exactFillRootNode)
55
56 if self.baleTriggerNode == nil and self.exactFillRootNode == nil then
57 g_logManager:warning("Missing exactFillRootNode or baleTrigger for unloadTrigger")
58 return false
59 end
60
61 if self.exactFillRootNode ~= nil then
62 local colMask = getCollisionMask(self.exactFillRootNode)
63 if bitAND(FillUnit.EXACTFILLROOTNODE_MASK, colMask) == 0 then
64 g_logManager:warning("Invalid exactFillRootNode collision mask for unloadTrigger. Bit 30 needs to be set!")
65 return false
66 end
67
68 g_currentMission:addNodeObject(self.exactFillRootNode, self)
69 end
70
71 if target ~= nil then
72 self:setTarget(target)
73 end
74
75 self:loadFillTypes(rootNode, xmlFile, xmlNode)
76 self:loadAcceptedToolType(rootNode, xmlFile, xmlNode)
77 self:loadAvoidFillTypes(rootNode, xmlFile, xmlNode)
78 self.isEnabled = true
79
80 return true
81end

loadAcceptedToolType

Description
Loads accepted tool type
Definition
loadAcceptedToolType(table rootNode, string xmlFile, string xmlNode)
Arguments
tablerootNodeof the object
stringxmlFilefile to read
stringxmlNodexmlNode to read from
Code
88function UnloadTrigger:loadAcceptedToolType(rootNode, xmlFile, xmlNode)
89 local acceptedToolTypeNames = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "acceptedToolTypes", getXMLString, rootNode)
90 local acceptedToolTypes = StringUtil.getVectorFromString(acceptedToolTypeNames)
91
92 if acceptedToolTypes ~= nil then
93 for _,acceptedToolType in pairs(acceptedToolTypes) do
94 local toolTypeInt = g_toolTypeManager:getToolTypeIndexByName(acceptedToolType)
95 self.acceptedToolTypes[toolTypeInt] = true
96 end
97 else
98 self.acceptedToolTypes = nil
99 end
100end

loadAvoidFillTypes

Description
Loads avoid fill Types
Definition
loadAvoidFillTypes(table rootNode, string xmlFile, string xmlNode)
Arguments
tablerootNodeof the object
stringxmlFilefile to read
stringxmlNodexmlNode to read from
Code
107function UnloadTrigger:loadAvoidFillTypes(rootNode, xmlFile, xmlNode)
108 local avoidFillTypeCategories = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "avoidFillTypeCategories", getXMLString, rootNode)
109 local avoidFillTypeNames = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "avoidFillTypes", getXMLString, rootNode)
110 local avoidFillTypes = nil
111
112 if avoidFillTypeCategories ~= nil and avoidFillTypeNames == nil then
113 avoidFillTypes = g_fillTypeManager:getFillTypesByCategoryNames(avoidFillTypeCategories, "Warning: UnloadTrigger has invalid avoidFillTypeCategory '%s'.")
114 elseif avoidFillTypeCategories == nil and avoidFillTypeNames ~= nil then
115 avoidFillTypes = g_fillTypeManager:getFillTypesByNames(avoidFillTypeNames, "Warning: UnloadTrigger has invalid avoidFillType '%s'.")
116 end
117 if avoidFillTypes ~= nil then
118 for _,fillType in pairs(avoidFillTypes) do
119 self.avoidFillTypes[fillType] = true
120 end
121 else
122 self.avoidFillTypes = nil
123 end
124end

loadBaleTrigger

Description
Loads bale trigger
Definition
loadBaleTrigger(table rootNode, string xmlFile, string xmlNode)
Arguments
tablerootNodeof the object
stringxmlFilefile to read
stringxmlNodexmlNode to read from
Code
155function UnloadTrigger:loadBaleTrigger(rootNode, xmlFile, xmlNode)
156 local baleTriggerNode = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "baleTriggerIndex", getXMLString, rootNode)
157 if baleTriggerNode ~= nil then
158 g_logManager:warning("'baleTriggerIndex' is not supported anymore for unloadTrigger! Please use 'baleTriggerNode' instead!")
159 end
160
161 baleTriggerNode = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "baleTriggerNode", getXMLString, rootNode)
162
163 if baleTriggerNode ~= nil then
164 self.baleTriggerNode = I3DUtil.indexToObject(rootNode, baleTriggerNode)
165 if self.baleTriggerNode ~= nil then
166 addTrigger(self.baleTriggerNode, "baleTriggerCallback", self)
167 end
168 end
169
170 local baleDeleteLitersPerSecond = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "baleDeleteLitersPerSecond", getXMLInt, rootNode)
171 if baleDeleteLitersPerSecond ~= nil then
172 self.baleDeleteLitersPerMS = baleDeleteLitersPerSecond * 0.0001
173 end
174end

loadFillTypes

Description
Loads fill Types
Definition
loadFillTypes(table rootNode, string xmlFile, string xmlNode)
Arguments
tablerootNodeof the object
stringxmlFilefile to read
stringxmlNodexmlNode to read from
Code
131function UnloadTrigger:loadFillTypes(rootNode, xmlFile, xmlNode)
132 local fillTypeCategories = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "fillTypeCategories", getXMLString, rootNode)
133 local fillTypeNames = XMLUtil.getValueFromXMLFileOrUserAttribute(xmlFile, xmlNode, "fillTypes", getXMLString, rootNode)
134 local fillTypes = nil
135
136 if fillTypeCategories ~= nil and fillTypeNames == nil then
137 fillTypes = g_fillTypeManager:getFillTypesByCategoryNames(fillTypeCategories, "Warning: UnloadTrigger has invalid fillTypeCategory '%s'.")
138 elseif fillTypeNames ~= nil then
139 fillTypes = g_fillTypeManager:getFillTypesByNames(fillTypeNames, "Warning: UnloadTrigger has invalid fillType '%s'.")
140 end
141 if fillTypes ~= nil then
142 for _, fillType in pairs(fillTypes) do
143 self.fillTypes[fillType] = true
144 end
145 else
146 self.fillTypes = nil
147 end
148end

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
32function UnloadTrigger:new(isServer, isClient, customMt)
33 local self = Object:new(isServer, isClient, customMt or UnloadTrigger_mt)
34
35 self.baleTriggerNode = nil
36 self.balesInTrigger = {}
37 self.fillTypes = {}
38 self.avoidFillTypes = {}
39 self.acceptedToolTypes = {}
40 self.notAllowedWarningText = nil
41 return self
42end

setTarget

Description
Connects object using the trigger to the trigger
Definition
setTarget(table object)
Arguments
tableobjecttarget on which the unload trigger is attached
Code
190function UnloadTrigger:setTarget(object)
191 assert(object.getIsFillTypeAllowed ~= nil)
192 assert(object.getIsToolTypeAllowed ~= nil)
193 assert(object.addFillLevelFromTool ~= nil)
194 assert(object.getFreeCapacity ~= nil)
195
196 self.target = object
197end

update

Description
Update method
Definition
update(float dt)
Arguments
floatdtdelta time
Code
206function UnloadTrigger:update(dt)
207 UnloadTrigger:superClass().update(self, dt)
208
209 if self.isServer then
210 self:updateBales(dt)
211 end
212end

updateBales

Description
Update bale mechanics
Definition
updateBales(float dt)
Arguments
floatdtdelta time
Code
217function UnloadTrigger:updateBales(dt)
218 for index, bale in ipairs(self.balesInTrigger) do
219 if bale ~= nil and bale.nodeId ~= 0 then
220 if bale.dynamicMountJointIndex == nil then
221 local fillType = bale:getFillType()
222 local fillLevel = bale:getFillLevel()
223 local fillInfo = nil
224
225 local delta = bale:getFillLevel()
226 if self.baleDeleteLitersPerMS ~= nil then
227 delta = self.baleDeleteLitersPerMS * dt
228 end
229
230 if delta > 0 then
231 delta = self.target:addFillLevelFromTool(bale:getOwnerFarmId(), delta, fillType, fillInfo, ToolType.BALE)
232 bale:setFillLevel(fillLevel - delta)
233 local newFillLevel = bale:getFillLevel()
234 if newFillLevel < 0.01 then
235 bale:delete()
236 table.remove(self.balesInTrigger, index)
237 break
238 end
239 end
240 end
241 else
242 table.remove(self.balesInTrigger, index)
243 end
244 end
245
246 if #self.balesInTrigger > 0 then
247 self:raiseActive()
248 end
249end