Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- AnimalLoadingTrigger
- BasketTrigger
- FillPlane
- FillTrigger
- InsideBuildingTrigger
- LoadTrigger
- LoadTriggerSetIsLoadingEv...
- LoanTrigger
- RainDropFactorTrigger
- ShopTrigger
- TransportMissionTrigger
- UnloadFeedingTrough
- UnloadTrigger
- WeighStation
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
UnloadTrigger
ParentObjectFunctions
- addFillUnitFillLevel
- baleTriggerCallback
- delete
- getCustomDischargeNotAllowedWarning
- getFillUnitAllowsFillType
- getFillUnitExactFillRootNode
- getFillUnitFreeCapacity
- getFillUnitIndexFromNode
- getIsFillTypeAllowed
- getIsFillTypeSupported
- getIsToolTypeAllowed
- load
- loadAcceptedToolType
- loadAvoidFillTypes
- loadBaleTrigger
- loadFillTypes
- new
- setTarget
- update
- updateBales
addFillUnitFillLevel
DescriptionIncrease fill levelDefinition
addFillUnitFillLevel(integer fillUnitIndex, float fillLevelDelta, integer fillTypeIndex, table toolType, table fillPositionData)Arguments
integer | fillUnitIndex | |
float | fillLevelDelta | |
integer | fillTypeIndex | |
table | toolType | |
table | fillPositionData |
bool |
273 | function UnloadTrigger:addFillUnitFillLevel(farmId, fillUnitIndex, fillLevelDelta, fillTypeIndex, toolType, fillPositionData) |
274 | local applied = self.target:addFillLevelFromTool(farmId, fillLevelDelta, fillTypeIndex, fillPositionData, toolType) |
275 | return applied |
276 | end |
baleTriggerCallback
DescriptionCallback method for the bale triggerDefinition
baleTriggerCallback(integer triggerId, integer otherId, bool onEnter, bool onLeave, bool onStay, integer otherShapeId)Arguments
integer | triggerId | |
integer | otherId | |
bool | onEnter | |
bool | onLeave | |
bool | onStay | |
integer | otherShapeId |
380 | function 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 |
418 | end |
delete
DescriptionDelete instanceDefinition
delete()Code
178 | function 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) |
185 | end |
getCustomDischargeNotAllowedWarning
DescriptionDefinitiongetCustomDischargeNotAllowedWarning()Code
422 | function UnloadTrigger:getCustomDischargeNotAllowedWarning() |
423 | return self.notAllowedWarningText |
424 | end |
getFillUnitAllowsFillType
DescriptionChecks if fill type is allowedDefinition
getFillUnitAllowsFillType(integer fillUnitIndex, integer fillType)Arguments
integer | fillUnitIndex | |
integer | fillType |
bool | true | if allowed |
292 | function UnloadTrigger:getFillUnitAllowsFillType(fillUnitIndex, fillType) |
293 | return self:getIsFillTypeAllowed(fillType) |
294 | end |
getFillUnitExactFillRootNode
DescriptionReturns exactFillRootNodeDefinition
getFillUnitExactFillRootNode(integer fillUnitIndex)Arguments
integer | fillUnitIndex | index of fillunit |
261 | function UnloadTrigger:getFillUnitExactFillRootNode(fillUnitIndex) |
262 | return self.exactFillRootNode |
263 | end |
getFillUnitFreeCapacity
DescriptionReturns the free capacityDefinition
getFillUnitFreeCapacity(integer fillUnitIndex, integer fillTypeIndex)Arguments
integer | fillUnitIndex | fill unit index |
integer | fillTypeIndex | fill type index |
float | freeCapacity | free capacity |
345 | function UnloadTrigger:getFillUnitFreeCapacity(fillUnitIndex, fillTypeIndex, farmId) |
346 | if self.target.getFreeCapacity ~= nil then |
347 | return self.target:getFreeCapacity(fillTypeIndex, farmId) |
348 | end |
349 | return 0 |
350 | end |
getFillUnitIndexFromNode
DescriptionReturns default value '1'Definition
getFillUnitIndexFromNode(integer node)Arguments
integer | node | scenegraph node |
254 | function UnloadTrigger:getFillUnitIndexFromNode(node) |
255 | return 1 |
256 | end |
getIsFillTypeAllowed
DescriptionChecks if fillType is allowedDefinition
getIsFillTypeAllowed(integer fillType)Arguments
integer | fillType |
boolean | isAllowed | true if fillType is supported else false |
300 | function UnloadTrigger:getIsFillTypeAllowed(fillType) |
301 | return self:getIsFillTypeSupported(fillType) |
302 | end |
getIsFillTypeSupported
DescriptionChecks if fillType is supportedDefinition
getIsFillTypeSupported(integer fillType)Arguments
integer | fillType |
boolean | isSupported | true if fillType is supported else false |
308 | function 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 |
330 | end |
getIsToolTypeAllowed
DescriptionChecks if toolType is allowedDefinition
getIsToolTypeAllowed(integer toolType)Arguments
integer | toolType |
boolean | isAllowed | true if toolType is allowed else false |
356 | function 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 |
370 | end |
load
DescriptionLoads elements of the classDefinition
load(table rootNode, string xmlFile, string xmlNode)Arguments
table | rootNode | of the object |
string | xmlFile | file to read |
string | xmlNode | xmlNode to read from |
bool | return | true if successful |
50 | function 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 |
81 | end |
loadAcceptedToolType
DescriptionLoads accepted tool typeDefinition
loadAcceptedToolType(table rootNode, string xmlFile, string xmlNode)Arguments
table | rootNode | of the object |
string | xmlFile | file to read |
string | xmlNode | xmlNode to read from |
88 | function 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 |
100 | end |
loadAvoidFillTypes
DescriptionLoads avoid fill TypesDefinition
loadAvoidFillTypes(table rootNode, string xmlFile, string xmlNode)Arguments
table | rootNode | of the object |
string | xmlFile | file to read |
string | xmlNode | xmlNode to read from |
107 | function 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 |
124 | end |
loadBaleTrigger
DescriptionLoads bale triggerDefinition
loadBaleTrigger(table rootNode, string xmlFile, string xmlNode)Arguments
table | rootNode | of the object |
string | xmlFile | file to read |
string | xmlNode | xmlNode to read from |
155 | function 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 |
174 | end |
loadFillTypes
DescriptionLoads fill TypesDefinition
loadFillTypes(table rootNode, string xmlFile, string xmlNode)Arguments
table | rootNode | of the object |
string | xmlFile | file to read |
string | xmlNode | xmlNode to read from |
131 | function 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 |
148 | end |
new
DescriptionCreates a new instance of the classDefinition
new(bool isServer, bool isClient, table customMt)Arguments
bool | isServer | true if we are server |
bool | isClient | true if we are client |
table | customMt | meta table |
table | self | returns the instance |
32 | function 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 |
42 | end |
setTarget
DescriptionConnects object using the trigger to the triggerDefinition
setTarget(table object)Arguments
table | object | target on which the unload trigger is attached |
190 | function 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 |
197 | end |
update
DescriptionUpdate methodDefinition
update(float dt)Arguments
float | dt | delta time |
206 | function UnloadTrigger:update(dt) |
207 | UnloadTrigger:superClass().update(self, dt) |
208 | |
209 | if self.isServer then |
210 | self:updateBales(dt) |
211 | end |
212 | end |
updateBales
DescriptionUpdate bale mechanicsDefinition
updateBales(float dt)Arguments
float | dt | delta time |
217 | function 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 |
249 | end |