Sprache Deutsch Language English

Script Dokumentation LS 2015 - DynamicMountAttacher (Patch 1.3)

Script Dokumentation Übersicht

scripts/vehicles/specializations/DynamicMountAttacher.lua

Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1--
2-- DynamicMountAttacher
3-- Class for vehicle which can dynamically mount objects (e.g. bales and pallets)
4--
5-- @author Stefan Geiger
6-- @date 12/09/11
7--
8-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
9
10DynamicMountAttacher = {};
11
12function DynamicMountAttacher.prerequisitesPresent(specializations)
13 return true;
14end;
15
16function DynamicMountAttacher:load(xmlFile)
17
18 self.dynamicMountTriggerCallback = DynamicMountAttacher.dynamicMountTriggerCallback;
19 self.addDynamicMountedObject = DynamicMountAttacher.addDynamicMountedObject;
20 self.removeDynamicMountedObject = DynamicMountAttacher.removeDynamicMountedObject;
21
22 -- Allow mountable object to attach them selfs to us
23 self.dynamicMountAttacherNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.dynamicMountAttacher#index"));
24 self.dynamicMountAttacherForceLimitScale = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.dynamicMountAttacher#forceLimitScale"), 1);
25 self.dynamicMountAttacherTimeToMount = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.dynamicMountAttacher#timeToMount"), 1000);
26
27 if self.isServer then
28 local attacherTriggerTriggerNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.dynamicMountAttacherTrigger#triggerNode"));
29 local attacherTriggerRootNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.dynamicMountAttacherTrigger#rootNode"));
30 local attacherTriggerJointNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.dynamicMountAttacherTrigger#jointNode"));
31 if attacherTriggerTriggerNode ~= nil and attacherTriggerRootNode ~= nil and attacherTriggerJointNode ~= nil then
32 local forceAcceleration = Utils.getNoNil(getXMLFloat(xmlFile, "vehicle.dynamicMountAttacherTrigger#forceAcceleration"), 30);
33 addTrigger(attacherTriggerTriggerNode, "dynamicMountTriggerCallback", self);
34 local mountTypeString = Utils.getNoNil(getXMLString(xmlFile, "vehicle.dynamicMountAttacherTrigger#mountType"), "TYPE_AUTO_ATTACH_XZ");
35 local mountType = Utils.getNoNil(DynamicMountUtil[mountTypeString], DynamicMountUtil.TYPE_AUTO_ATTACH_XZ);
36 self.dynamicMountAttacherTrigger = {triggerNode=attacherTriggerTriggerNode, rootNode=attacherTriggerRootNode, jointNode=attacherTriggerJointNode, forceAcceleration=forceAcceleration, mountType = mountType};
37 end
38 self.dynamicMountedObjects = {};
39 self.pendingDynamicMountObjects = {};
40 end
41end;
42
43function DynamicMountAttacher:delete()
44 if self.isServer then
45 for object,_ in pairs(self.dynamicMountedObjects) do
46 object:unmountDynamic();
47 end
48 end
49 if self.dynamicMountAttacherTrigger ~= nil then
50 removeTrigger(self.dynamicMountAttacherTrigger.triggerNode);
51 end
52end;
53
54function DynamicMountAttacher:mouseEvent(posX, posY, isDown, isUp, button)
55end;
56
57function DynamicMountAttacher:keyEvent(unicode, sym, modifier, isDown)
58end;
59
60function DynamicMountAttacher:update(dt)
61end;
62
63function DynamicMountAttacher:updateTick(dt)
64 if self.isServer then
65 for object,state in pairs(self.pendingDynamicMountObjects) do
66 if self.dynamicMountedObjects[object] == nil then
67 if object.lastMoveTime + self.dynamicMountAttacherTimeToMount < g_currentMission.time then
68 local doAttach = false;
69 if object.components ~= nil then
70 if entityExists(object.components[1].node) then
71 doAttach = true;
72 end;
73 end;
74 if object.nodeId ~= nil then
75 if entityExists(object.nodeId) then
76 doAttach = true;
77 end;
78 end;
79 if doAttach then
80 local trigger = self.dynamicMountAttacherTrigger;
81 if object:mountDynamic(self, trigger.rootNode, trigger.jointNode, trigger.mountType, trigger.forceAcceleration) then
82 self:addDynamicMountedObject(object);
83 end
84 else
85 self.pendingDynamicMountObjects[object] = nil;
86 end;
87 end
88 end
89 end
90 end
91end;
92
93function DynamicMountAttacher:draw()
94end;
95
96function DynamicMountAttacher:addDynamicMountedObject(object)
97 self.dynamicMountedObjects[object] = object;
98end
99
100function DynamicMountAttacher:removeDynamicMountedObject(object, isDeleting)
101 self.dynamicMountedObjects[object] = nil;
102 if isDeleting then
103 self.pendingDynamicMountObjects[object] = nil;
104 end
105end
106
107function DynamicMountAttacher:dynamicMountTriggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
108 if onEnter then
109 local object = g_currentMission:getNodeObject(otherActorId);
110 if object == nil then
111 object = g_currentMission.nodeToVehicle[otherActorId];
112 end;
113 if object == self:getRootAttacherVehicle() or object == self.attacherVehicle then
114 object = nil;
115 end;
116 if object ~= nil and object ~= self and object.getSupportsMountDynamic ~= nil and object:getSupportsMountDynamic() and object.lastMoveTime ~= nil then
117 self.pendingDynamicMountObjects[object] = Utils.getNoNil(self.pendingDynamicMountObjects[object], 0) + 1;
118 end
119 elseif onLeave then
120 local object = g_currentMission:getNodeObject(otherActorId);
121 if object == nil then
122 object = g_currentMission.nodeToVehicle[otherActorId];
123 end;
124 if object ~= nil then
125 if self.pendingDynamicMountObjects[object] ~= nil then
126 local count = self.pendingDynamicMountObjects[object]-1;
127 if count == 0 then
128 self.pendingDynamicMountObjects[object] = nil;
129
130 if self.dynamicMountedObjects[object] ~= nil then
131 self:removeDynamicMountedObject(object, false);
132 object:unmountDynamic();
133 end
134 else
135 self.pendingDynamicMountObjects[object] = count;
136 end
137 end
138 end
139 end
140end;
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
Script Dokumentation Übersicht