LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

DynamicMountAttacher

Description
Specialization for automatically attaching objects to vehicles (e.g. cutters to cutter trailers, bales to baleforks, ...)
Functions

addDynamicMountedObject

Description
Definition
addDynamicMountedObject()
Code
282function DynamicMountAttacher:addDynamicMountedObject(object)
283 local spec = self.spec_dynamicMountAttacher
284
285 spec.dynamicMountedObjects[object] = object
286
287 for _, info in pairs(spec.dynamicMountCollisionMasks) do
288 setCollisionMask(info.node, info.mountedCollisionMask)
289 end
290
291 self:setDynamicMountAnimationState(true)
292
293 self:raiseDirtyFlags(spec.dynamicMountedObjectsDirtyFlag)
294end

addNodeObjectMapping

Description
Definition
addNodeObjectMapping()
Code
461function DynamicMountAttacher:addNodeObjectMapping(superFunc, list)
462 superFunc(self, list)
463
464 local spec = self.spec_dynamicMountAttacher
465 if spec.dynamicMountAttacherTrigger ~= nil and spec.dynamicMountAttacherTrigger.triggerNode ~= nil then
466 list[spec.dynamicMountAttacherTrigger.triggerNode] = self
467 end
468end

dynamicMountTriggerCallback

Description
Definition
dynamicMountTriggerCallback()
Code
337function DynamicMountAttacher:dynamicMountTriggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
338 local spec = self.spec_dynamicMountAttacher
339
340 if onEnter then
341 local object = g_currentMission:getNodeObject(otherActorId)
342 if object == nil then
343 object = g_currentMission.nodeToObject[otherActorId]
344 end
345 if object == self:getRootVehicle() or (self.spec_attachable ~= nil and self.spec_attachable.attacherVehicle == object) then
346 object = nil
347 end
348 if object ~= nil and object ~= self then
349 -- is a mountable object (e.g. bales)
350 local isObject = object.getSupportsMountDynamic ~= nil and object:getSupportsMountDynamic() and object.lastMoveTime ~= nil
351
352 -- is a mountable vehicle (e.g. pallets)
353 local isVehicle = object.getSupportsTensionBelts ~= nil and object:getSupportsTensionBelts() and object.lastMoveTime ~= nil
354
355 if isObject or isVehicle then
356 local canBeMounted = true
357 -- check if otherActor is a trigger and if trigger mounting is allowed
358 if object.spec_dynamicMountAttacher ~= nil then
359 local dynMountAttacher = object.spec_dynamicMountAttacher
360 if dynMountAttacher.dynamicMountAttacherTrigger ~= nil then
361 if dynMountAttacher.dynamicMountAttacherTrigger.triggerNode == otherActorId and not spec.isTriggerMountingAllowed then
362 canBeMounted = false
363 end
364 end
365 end
366
367 if canBeMounted then
368 spec.pendingDynamicMountObjects[object] = Utils.getNoNil(spec.pendingDynamicMountObjects[object], 0) + 1
369 end
370 end
371 end
372 elseif onLeave then
373 local object = g_currentMission:getNodeObject(otherActorId)
374 if object == nil then
375 object = g_currentMission.nodeToObject[otherActorId]
376 end
377 if object ~= nil then
378 if spec.pendingDynamicMountObjects[object] ~= nil then
379 local count = spec.pendingDynamicMountObjects[object]-1
380 if count == 0 then
381 spec.pendingDynamicMountObjects[object] = nil
382
383 if spec.dynamicMountedObjects[object] ~= nil then
384 self:removeDynamicMountedObject(object, false)
385 object:unmountDynamic()
386 end
387 else
388 spec.pendingDynamicMountObjects[object] = count
389 end
390 end
391 end
392 end
393end

getAllowDynamicMountFillLevelInfo

Description
Definition
getAllowDynamicMountFillLevelInfo()
Code
397function DynamicMountAttacher:getAllowDynamicMountFillLevelInfo()
398 return true
399end

getAllowDynamicMountObjects

Description
Definition
getAllowDynamicMountObjects()
Code
331function DynamicMountAttacher:getAllowDynamicMountObjects()
332 return true
333end

getFillLevelInformation

Description
Definition
getFillLevelInformation()
Code
423function DynamicMountAttacher:getFillLevelInformation(superFunc, fillLevelInformations)
424 superFunc(self, fillLevelInformations)
425
426 if self:getAllowDynamicMountFillLevelInfo() then
427 local spec = self.spec_dynamicMountAttacher
428 for object,_ in pairs(spec.dynamicMountedObjects) do
429 if object.getFillLevelInformation ~= nil then
430 object:getFillLevelInformation(fillLevelInformations)
431 else
432 if object.getFillLevel ~= nil and object.getFillType ~= nil then
433 local added = false
434 for _,fillLevelInformation in pairs(fillLevelInformations) do
435 if fillLevelInformation.fillType == object:getFillType() then
436 fillLevelInformation.fillLevel = fillLevelInformation.fillLevel + object:getFillLevel()
437 if object.getCapacity ~= nil then
438 fillLevelInformation.capacity = fillLevelInformation.capacity + object:getCapacity()
439 else
440 fillLevelInformation.capacity = fillLevelInformation.capacity + object:getFillLevel() -- bale
441 end
442 added = true
443 break
444 end
445 end
446 if not added then
447 if object.getCapacity ~= nil then
448 table.insert(fillLevelInformations, {fillType=object:getFillType(), fillLevel=object:getFillLevel(), capacity=object:getCapacity()})
449 else
450 table.insert(fillLevelInformations, {fillType=object:getFillType(), fillLevel=object:getFillLevel(), capacity=object:getFillLevel()})
451 end
452 end
453 end
454 end
455 end
456 end
457end

getIsDynamicMountGrabOpened

Description
Definition
getIsDynamicMountGrabOpened()
Code
417function DynamicMountAttacher:getIsDynamicMountGrabOpened(grab)
418 return true
419end

loadDynamicMountGrabFromXML

Description
Definition
loadDynamicMountGrabFromXML()
Code
403function DynamicMountAttacher:loadDynamicMountGrabFromXML(xmlFile, key, entry)
404 local openMountType = getXMLString(self.xmlFile, key.."#openMountType")
405 entry.openMountType = Utils.getNoNil(DynamicMountUtil[openMountType], DynamicMountUtil.TYPE_FORK)
406
407 local closedMountType = getXMLString(self.xmlFile, key.."#closedMountType")
408 entry.closedMountType = Utils.getNoNil(DynamicMountUtil[closedMountType], DynamicMountUtil.TYPE_AUTO_ATTACH_XYZ)
409
410 entry.currentMountType = entry.openMountType
411
412 return true
413end

loadExtraDependentParts

Description
Definition
loadExtraDependentParts()
Code
483function DynamicMountAttacher:loadExtraDependentParts(superFunc, xmlFile, baseName, entry)
484 if not superFunc(self, xmlFile, baseName, entry) then
485 return false
486 end
487
488 entry.updateDynamicMountAttacher = getXMLBool(xmlFile, baseName.. ".dynamicMountAttacher#value")
489
490 return true
491end

onDelete

Description
Definition
onDelete()
Code
117function DynamicMountAttacher:onDelete()
118 local spec = self.spec_dynamicMountAttacher
119
120 if self.isServer then
121 for object,_ in pairs(spec.dynamicMountedObjects) do
122 object:unmountDynamic()
123 end
124 end
125 if spec.dynamicMountAttacherTrigger ~= nil then
126 removeTrigger(spec.dynamicMountAttacherTrigger.triggerNode)
127 end
128end

onLoad

Description
Definition
onLoad()
Code
55function DynamicMountAttacher:onLoad(savegame)
56 local spec = self.spec_dynamicMountAttacher
57
58 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.dynamicMountAttacher#index", "vehicle.dynamicMountAttacher#node") --FS17 to FS19
59
60 -- Allow mountable object to attach them selfs to us
61 spec.dynamicMountAttacherNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher#node"), self.i3dMappings)
62 spec.dynamicMountAttacherForceLimitScale = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.dynamicMountAttacher#forceLimitScale"), 1)
63 spec.dynamicMountAttacherTimeToMount = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.dynamicMountAttacher#timeToMount"), 1000)
64 spec.numObjectBits = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.dynamicMountAttacher#numObjectBits"), 5)
65
66 local grabKey = "vehicle.dynamicMountAttacher.grab"
67 if hasXMLProperty(self.xmlFile, grabKey) then
68 spec.dynamicMountAttacherGrab = {}
69 self:loadDynamicMountGrabFromXML(self.xmlFile, grabKey, spec.dynamicMountAttacherGrab)
70 end
71
72 if self.isServer then
73 spec.dynamicMountCollisionMasks = {}
74 local i=0
75 while true do
76 local key = string.format("vehicle.dynamicMountAttacher.mountCollisionMask(%d)", i)
77 if not hasXMLProperty(self.xmlFile, key) then
78 break
79 end
80
81 XMLUtil.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, key.."#index", key.."#node") --FS17 to FS19
82
83 local node = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, key.."#node"), self.i3dMappings)
84 local mask = getXMLInt(self.xmlFile, key.."#collisionMask")
85 if node ~= nil and mask ~= nil then
86 table.insert(spec.dynamicMountCollisionMasks, {node=node, mountedCollisionMask=mask, unmountedCollisionMask=getCollisionMask(node)})
87 end
88 i=i+1
89 end
90
91 local attacherTriggerTriggerNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher#triggerNode"), self.i3dMappings)
92 local attacherTriggerRootNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher#rootNode"), self.i3dMappings)
93 local attacherTriggerJointNode = I3DUtil.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher#jointNode"), self.i3dMappings)
94 if attacherTriggerTriggerNode ~= nil and attacherTriggerRootNode ~= nil and attacherTriggerJointNode ~= nil then
95 local forceAcceleration = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.dynamicMountAttacher#forceAcceleration"), 30)
96 addTrigger(attacherTriggerTriggerNode, "dynamicMountTriggerCallback", self)
97 local mountTypeString = Utils.getNoNil(getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher#mountType"), "TYPE_AUTO_ATTACH_XZ")
98 local mountType = Utils.getNoNil(DynamicMountUtil[mountTypeString], DynamicMountUtil.TYPE_AUTO_ATTACH_XZ)
99 spec.dynamicMountAttacherTrigger = {triggerNode=attacherTriggerTriggerNode, rootNode=attacherTriggerRootNode, jointNode=attacherTriggerJointNode, forceAcceleration=forceAcceleration, mountType = mountType, mountTypeClosed=mountTypeClosed, currentMountType=mountType}
100 end
101 spec.pendingDynamicMountObjects = {}
102 end
103
104 spec.isTriggerMountingAllowed = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.dynamicMountAttacher#isTriggerMountingAllowed"), true)
105 spec.animationName = getXMLString(self.xmlFile, "vehicle.dynamicMountAttacher.animation#name")
106 spec.animationSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.dynamicMountAttacher.animation#speed"), 1)
107 if spec.animationName ~= nil then
108 self:playAnimation(spec.animationName, spec.animationSpeed, self:getAnimationTime(spec.animationName), true)
109 end
110
111 spec.dynamicMountedObjects = {}
112 spec.dynamicMountedObjectsDirtyFlag = self:getNextDirtyFlag()
113end

onReadUpdateStream

Description
Definition
onReadUpdateStream()
Code
132function DynamicMountAttacher:onReadUpdateStream(streamId, timestamp, connection)
133 if connection:getIsServer() then
134 local spec = self.spec_dynamicMountAttacher
135
136 if streamReadBool(streamId) then
137 local sum = streamReadUIntN(streamId, spec.numObjectBits)
138
139 spec.dynamicMountedObjects = {}
140 for i=1, sum do
141 local object = NetworkUtil.readNodeObject(streamId)
142 if object ~= nil then
143 spec.dynamicMountedObjects[object] = object
144 end
145 end
146
147 self:setDynamicMountAnimationState(sum > 0)
148 end
149 end
150end

onUpdateTick

Description
Definition
onUpdateTick()
Code
180function DynamicMountAttacher:onUpdateTick(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
181 if self.isServer then
182 local spec = self.spec_dynamicMountAttacher
183
184 if self:getAllowDynamicMountObjects() then
185 if self.lastMoveTime + spec.dynamicMountAttacherTimeToMount < g_currentMission.time then
186 for object,_ in pairs(spec.pendingDynamicMountObjects) do
187 if spec.dynamicMountedObjects[object] == nil then
188 if object.lastMoveTime + spec.dynamicMountAttacherTimeToMount < g_currentMission.time then
189 local doAttach = false
190 if object.components ~= nil then
191 if object.getCanByMounted ~= nil then
192 doAttach = object:getCanByMounted()
193 elseif entityExists(object.components[1].node) then
194 doAttach = true
195 end
196 end
197 if object.nodeId ~= nil then
198 if object.getCanByMounted ~= nil then
199 doAttach = object:getCanByMounted()
200 elseif entityExists(object.nodeId) then
201 doAttach = true
202 end
203 end
204 if doAttach then
205 local trigger = spec.dynamicMountAttacherTrigger
206 local couldMount = object:mountDynamic(self, trigger.rootNode, trigger.jointNode, trigger.mountType, trigger.forceAcceleration)
207
208 if couldMount then
209 self:addDynamicMountedObject(object)
210 end
211 else
212 spec.pendingDynamicMountObjects[object] = nil
213 end
214 end
215 end
216 end
217 end
218 else
219 for object,_ in pairs(spec.dynamicMountedObjects) do
220 self:removeDynamicMountedObject(object, false)
221 object:unmountDynamic()
222 end
223 end
224
225 if spec.dynamicMountAttacherGrab ~= nil then
226 for object,_ in pairs(spec.dynamicMountedObjects) do
227 local usedMountType = spec.dynamicMountAttacherGrab.closedMountType
228
229 if self:getIsDynamicMountGrabOpened(spec.dynamicMountAttacherGrab) then
230 usedMountType = spec.dynamicMountAttacherGrab.openMountType
231 end
232
233 if spec.dynamicMountAttacherGrab.currentMountType ~= usedMountType then
234 spec.dynamicMountAttacherGrab.currentMountType = usedMountType
235
236 local x, y, z = getWorldTranslation(spec.dynamicMountAttacherNode)
237 setJointPosition(object.dynamicMountJointIndex, 1, x,y,z)
238 if usedMountType == DynamicMountUtil.TYPE_FORK then
239
240 setJointRotationLimit(object.dynamicMountJointIndex, 0, true, 0, 0)
241 setJointRotationLimit(object.dynamicMountJointIndex, 1, true, 0, 0)
242 setJointRotationLimit(object.dynamicMountJointIndex, 2, true, 0, 0)
243
244 if object.dynamicMountSingleAxisFreeX then
245 setJointTranslationLimit(object.dynamicMountJointIndex, 0, false, 0, 0)
246 else
247 setJointTranslationLimit(object.dynamicMountJointIndex, 0, true, -0.01, 0.01)
248 end
249 if object.dynamicMountSingleAxisFreeY then
250 setJointTranslationLimit(object.dynamicMountJointIndex, 1, false, 0, 0)
251 else
252 setJointTranslationLimit(object.dynamicMountJointIndex, 1, true, -0.01, 0.01)
253 end
254 setJointTranslationLimit(object.dynamicMountJointIndex, 2, false, 0, 0)
255 else
256 setJointRotationLimit(object.dynamicMountJointIndex, 0, true, 0, 0)
257 setJointRotationLimit(object.dynamicMountJointIndex, 1, true, 0, 0)
258 setJointRotationLimit(object.dynamicMountJointIndex, 2, true, 0, 0)
259
260 if usedMountType == DynamicMountUtil.TYPE_AUTO_ATTACH_XYZ or usedMountType == DynamicMountUtil.TYPE_FIX_ATTACH then
261 setJointTranslationLimit(object.dynamicMountJointIndex, 0, true, -0.01, 0.01)
262 setJointTranslationLimit(object.dynamicMountJointIndex, 1, true, -0.01, 0.01)
263 setJointTranslationLimit(object.dynamicMountJointIndex, 2, true, -0.01, 0.01)
264 elseif usedMountType == DynamicMountUtil.TYPE_AUTO_ATTACH_XZ then
265 setJointTranslationLimit(object.dynamicMountJointIndex, 0, true, -0.01, 0.01)
266 setJointTranslationLimit(object.dynamicMountJointIndex, 1, false, 0, 0)
267 setJointTranslationLimit(object.dynamicMountJointIndex, 2, true, -0.01, 0.01)
268 elseif usedMountType == DynamicMountUtil.TYPE_AUTO_ATTACH_Y then
269 setJointTranslationLimit(object.dynamicMountJointIndex, 0, false, 0, 0)
270 setJointTranslationLimit(object.dynamicMountJointIndex, 1, true, -0.01, 0.01)
271 setJointTranslationLimit(object.dynamicMountJointIndex, 2, false, 0, 0)
272 end
273 end
274 end
275 end
276 end
277 end
278end

onWriteUpdateStream

Description
Definition
onWriteUpdateStream()
Code
154function DynamicMountAttacher:onWriteUpdateStream(streamId, connection, dirtyMask)
155 if not connection:getIsServer() then
156 local spec = self.spec_dynamicMountAttacher
157
158 if streamWriteBool(streamId, bitAND(dirtyMask, spec.dynamicMountedObjectsDirtyFlag) ~= 0) then
159 local num = 0
160 for object,_ in pairs(spec.dynamicMountedObjects) do
161 num = num + 1
162 end
163 streamWriteUIntN(streamId, num, spec.numObjectBits)
164
165 local objectIndex = 0
166 for object,_ in pairs(spec.dynamicMountedObjects) do
167 objectIndex = objectIndex + 1
168 if objectIndex <= num then
169 NetworkUtil.writeNodeObject(streamId, object)
170 else
171 g_logManager:xmlWarning(self.configFileName, "Not enough bits to send all mounted objects. Please increase '%s'", "vehicle.dynamicMountAttacher#numObjectBits")
172 end
173 end
174 end
175 end
176end

prerequisitesPresent

Description
Definition
prerequisitesPresent()
Code
15function DynamicMountAttacher.prerequisitesPresent(specializations)
16 return true
17end

registerEventListeners

Description
Definition
registerEventListeners()
Code
44function DynamicMountAttacher.registerEventListeners(vehicleType)
45 SpecializationUtil.registerEventListener(vehicleType, "onLoad", DynamicMountAttacher)
46 SpecializationUtil.registerEventListener(vehicleType, "onDelete", DynamicMountAttacher)
47 SpecializationUtil.registerEventListener(vehicleType, "onReadUpdateStream", DynamicMountAttacher)
48 SpecializationUtil.registerEventListener(vehicleType, "onWriteUpdateStream", DynamicMountAttacher)
49 SpecializationUtil.registerEventListener(vehicleType, "onUpdateTick", DynamicMountAttacher)
50 SpecializationUtil.registerEventListener(vehicleType, "onPreAttachImplement", DynamicMountAttacher)
51end

registerFunctions

Description
Definition
registerFunctions()
Code
21function DynamicMountAttacher.registerFunctions(vehicleType)
22 SpecializationUtil.registerFunction(vehicleType, "getAllowDynamicMountObjects", DynamicMountAttacher.getAllowDynamicMountObjects)
23 SpecializationUtil.registerFunction(vehicleType, "dynamicMountTriggerCallback", DynamicMountAttacher.dynamicMountTriggerCallback)
24 SpecializationUtil.registerFunction(vehicleType, "addDynamicMountedObject", DynamicMountAttacher.addDynamicMountedObject)
25 SpecializationUtil.registerFunction(vehicleType, "removeDynamicMountedObject", DynamicMountAttacher.removeDynamicMountedObject)
26 SpecializationUtil.registerFunction(vehicleType, "setDynamicMountAnimationState", DynamicMountAttacher.setDynamicMountAnimationState)
27 SpecializationUtil.registerFunction(vehicleType, "getAllowDynamicMountFillLevelInfo", DynamicMountAttacher.getAllowDynamicMountFillLevelInfo)
28 SpecializationUtil.registerFunction(vehicleType, "loadDynamicMountGrabFromXML", DynamicMountAttacher.loadDynamicMountGrabFromXML)
29 SpecializationUtil.registerFunction(vehicleType, "getIsDynamicMountGrabOpened", DynamicMountAttacher.getIsDynamicMountGrabOpened)
30end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
34function DynamicMountAttacher.registerOverwrittenFunctions(vehicleType)
35 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getFillLevelInformation", DynamicMountAttacher.getFillLevelInformation)
36 SpecializationUtil.registerOverwrittenFunction(vehicleType, "addNodeObjectMapping", DynamicMountAttacher.addNodeObjectMapping)
37 SpecializationUtil.registerOverwrittenFunction(vehicleType, "removeNodeObjectMapping", DynamicMountAttacher.removeNodeObjectMapping)
38 SpecializationUtil.registerOverwrittenFunction(vehicleType, "loadExtraDependentParts", DynamicMountAttacher.loadExtraDependentParts)
39 SpecializationUtil.registerOverwrittenFunction(vehicleType, "updateExtraDependentParts", DynamicMountAttacher.updateExtraDependentParts)
40end

removeDynamicMountedObject

Description
Definition
removeDynamicMountedObject()
Code
298function DynamicMountAttacher:removeDynamicMountedObject(object, isDeleting)
299 local spec = self.spec_dynamicMountAttacher
300
301 spec.dynamicMountedObjects[object] = nil
302 if isDeleting then
303 spec.pendingDynamicMountObjects[object] = nil
304 end
305
306 if next(spec.dynamicMountedObjects) == nil and next(spec.pendingDynamicMountObjects) == nil then
307 for _, info in pairs(spec.dynamicMountCollisionMasks) do
308 setCollisionMask(info.node, info.unmountedCollisionMask)
309 end
310 end
311
312 self:setDynamicMountAnimationState(false)
313
314 self:raiseDirtyFlags(spec.dynamicMountedObjectsDirtyFlag)
315end

removeNodeObjectMapping

Description
Definition
removeNodeObjectMapping()
Code
472function DynamicMountAttacher:removeNodeObjectMapping(superFunc, list)
473 superFunc(self, list)
474
475 local spec = self.spec_dynamicMountAttacher
476 if spec.dynamicMountAttacherTrigger ~= nil and spec.dynamicMountAttacherTrigger.triggerNode ~= nil then
477 list[spec.dynamicMountAttacherTrigger.triggerNode] = nil
478 end
479end

setDynamicMountAnimationState

Description
Definition
setDynamicMountAnimationState()
Code
319function DynamicMountAttacher:setDynamicMountAnimationState(state)
320 local spec = self.spec_dynamicMountAttacher
321
322 if state then
323 self:playAnimation(spec.animationName, spec.animationSpeed, self:getAnimationTime(spec.animationName), true)
324 else
325 self:playAnimation(spec.animationName, -spec.animationSpeed, self:getAnimationTime(spec.animationName), true)
326 end
327end

updateDebugValues

Description
Definition
updateDebugValues()
Code
521function DynamicMountAttacher:updateDebugValues(values)
522 local spec = self.spec_dynamicMountAttacher
523
524 local timeToMount = self.lastMoveTime + spec.dynamicMountAttacherTimeToMount - g_currentMission.time
525 table.insert(values, {name="timeToMount:", value=string.format("%d", timeToMount)})
526
527 for object, _ in pairs(spec.pendingDynamicMountObjects) do
528 table.insert(values, {name="pendingDynamicMountObject:", value=string.format("%s timeToMount: %d", object.configFileName or object, math.max(object.lastMoveTime + spec.dynamicMountAttacherTimeToMount - g_currentMission.time, 0))})
529 end
530
531 for object, _ in pairs(spec.dynamicMountedObjects) do
532 table.insert(values, {name="dynamicMountedObjects:", value=string.format("%s", object.configFileName or object)})
533 end
534
535 table.insert(values, {name="allowMountObjects:", value=string.format("%s", self:getAllowDynamicMountObjects())})
536
537 if spec.dynamicMountAttacherGrab ~= nil then
538 table.insert(values, {name="grabOpened:", value=string.format("%s", self:getIsDynamicMountGrabOpened(spec.dynamicMountAttacherGrab))})
539 end
540end

updateExtraDependentParts

Description
Definition
updateExtraDependentParts()
Code
495function DynamicMountAttacher:updateExtraDependentParts(superFunc, part, dt)
496 superFunc(self, part, dt)
497
498 if self.isServer then
499 if part.updateDynamicMountAttacher ~= nil and part.updateDynamicMountAttacher then
500 local spec = self.spec_dynamicMountAttacher
501 for object,_ in pairs(spec.dynamicMountedObjects) do
502 setJointFrame(object.dynamicMountJointIndex, 0, object.dynamicMountJointNode)
503 end
504 end
505 end
506end