LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

DynamicallyLoadedParts

Description
Specialization for loading and linking external i3d files/assets (e.g. wheelChocks) to a vehicle
Functions

loadDynamicallyPartsFromXML

Description
Load dynamically loaded parts from xml and link them to target
Definition
loadDynamicallyPartsFromXML(table dynamicallyLoadedPart, integer xmlFile, string key)
Arguments
tabledynamicallyLoadedPartdynamically loaded part
integerxmlFileid of xml object
stringkeykey
Return Values
booleansuccesssuccess
Code
70function DynamicallyLoadedParts:loadDynamicallyPartsFromXML(dynamicallyLoadedPart, xmlFile, key)
71 local filename = getXMLString(xmlFile, key .. "#filename")
72 if filename ~= nil then
73 dynamicallyLoadedPart.filename = filename
74 local i3dNode = g_i3DManager:loadSharedI3DFile(filename, self.baseDirectory, false, false, false)
75 if i3dNode ~= 0 then
76 local node = I3DUtil.indexToObject(i3dNode, Utils.getNoNil(getXMLString(xmlFile, key .. "#node"), "0|0"), self.i3dMappings)
77 local linkNode = I3DUtil.indexToObject(self.components, Utils.getNoNil(getXMLString(xmlFile, key .. "#linkNode"), "0>"), self.i3dMappings)
78 if linkNode == nil then
79 g_logManager:xmlWarning(self.configFileName, "Failed to load dynamicallyLoadedPart '%s'. Unable to find linkNode", key)
80 return false
81 end
82
83 local x,y,z = StringUtil.getVectorFromString(getXMLString(xmlFile, key .. "#position"))
84 if x ~= nil and y ~= nil and z ~= nil then
85 setTranslation(node, x,y,z)
86 end
87
88 local rotationNode = I3DUtil.indexToObject(i3dNode, getXMLString(xmlFile, key .. "#rotationNode"), self.i3dMappings) or node
89 local rotX, rotY, rotZ = StringUtil.getVectorFromString(getXMLString(xmlFile, key .. "#rotation"))
90 if rotX ~= nil and rotY ~= nil and rotZ ~= nil then
91 rotX = MathUtil.degToRad(rotX)
92 rotY = MathUtil.degToRad(rotY)
93 rotZ = MathUtil.degToRad(rotZ)
94 setRotation(rotationNode, rotX, rotY, rotZ)
95 end
96
97 local shaderParameterName = getXMLString(xmlFile, key .. "#shaderParameterName")
98 local x,y,z,w = StringUtil.getVectorFromString(getXMLString(xmlFile, key .. "#shaderParameter"))
99 if shaderParameterName ~= nil and x ~= nil and y ~= nil and z ~= nil and w ~= nil then
100 setShaderParameter(node, shaderParameterName, x, y, z, w, false)
101 end
102
103 link(linkNode, node)
104 delete(i3dNode)
105 return true
106 end
107 end
108
109 return false
110end

onDelete

Description
Definition
onDelete()
Code
54function DynamicallyLoadedParts:onDelete()
55 local spec = self.spec_dynamicallyLoadedParts
56
57 for _, part in pairs(spec.parts) do
58 if part.filename ~= nil then
59 g_i3DManager:releaseSharedI3DFile(part.filename, self.baseDirectory, true)
60 end
61 end
62end

onLoad

Description
Definition
onLoad()
Code
34function DynamicallyLoadedParts:onLoad(savegame)
35 local spec = self.spec_dynamicallyLoadedParts
36
37 spec.parts = {}
38 local i=0
39 while true do
40 local baseName = string.format("vehicle.dynamicallyLoadedParts.dynamicallyLoadedPart(%d)", i)
41 if not hasXMLProperty(self.xmlFile, baseName) then
42 break
43 end
44 local part = {}
45 if self:loadDynamicallyPartsFromXML(part, self.xmlFile, baseName) then
46 table.insert(spec.parts, part)
47 end
48 i = i + 1
49 end
50end

prerequisitesPresent

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

registerEventListeners

Description
Definition
registerEventListeners()
Code
27function DynamicallyLoadedParts.registerEventListeners(vehicleType)
28 SpecializationUtil.registerEventListener(vehicleType, "onLoad", DynamicallyLoadedParts)
29 SpecializationUtil.registerEventListener(vehicleType, "onDelete", DynamicallyLoadedParts)
30end

registerFunctions

Description
Definition
registerFunctions()
Code
21function DynamicallyLoadedParts.registerFunctions(vehicleType)
22 SpecializationUtil.registerFunction(vehicleType, "loadDynamicallyPartsFromXML", DynamicallyLoadedParts.loadDynamicallyPartsFromXML)
23end