LUADOC - Farming Simulator 17

Printable Version

MountableObject

Description
Class for mountable objects
Parent
PhysicsObject
Functions

new

Description
Creating mountable object
Definition
new(boolean isServer, boolean isClient, table customMt)
Arguments
booleanisServeris server
booleanisClientis client
tablecustomMtcustomMt
Return Values
tableinstanceInstance of object
Code
18function MountableObject:new(isServer, isClient, customMt)
19 local mt = customMt;
20 if mt == nil then
21 mt = MountableObject_mt;
22 end;
23
24 local self = PhysicsObject:new(isServer, isClient, mt);
25 self.dynamicMountSingleAxisFreeX = false;
26 self.dynamicMountSingleAxisFreeY = false;
27
28 self.lastMoveTime = -100000;
29 return self;
30end;

delete

Description
Deleting mountable object
Definition
delete()
Code
34function MountableObject:delete()
35 if self.dynamicMountTriggerId ~= nil then
36 removeTrigger(self.dynamicMountTriggerId);
37 end
38 if self.dynamicMountJointIndex ~= nil then
39 removeJointBreakReport(self.dynamicMountJointIndex);
40 removeJoint(self.dynamicMountJointIndex);
41 end
42 if self.dynamicMountObject ~= nil then
43 self.dynamicMountObject:removeDynamicMountedObject(self, true);
44 end
45 if self.mountObject ~= nil and self.mountObject.removeMountedObject ~= nil then
46 self.mountObject:removeMountedObject(self, true);
47 end
48 MountableObject:superClass().delete(self);
49end;

getAllowsAutoDelete

Description
Get allows auto delete
Definition
getAllowsAutoDelete()
Return Values
booleanallowsAutoDeleteallows auto delete
Code
54function MountableObject:getAllowsAutoDelete()
55 return self.mountObject == nil and MountableObject:superClass().getAllowsAutoDelete(self);
56end

testScope

Description
Test scope
Definition
testScope(float x, float y, float z, float coeff)
Arguments
floatxx position
floatyy position
floatzz position
floatcoeffcoeff
Return Values
booleaninScopein scope
Code
73function MountableObject:testScope(x,y,z, coeff)
74 if self.mountObject ~= nil then
75 return self.mountObject:testScope(x,y,z, coeff);
76 else
77 return MountableObject:superClass().testScope(self, x,y,z, coeff);
78 end;
79end;

updateTick

Description
updateTick
Definition
updateTick(float dt)
Arguments
floatdttime since last call in ms
Code
92function MountableObject:updateTick(dt)
93 if self.isServer then
94 if self:updateMove() then
95 self.lastMoveTime = g_currentMission.time;
96 end;
97 end;
98end;

mount

Description
Mount mountable object to target object
Definition
mount(table object, integer node, float x, float y, float z, float rx, float ry, float rz)
Arguments
tableobjecttarget object
integernodetarget node id
floatxx position
floatyz position
floatzz position
floatrxrx rotation
floatryry rotation
floatrzrz rotation
Code
110function MountableObject:mount(object, node, x,y,z, rx,ry,rz)
111 -- set isDelete = true to remove mountableObject from pendingDynamicMountObjects (no delete leave callback)
112 self:unmountDynamic(true);
113
114 if self.mountObject == nil then
115 removeFromPhysics(self.nodeId);
116 end;
117 link(node, self.nodeId);
118 local rx,ry,rz,rw = mathEulerToQuaternion(rx,ry,rz);
119 self:setPose(x,y,z, rx,ry,rz,rw);
120 self.mountObject = object;
121end;

unmount

Description
Unmount mountable object
Definition
unmount()
Return Values
booleansuccesssuccess
Code
126function MountableObject:unmount()
127 if self.mountObject ~= nil then
128 self.mountObject = nil;
129 local x,y,z = getWorldTranslation(self.nodeId);
130 local rx,ry,rz,rw = getWorldQuaternion(self.nodeId);
131
132 link(getRootNode(), self.nodeId);
133 self:setPose(x,y,z, rx,ry,rz,rw);
134 addToPhysics(self.nodeId);
135 return true;
136 end
137 return false;
138end;

mountDynamic

Description
Mount mountable object dynamically to target object
Definition
mountDynamic(table object, integer objectActorId, integer jointNode, integer mountType, float forceAcceleration)
Arguments
tableobjecttarget object
integerobjectActorIdtarget actor id
integerjointNodejoint node id
integermountTypemount type
floatforceAccelerationforce acceleration
Return Values
booleansuccesssuccess
Code
148function MountableObject:mountDynamic(object, objectActorId, jointNode, mountType, forceAcceleration)
149 if not self:getSupportsMountDynamic() or self.mountObject ~= nil then
150 return false;
151 end
152 return DynamicMountUtil.mountDynamic(self, self.nodeId, object, objectActorId, jointNode, mountType, forceAcceleration*self.dynamicMountForceLimitScale);
153end

unmountDynamic

Description
Unmount mountable object
Definition
unmountDynamic(boolean isDeleting)
Arguments
booleanisDeletingis deleting
Code
158function MountableObject:unmountDynamic(isDelete)
159 DynamicMountUtil.unmountDynamic(self, isDelete);
160end

setNodeId

Description
Set node id
Definition
setNodeId(integer nodeId)
Arguments
integernodeIdnode Id
Code
169function MountableObject:setNodeId(nodeId)
170 MountableObject:superClass().setNodeId(self, nodeId);
171
172 if self.isServer then
173 self.dynamicMountTriggerId = Utils.indexToObject(nodeId, getUserAttribute(nodeId, "dynamicMountTriggerIndex"));
174 if self.dynamicMountTriggerId ~= nil then
175 addTrigger(self.dynamicMountTriggerId, "dynamicMountTriggerCallback", self);
176 end
177 self.dynamicMountTriggerForceAcceleration = Utils.getNoNil(tonumber(getUserAttribute(nodeId, "dynamicMountTriggerForceAcceleration")), 4);
178 self.dynamicMountForceLimitScale = Utils.getNoNil(tonumber(getUserAttribute(nodeId, "dynamicMountForceLimitScale")), 1);
179 self.dynamicMountSingleAxisFreeY = getUserAttribute(nodeId, "dynamicMountSingleAxisFreeY") == true;
180 self.dynamicMountSingleAxisFreeX = getUserAttribute(nodeId, "dynamicMountSingleAxisFreeX") == true;
181 end
182end;

dynamicMountTriggerCallback

Description
Trigger callback
Definition
dynamicMountTriggerCallback(integer triggerId, integer otherId, boolean onEnter, boolean onLeave, boolean onStay, integer otherShapeId)
Arguments
integertriggerIdid of trigger
integerotherIdid of actor
booleanonEnteron enter
booleanonLeaveon leave
booleanonStayon stay
integerotherShapeIdid of other actor
Code
192function MountableObject:dynamicMountTriggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
193 if onEnter then
194 if self.mountObject == nil then
195 local vehicle = g_currentMission.nodeToVehicle[otherActorId];
196 if vehicle ~= nil and vehicle.dynamicMountAttacherNode ~= nil then
197 if self.dynamicMountObjectActorId == nil then
198 self:mountDynamic(vehicle, otherActorId, vehicle.dynamicMountAttacherNode, DynamicMountUtil.TYPE_FORK, self.dynamicMountTriggerForceAcceleration*vehicle.dynamicMountAttacherForceLimitScale);
199 self.dynamicMountObjectTriggerCount = 1;
200 elseif otherActorId ~= self.dynamicMountObjectActorId and self.dynamicMountObjectTriggerCount == nil then
201 -- we are already attached to another actor, but not from our mount trigger (e.g. a bale trailer)
202 self:unmountDynamic();
203 self:mountDynamic(vehicle, otherActorId, vehicle.dynamicMountAttacherNode, DynamicMountUtil.TYPE_FORK, self.dynamicMountTriggerForceAcceleration*vehicle.dynamicMountAttacherForceLimitScale);
204 self.dynamicMountObjectTriggerCount = 1;
205 elseif otherActorId == self.dynamicMountObjectActorId then
206 if self.dynamicMountObjectTriggerCount ~= nil then
207 self.dynamicMountObjectTriggerCount = self.dynamicMountObjectTriggerCount+1;
208 end
209 end
210 end
211 end
212 elseif onLeave then
213 if otherActorId == self.dynamicMountObjectActorId and self.dynamicMountObjectTriggerCount ~= nil then
214 self.dynamicMountObjectTriggerCount = self.dynamicMountObjectTriggerCount-1;
215 if self.dynamicMountObjectTriggerCount == 0 then
216 self:unmountDynamic();
217 self.dynamicMountObjectTriggerCount = nil;
218 end
219 end
220 end
221end;

onDynamicMountJointBreak

Description
Called if joint breaks
Definition
onDynamicMountJointBreak(integer jointIndex, integer breakingImpulse)
Arguments
integerjointIndexindex of joint
integerbreakingImpulsebreaking impulse
Code
227function MountableObject:onDynamicMountJointBreak(jointIndex, breakingImpulse)
228 if jointIndex == self.dynamicMountJointIndex then
229 self:unmountDynamic();
230 end
231 -- Do not delete the joint internally, we already deleted it with unmountDynamic
232 return false;
233end

getMeshNodes

Description
Get mesh nodes
Definition
getMeshNodes()
Return Values
nilnilnil
Code
238function MountableObject:getMeshNodes()
239 return nil;
240end;