Script v1.7.1.0
- AI
- Animals
- Contracts
- Debug
- Economy
- Effects
- Events
- Farms
- GUI
- Handtools
- I3d
- Materials
- Misc
- Objects
- Placeables
- Player
- Shop
- Sounds
- Specializations
- Triggers
- Utils
- Vehicles
- Weather
Engine v1.7.1.0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- XML
- general
Foundation Reference
JigglingParts
DescriptionSpecialization for letting parts (e.g. sowing coulters) shake during work using a shaderFunctions
- isJigglingPartActive
- loadJigglingPartsFromXML
- onLoad
- onUpdate
- prerequisitesPresent
- registerEventListeners
- registerFunctions
- updateJigglingPart
isJigglingPartActive
DescriptionDefinitionisJigglingPartActive()Code
96 | function 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 |
120 | end |
loadJigglingPartsFromXML
DescriptionDefinitionloadJigglingPartsFromXML()Code
71 | function 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 |
92 | end |
onLoad
DescriptionDefinitiononLoad()Code
36 | function 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 |
54 | end |
onUpdate
DescriptionDefinitiononUpdate()Code
58 | function 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 |
67 | end |
prerequisitesPresent
DescriptionDefinitionprerequisitesPresent()Code
15 | function JigglingParts.prerequisitesPresent(specializations) |
16 | return true |
17 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
29 | function JigglingParts.registerEventListeners(vehicleType) |
30 | SpecializationUtil.registerEventListener(vehicleType, "onLoad", JigglingParts) |
31 | SpecializationUtil.registerEventListener(vehicleType, "onUpdate", JigglingParts) |
32 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
21 | function JigglingParts.registerFunctions(vehicleType) |
22 | SpecializationUtil.registerFunction(vehicleType, "loadJigglingPartsFromXML", JigglingParts.loadJigglingPartsFromXML) |
23 | SpecializationUtil.registerFunction(vehicleType, "isJigglingPartActive", JigglingParts.isJigglingPartActive) |
24 | SpecializationUtil.registerFunction(vehicleType, "updateJigglingPart", JigglingParts.updateJigglingPart) |
25 | end |
updateJigglingPart
DescriptionDefinitionupdateJigglingPart()Code
124 | function 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) |
141 | end |