LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

FoliageBending

Description
Specialization enabling vehicles to bend/inflect foliage/plants on the map
Functions

activateBendingNodes

Description
Definition
activateBendingNodes()
Code
241function FoliageBending:activateBendingNodes()
242 local spec = self.spec_foliageBending
243 for _, bendingNode in ipairs(spec.bendingNodes) do
244 if bendingNode.isActive then
245 if bendingNode.id == nil and g_currentMission.foliageBendingSystem then
246 bendingNode.id = g_currentMission.foliageBendingSystem:createRectangle(bendingNode.minX, bendingNode.maxX, bendingNode.minZ, bendingNode.maxZ, bendingNode.yOffset, bendingNode.node)
247 end
248 end
249 end
250end

deactivateBendingNodes

Description
Definition
deactivateBendingNodes()
Code
254function FoliageBending:deactivateBendingNodes()
255 local spec = self.spec_foliageBending
256 if spec.bendingNodes ~= nil then
257 for _, bendingNode in ipairs(spec.bendingNodes) do
258 if bendingNode.id ~= nil then
259 g_currentMission.foliageBendingSystem:destroyObject(bendingNode.id)
260 bendingNode.id = nil
261 end
262 end
263 end
264end

getFoliageBendingNodeByIndex

Description
Definition
getFoliageBendingNodeByIndex()
Code
268function FoliageBending:getFoliageBendingNodeByIndex(index)
269 return self.spec_foliageBending.bendingNodes[index]
270end

initSpecialization

Description
Definition
initSpecialization()
Code
21function FoliageBending.initSpecialization()
22 local schema = Vehicle.xmlSchema
23 schema:setXMLSpecializationType("FoliageBending")
24
25 schema:register(XMLValueType.NODE_INDEX, "vehicle.foliageBending.bendingNode(?)#node", "Bending node")
26 schema:register(XMLValueType.FLOAT, "vehicle.foliageBending.bendingNode(?)#minX", "Min. width")
27 schema:register(XMLValueType.FLOAT, "vehicle.foliageBending.bendingNode(?)#maxX", "Max. width")
28 schema:register(XMLValueType.FLOAT, "vehicle.foliageBending.bendingNode(?)#minZ", "Min. length")
29 schema:register(XMLValueType.FLOAT, "vehicle.foliageBending.bendingNode(?)#maxZ", "Max. length")
30 schema:register(XMLValueType.FLOAT, "vehicle.foliageBending.bendingNode(?)#yOffset", "Y translation offset")
31
32 schema:setXMLSpecializationType()
33end

loadBendingNodeFromXML

Description
Definition
loadBendingNodeFromXML()
Code
190function FoliageBending:loadBendingNodeFromXML(xmlFile, key, bendingNode)
191 local node = xmlFile:getValue(key.."#node", nil, self.components, self.i3dMappings)
192 if node == nil then
193 node = self.rootNode
194 end
195
196 bendingNode.node = node
197 bendingNode.key = key
198 bendingNode.minX = xmlFile:getValue(key.."#minX", -1)
199 bendingNode.maxX = xmlFile:getValue(key.."#maxX", 1)
200 bendingNode.minZ = xmlFile:getValue(key.."#minZ", -1)
201 bendingNode.maxZ = xmlFile:getValue(key.."#maxZ", 1)
202 bendingNode.yOffset = xmlFile:getValue(key.."#yOffset", 0)
203 bendingNode.isActive = true
204
205 return true
206end

loadBendingNodeModifierFromXML

Description
Definition
loadBendingNodeModifierFromXML()
Code
210function FoliageBending:loadBendingNodeModifierFromXML(xmlFile, key)
211 local modifier = {}
212
213 modifier.index = xmlFile:getValue(key.."#index")
214 modifier.indices = xmlFile:getValue(key.."#indices", nil, true)
215 if modifier.index == nil and modifier.indices == nil then
216 Logging.xmlWarning(self.xmlFile, "Missing bending node index for bending modifier '%s'", key)
217 return
218 end
219 if modifier.index ~= nil then
220 table.insert(modifier.indices, modifier.index)
221 end
222
223 modifier.minX = xmlFile:getValue(key.."#minX")
224 modifier.maxX = xmlFile:getValue(key.."#maxX")
225 modifier.minZ = xmlFile:getValue(key.."#minZ")
226 modifier.maxZ = xmlFile:getValue(key.."#maxZ")
227 modifier.yOffset = xmlFile:getValue(key.."#yOffset")
228 modifier.isActive = xmlFile:getValue(key.."#isActive", true)
229 modifier.overwrite = xmlFile:getValue(key.."#overwrite", true)
230
231 local spec = self.spec_foliageBending
232 if spec.bendingModifiers == nil then
233 spec.bendingModifiers = {}
234 end
235
236 table.insert(spec.bendingModifiers, modifier)
237end

onActivate

Description
Definition
onActivate()
Code
283function FoliageBending:onActivate()
284 self:activateBendingNodes()
285end

onDeactivate

Description
Definition
onDeactivate()
Code
289function FoliageBending:onDeactivate()
290 self:deactivateBendingNodes()
291end

onDelete

Description
Definition
onDelete()
Code
184function FoliageBending:onDelete()
185 self:deactivateBendingNodes()
186end

onLoad

Description
Definition
onLoad()
Code
90function FoliageBending:onLoad(savegame)
91 local spec = self.spec_foliageBending
92
93 spec.bendingNodes = {}
94 local i = 0
95 while true do
96 local key = string.format("vehicle.foliageBending.bendingNode(%d)", i)
97 if not self.xmlFile:hasProperty(key) then
98 break
99 end
100
101 local bendingNode = {}
102 if self:loadBendingNodeFromXML(self.xmlFile, key, bendingNode) then
103 table.insert(spec.bendingNodes, bendingNode)
104 bendingNode.index = #spec.bendingNodes
105 end
106
107 i = i + 1
108 end
109end

onPostLoad

Description
Definition
onPostLoad()
Code
113function FoliageBending:onPostLoad(savegame)
114 local spec = self.spec_foliageBending
115
116 for name, _ in pairs(g_configurationManager:getConfigurations()) do
117 local specializationKey = g_configurationManager:getConfigurationAttribute(name, "xmlKey")
118 if specializationKey ~= nil then
119 specializationKey = "." .. specializationKey
120 else
121 specializationKey = ""
122 end
123
124 local i = 0
125 while true do
126 local configrationKey = string.format("vehicle%s.%sConfigurations.%sConfiguration(%d)", specializationKey, name, name, i)
127 if not self.xmlFile:hasProperty(configrationKey) then
128 break
129 end
130
131 if self.configurations[name] ~= nil and self.configurations[name] == i + 1 then
132 local j = 0
133 while true do
134 local modifierKey = string.format("%s.foliageBendingModifier(%d)", configrationKey, j)
135 if not self.xmlFile:hasProperty(modifierKey) then
136 break
137 end
138
139 self:loadBendingNodeModifierFromXML(self.xmlFile, modifierKey)
140
141 j = j + 1
142 end
143 end
144
145 i = i + 1
146 end
147 end
148
149 if spec.bendingModifiers ~= nil then
150 for _, modifier in ipairs(spec.bendingModifiers) do
151 for i=1, #modifier.indices do
152 local index = modifier.indices[i]
153 local bendingNode = spec.bendingNodes[index]
154 if bendingNode ~= nil then
155 if modifier.overwrite then
156 bendingNode.minX = modifier.minX or bendingNode.minX
157 bendingNode.maxX = modifier.maxX or bendingNode.maxX
158 bendingNode.minZ = modifier.minZ or bendingNode.minZ
159 bendingNode.maxZ = modifier.maxZ or bendingNode.maxZ
160 bendingNode.yOffset = modifier.yOffset or bendingNode.yOffset
161 else
162 bendingNode.minX = math.min(bendingNode.minX, modifier.minX or bendingNode.minX)
163 bendingNode.maxX = math.max(bendingNode.maxX, modifier.maxX or bendingNode.maxX)
164 bendingNode.minZ = math.min(bendingNode.minZ, modifier.minZ or bendingNode.minZ)
165 bendingNode.maxZ = math.max(bendingNode.maxZ, modifier.maxZ or bendingNode.maxZ)
166 bendingNode.yOffset = math.max(bendingNode.yOffset, modifier.yOffset or bendingNode.yOffset)
167 end
168
169 if not modifier.isActive then
170 bendingNode.isActive = false
171 end
172 else
173 Logging.xmlWarning(self.xmlFile, "Undefined bendingNode index '%d' for bending modifier '%s'!", index, modifier.key)
174 end
175 end
176 end
177
178 spec.bendingModifiers = nil
179 end
180end

postInitSpecialization

Description
Definition
postInitSpecialization()
Code
37function FoliageBending.postInitSpecialization()
38 local schema = Vehicle.xmlSchema
39 schema:setXMLSpecializationType("FoliageBending")
40
41 for name, _ in pairs(g_configurationManager:getConfigurations()) do
42 local specializationKey = g_configurationManager:getConfigurationAttribute(name, "xmlKey")
43 if specializationKey ~= nil then
44 specializationKey = "." .. specializationKey
45 else
46 specializationKey = ""
47 end
48
49 local basePath = string.format("vehicle%s.%sConfigurations.%sConfiguration(?)", specializationKey, name, name)
50
51 schema:setXMLSharedRegistration("foliageBendingModifier", basePath)
52 schema:register(XMLValueType.INT, basePath .. ".foliageBendingModifier(?)#index", "Bending node index")
53 schema:register(XMLValueType.VECTOR_N, basePath .. ".foliageBendingModifier(?)#indices", "Bending node indices")
54 schema:register(XMLValueType.FLOAT, basePath .. ".foliageBendingModifier(?)#minX", "Min. width")
55 schema:register(XMLValueType.FLOAT, basePath .. ".foliageBendingModifier(?)#maxX", "Max. width")
56 schema:register(XMLValueType.FLOAT, basePath .. ".foliageBendingModifier(?)#minZ", "Min. length")
57 schema:register(XMLValueType.FLOAT, basePath .. ".foliageBendingModifier(?)#maxZ", "Max. length")
58 schema:register(XMLValueType.FLOAT, basePath .. ".foliageBendingModifier(?)#yOffset", "Y translation offset")
59 schema:register(XMLValueType.BOOL, basePath .. ".foliageBendingModifier(?)#isActive", "Bending node is active", true)
60 schema:register(XMLValueType.BOOL, basePath .. ".foliageBendingModifier(?)#overwrite", "Overwrite the bending node values and do not use the max values", true)
61 schema:setXMLSharedRegistration()
62 end
63
64 schema:setXMLSpecializationType()
65end

prerequisitesPresent

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

registerEventListeners

Description
Definition
registerEventListeners()
Code
80function FoliageBending.registerEventListeners(vehicleType)
81 SpecializationUtil.registerEventListener(vehicleType, "onLoad", FoliageBending)
82 SpecializationUtil.registerEventListener(vehicleType, "onPostLoad", FoliageBending)
83 SpecializationUtil.registerEventListener(vehicleType, "onDelete", FoliageBending)
84 SpecializationUtil.registerEventListener(vehicleType, "onActivate", FoliageBending)
85 SpecializationUtil.registerEventListener(vehicleType, "onDeactivate", FoliageBending)
86end

registerFunctions

Description
Definition
registerFunctions()
Code
69function FoliageBending.registerFunctions(vehicleType)
70 SpecializationUtil.registerFunction(vehicleType, "loadBendingNodeFromXML", FoliageBending.loadBendingNodeFromXML)
71 SpecializationUtil.registerFunction(vehicleType, "loadBendingNodeModifierFromXML", FoliageBending.loadBendingNodeModifierFromXML)
72 SpecializationUtil.registerFunction(vehicleType, "activateBendingNodes", FoliageBending.activateBendingNodes)
73 SpecializationUtil.registerFunction(vehicleType, "deactivateBendingNodes", FoliageBending.deactivateBendingNodes)
74 SpecializationUtil.registerFunction(vehicleType, "getFoliageBendingNodeByIndex", FoliageBending.getFoliageBendingNodeByIndex)
75 SpecializationUtil.registerFunction(vehicleType, "updateFoliageBendingAttributes", FoliageBending.updateFoliageBendingAttributes)
76end

updateFoliageBendingAttributes

Description
Definition
updateFoliageBendingAttributes()
Code
274function FoliageBending:updateFoliageBendingAttributes(index)
275 local bendingNode = self:getFoliageBendingNodeByIndex(index)
276 if bendingNode ~= nil and bendingNode.id ~= nil then
277 g_currentMission.foliageBendingSystem:setRectangleAttributes(bendingNode.id, bendingNode.minX, bendingNode.maxX, bendingNode.minZ, bendingNode.maxZ, bendingNode.yOffset)
278 end
279end