LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

ManureSensorLinkageData

Functions

delete

Description
Definition
delete()
Code
37function ManureSensorLinkageData:delete()
38 for i=1, #self.sensorData do
39 delete(self.sensorData[i].node)
40 end
41
42 self.sensorData = {}
43 self.linkageData = {}
44end

getClonedManureSensorNode

Description
Definition
getClonedManureSensorNode()
Code
144function ManureSensorLinkageData:getClonedManureSensorNode(typeName)
145 for i=1, #self.sensorData do
146 local sensorData = self.sensorData[i]
147 if sensorData.type:upper() == typeName:upper() then
148 local clonedData = table.copy(sensorData, 10)
149 clonedData.node = clone(sensorData.node, false, false, false)
150 setTranslation(clonedData.node, 0, 0, 0)
151 setRotation(clonedData.node, 0, 0, 0)
152 setScale(clonedData.node, 1, 1, 1)
153
154 return clonedData
155 end
156 end
157end

getManureSensorLinkageData

Description
Definition
getManureSensorLinkageData()
Code
133function ManureSensorLinkageData:getManureSensorLinkageData(configFileName)
134 for i=1, #self.linkageData do
135 local vehicleData = self.linkageData[i]
136 if configFileName:endsWith(vehicleData.filename) then
137 return vehicleData
138 end
139 end
140end

loadFromXML

Description
Definition
loadFromXML()
Code
49function ManureSensorLinkageData:loadFromXML(_, _, baseDirectory, configFileName, mapFilename)
50 if not self.dataLoaded then
51 self:loadLinkageData()
52 end
53end

loadLinkageData

Description
Definition
loadLinkageData()
Code
57function ManureSensorLinkageData:loadLinkageData(loadVehicleData, loadSensorData)
58 local filename = Utils.getFilename("ManureSensorLinkageData.xml", ManureSensorLinkageData.BASE_DIRECTORY)
59
60 local xmlFile = XMLFile.load("ManureSensorLinkageData", filename, ManureSensorLinkageData.xmlSchema)
61 if xmlFile ~= nil then
62 self.configurationPrice = xmlFile:getValue("manureSensorLinkageData.configuration#price", 0)
63
64 if loadVehicleData ~= false then
65 self.linkageData = {}
66 xmlFile:iterate("manureSensorLinkageData.vehicles.vehicle", function(index, key)
67 local vehicleData = {}
68 vehicleData.filename = xmlFile:getValue(key .. "#filename")
69 if vehicleData.filename ~= nil then
70 vehicleData.linkNodes = {}
71
72 xmlFile:iterate(key .. ".linkNode", function(_, linkNodeKey)
73 local linkNode = {}
74 linkNode.nodeName = xmlFile:getValue(linkNodeKey .. "#node")
75 linkNode.typeName = xmlFile:getValue(linkNodeKey .. "#type", "DEFAULT"):upper()
76 linkNode.translation = xmlFile:getValue(linkNodeKey .. "#translation", "0 0 0", true)
77 linkNode.rotation = xmlFile:getValue(linkNodeKey .. "#rotation", "0 0 0", true)
78 linkNode.scale = xmlFile:getValue(linkNodeKey .. "#scale", "1 1 1", true)
79
80 table.insert(vehicleData.linkNodes, linkNode)
81 end)
82 end
83
84 table.insert(self.linkageData, vehicleData)
85 end)
86 end
87
88 if loadSensorData ~= false then
89 local sensorsFilename = xmlFile:getValue("manureSensorLinkageData.sensors#filename")
90 if sensorsFilename ~= nil then
91 sensorsFilename = Utils.getFilename(sensorsFilename, ManureSensorLinkageData.BASE_DIRECTORY)
92 g_i3DManager:loadI3DFileAsync(sensorsFilename, true, true, ManureSensorLinkageData.onSensorDataLoaded, self, {xmlFile})
93 else
94 xmlFile:delete()
95 end
96 else
97 xmlFile:delete()
98 end
99 end
100
101 self.dataLoaded = true
102
103 return true
104end

onSensorDataLoaded

Description
Definition
onSensorDataLoaded()
Code
108function ManureSensorLinkageData:onSensorDataLoaded(i3dNode, failedReason, args)
109 local xmlFile = unpack(args)
110 if i3dNode ~= 0 then
111 xmlFile:iterate("manureSensorLinkageData.sensors.sensor", function(index, key)
112 local sensorData = {}
113 sensorData.node = xmlFile:getValue(key .. "#node", nil, i3dNode)
114 if sensorData.node ~= nil then
115 sensorData.type = xmlFile:getValue(key .. "#type", "DEFAULT")
116
117 table.insert(self.sensorData, sensorData)
118 end
119 end)
120
121 for i=1, #self.sensorData do
122 unlink(self.sensorData[i].node)
123 end
124
125 delete(i3dNode)
126 end
127
128 xmlFile:delete()
129end

overwriteGameFunctions

Description
Definition
overwriteGameFunctions()
Code
161function ManureSensorLinkageData:overwriteGameFunctions(pfModule)
162 -- Reload linkage data while reloading vehicles to get the latest data
163 pfModule:overwriteGameFunction(FSBaseMission, "consoleCommandReloadVehicle", function(superFunc, mission, resetVehicle, radius)
164 self:loadLinkageData(true, false)
165
166 return superFunc(mission, resetVehicle, radius)
167 end)
168
169 pfModule:overwriteGameFunction(StoreItemUtil, "getConfigurationsFromXML", function(superFunc, xmlFile, key, baseDir, customEnvironment, isMod, storeItem)
170 local configurations, defaultConfigurationIds = superFunc(xmlFile, key, baseDir, customEnvironment, isMod, storeItem)
171
172 if not self.dataLoaded then
173 self:loadLinkageData(true)
174 end
175 local vehicleData = self:getManureSensorLinkageData(xmlFile.filename)
176 if vehicleData ~= nil then
177 if configurations == nil then
178 configurations = {}
179 end
180
181 if defaultConfigurationIds == nil then
182 defaultConfigurationIds = {}
183 end
184
185 configurations["manureSensor"] = {
186 [1] = {["isDefault"] = true,
187 ["name"] = g_i18n:getText("configuration_valueNo"),
188 ["index"] = 1,
189 ["dailyUpkeep"] = 0,
190 ["saveId"] = "1",
191 ["isSelectable"] = true,
192 ["price"] = 0,
193 ["nameCompareParams"] = {},
194 },
195 [2] = {["isDefault"] = false,
196 ["name"] = g_i18n:getText("configuration_valueYes"),
197 ["index"] = 2,
198 ["dailyUpkeep"] = 0,
199 ["saveId"] = "2",
200 ["isSelectable"] = true,
201 ["price"] = self.configurationPrice,
202 ["nameCompareParams"] = {},
203 },
204 }
205 end
206
207
208 return configurations, defaultConfigurationIds
209 end)
210end

registerXMLPaths

Description
Definition
registerXMLPaths()
Code
214function ManureSensorLinkageData:registerXMLPaths(schema)
215 schema:register(XMLValueType.STRING, "manureSensorLinkageData.sensors#filename", "Link to i3d filename containing the sensors")
216 schema:register(XMLValueType.STRING, "manureSensorLinkageData.sensors.sensor(?)#type", "Type of sensor (DEFAULT)")
217 schema:register(XMLValueType.NODE_INDEX, "manureSensorLinkageData.sensors.sensor(?)#node", "Path to sensor node")
218
219 schema:register(XMLValueType.STRING, "manureSensorLinkageData.vehicles.vehicle(?)#filename", "Last part of vehicle filename")
220 schema:register(XMLValueType.STRING, "manureSensorLinkageData.vehicles.vehicle(?).linkNode(?)#node", "Name of node in i3d mapping")
221 schema:register(XMLValueType.STRING, "manureSensorLinkageData.vehicles.vehicle(?).linkNode(?)#type", "Type of node to link (DEFAULT)")
222 schema:register(XMLValueType.VECTOR_TRANS, "manureSensorLinkageData.vehicles.vehicle(?).linkNode(?)#translation", "Translation offset from node", "0 0 0")
223 schema:register(XMLValueType.VECTOR_ROT, "manureSensorLinkageData.vehicles.vehicle(?).linkNode(?)#rotation", "Rotation offset from node", "0 0 0")
224 schema:register(XMLValueType.VECTOR_SCALE, "manureSensorLinkageData.vehicles.vehicle(?).linkNode(?)#scale", "Scale of sensor node", "1 1 1")
225
226 schema:register(XMLValueType.FLOAT, "manureSensorLinkageData.configuration#price", "Price of crop sensor config", 0)
227end