LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

JigglingParts

Description
Specialization for letting parts (e.g. sowing coulters) shake during work using a shader
Functions

isJigglingPartActive

Description
Definition
isJigglingPartActive()
Code
96function JigglingParts:isJigglingPartActive(jigglingPart)
97 if jigglingPart.refNodeIndex ~= nil and jigglingPart.refNode == nil then
98 if self.getGroundReferenceNodeFromIndex ~= nil then
99 local refNode = self:getGroundReferenceNodeFromIndex(jigglingPart.refNodeIndex)
100 if refNode ~= nil then
101 jigglingPart.refNode = refNode
102 end
103 end
104
105 if jigglingPart.refNode == nil then
106 g_logManager:xmlWarning(self.configFileName, "Unable to find ground reference node '%d' for jiggling part '%s'", jigglingPart.refNodeIndex, getName(jigglingPart.node))
107 end
108
109 jigglingPart.refNodeIndex = nil
110 end
111
112
113 if jigglingPart.refNode ~= nil then
114 if not self:getIsGroundReferenceNodeActive(jigglingPart.refNode) then
115 return false
116 end
117 end
118
119 return true
120end

loadJigglingPartsFromXML

Description
Definition
loadJigglingPartsFromXML()
Code
71function JigglingParts:loadJigglingPartsFromXML(jigglingPart, xmlFile, key)
72 XMLUtil.checkDeprecatedXMLElements(xmlFile, self.configFileName, key .. "#index", key .. "#node") --FS17 to FS19
73
74 jigglingPart.currentTime = 0
75 jigglingPart.currentAmplitudeScale = 0
76
77 jigglingPart.node = I3DUtil.indexToObject(self.components, getXMLString(xmlFile, key .. "#node"), self.i3dMappings)
78 if jigglingPart.node == nil then
79 g_logManager:xmlWarning(self.configFileName, "Failed to load node for jiggling part '%s'", key)
80 return false
81 end
82
83 jigglingPart.speedScale = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#speedScale"), 1)
84 jigglingPart.shaderParameter = Utils.getNoNil(getXMLString(xmlFile, key .. "#shaderParameter"), "amplFreq")
85 jigglingPart.shaderParameterComponentSpeed = Utils.getNoNil(getXMLInt(xmlFile, key .. "#shaderParameterComponentSpeed"), 4)
86 jigglingPart.shaderParameterComponentAmplitude = Utils.getNoNil(getXMLInt(xmlFile, key .. "#shaderParameterComponentAmplitude"), 1)
87 jigglingPart.amplitudeScale = Utils.getNoNil(getXMLFloat(xmlFile, key .. "#amplitudeScale"), 4.0)
88
89 jigglingPart.refNodeIndex = getXMLInt(xmlFile, key .. "#refNodeIndex")
90
91 return true
92end

onLoad

Description
Definition
onLoad()
Code
36function JigglingParts:onLoad(savegame)
37 local spec = self.spec_jigglingParts
38
39 spec.parts = {}
40 local i = 0
41 while true do
42 local key = string.format("vehicle.jigglingParts.jigglingPart(%d)", i)
43 if not hasXMLProperty(self.xmlFile, key) then
44 break
45 end
46
47 local jigglingPart = {}
48 if self:loadJigglingPartsFromXML(jigglingPart, self.xmlFile, key) then
49 table.insert(spec.parts, jigglingPart)
50 end
51
52 i = i + 1
53 end
54end

onUpdate

Description
Definition
onUpdate()
Code
58function JigglingParts:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
59 local spec = self.spec_jigglingParts
60 for _, jigglingPart in ipairs(spec.parts) do
61 if self:isJigglingPartActive(jigglingPart) then
62 self:updateJigglingPart(jigglingPart, dt, true)
63 elseif jigglingPart.currentAmplitudeScale > 0 then
64 self:updateJigglingPart(jigglingPart, dt, false)
65 end
66 end
67end

prerequisitesPresent

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

registerEventListeners

Description
Definition
registerEventListeners()
Code
29function JigglingParts.registerEventListeners(vehicleType)
30 SpecializationUtil.registerEventListener(vehicleType, "onLoad", JigglingParts)
31 SpecializationUtil.registerEventListener(vehicleType, "onUpdate", JigglingParts)
32end

registerFunctions

Description
Definition
registerFunctions()
Code
21function JigglingParts.registerFunctions(vehicleType)
22 SpecializationUtil.registerFunction(vehicleType, "loadJigglingPartsFromXML", JigglingParts.loadJigglingPartsFromXML)
23 SpecializationUtil.registerFunction(vehicleType, "isJigglingPartActive", JigglingParts.isJigglingPartActive)
24 SpecializationUtil.registerFunction(vehicleType, "updateJigglingPart", JigglingParts.updateJigglingPart)
25end

updateJigglingPart

Description
Definition
updateJigglingPart()
Code
124function JigglingParts:updateJigglingPart(jigglingPart, dt, groundContact)
125 local curValues = {getShaderParameter(jigglingPart.node, jigglingPart.shaderParameter)}
126
127 -- update speed
128 local t = dt / 1000 * jigglingPart.speedScale * self:getLastSpeed() / 20
129 jigglingPart.currentTime = jigglingPart.currentTime + t
130 curValues[jigglingPart.shaderParameterComponentSpeed] = jigglingPart.currentTime
131
132 --update amplitude
133 if groundContact and jigglingPart.currentAmplitudeScale < 1 then
134 jigglingPart.currentAmplitudeScale = math.min(jigglingPart.currentAmplitudeScale + dt / 100, 1)
135 elseif not groundContact and jigglingPart.currentAmplitudeScale > 0 then
136 jigglingPart.currentAmplitudeScale = math.max(jigglingPart.currentAmplitudeScale - dt / 100, 0)
137 end
138 curValues[jigglingPart.shaderParameterComponentAmplitude] = jigglingPart.currentAmplitudeScale * jigglingPart.amplitudeScale
139
140 setShaderParameter(jigglingPart.node, jigglingPart.shaderParameter, curValues[1], curValues[2], curValues[3], curValues[4], false)
141end