LUADOC - Farming Simulator 19

CutterEffect

Description
Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
Parent
Effect
Functions

isRunning

Description
Definition
isRunning()
Code
142function CutterEffect:isRunning()
143 return self.effectMinValue ~= 0 or self.effectMaxValue ~= 0
144end

load

Description
Definition
load()
Code
24function CutterEffect:load(xmlFile, baseName, rootNodes, parent, fruitTypeIndex, i3dMappings)
25 self.fruitTypeIndex = fruitTypeIndex
26 self.currentGrowthState = 0
27 CutterEffect:superClass().load(self, xmlFile, baseName, rootNodes, parent, i3dMappings)
28end

loadEffectAttributes

Description
Definition
loadEffectAttributes()
Code
32function CutterEffect:loadEffectAttributes(xmlFile, key, node, i3dNode, i3dMapping)
33 local isThreshing = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLBool, node, "isThreshing"), true)
34 local effectTypeName = Effect.getValue(xmlFile, key, getXMLString, node, "effectType")
35 local effectType = g_cutterEffectManager:getCutterEffectTypeByName(effectTypeName)
36
37 self.linkNode = I3DUtil.indexToObject(Utils.getNoNil(node, self.rootNodes), Effect.getValue(xmlFile, key, getXMLString, node, "linkNode"), i3dMapping)
38 self.growthStateNodes = {}
39 local effects = g_cutterEffectManager:getCutterEffects(self.fruitTypeIndex, effectType, isThreshing)
40 if effects ~= nil then
41 self.node = createTransformGroup("effects")
42 link(self.linkNode, self.node)
43 setTranslation(self.node, 0, 0, 0)
44 setRotation(self.node, 0, 0, 0)
45
46 local loadedEffects = {}
47
48 for growthState, effect in pairs(effects) do
49 local currentEffect = loadedEffects[effect]
50 if currentEffect == nil then
51 currentEffect = clone(effect, false, false, true)
52 setTranslation(currentEffect, 0, 0, 0)
53 setScale(currentEffect, 1, 1, 1)
54 setRotation(currentEffect, 0, 0, 0)
55 link(self.node, currentEffect)
56 setVisibility(currentEffect, false)
57
58 local lengthAndRadius = StringUtil.getVectorNFromString(Effect.getValue(xmlFile, key, getXMLString, node, "lengthAndRadius"), 4)
59 if lengthAndRadius ~= nil then
60 setShaderParameter(currentEffect, "lengthAndRadius", lengthAndRadius[1], lengthAndRadius[2], lengthAndRadius[3], lengthAndRadius[4], false)
61 end
62 loadedEffects[effect] = currentEffect
63 end
64
65 self.growthStateNodes[growthState] = currentEffect
66 end
67 else
68 local fruitType = g_fruitTypeManager:getFruitTypeByIndex(self.fruitTypeIndex)
69 print("Warning: Could not load cutter effect '"..effectTypeName.."' (Threshing: "..tostring(isThreshing)..") for fruitType '"..fruitType.name.."'!")
70 end
71
72 self.speedScale = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "speedScale"), 0.002)
73 self.changeSpeedScale = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "changeSpeedScale"), self.speedScale)
74 self.useInterpolation = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLBool, node, "useInterpolation"), false)
75 self.useMaxValue = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLBool, node, "useMaxValue"), false)
76 self.minOffset = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "minOffset"), 0)
77 self.offset = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "offset"), 0)
78 self.currentOffset = 0
79 self.effectMinValue = 0
80 self.effectMaxValue = 0
81 self.effectAlpha = 1
82
83 return true
84end

new

Description
Definition
new()
Code
10function CutterEffect:new(customMt)
11 if customMt == nil then
12 customMt = CutterEffect_mt
13 end
14
15 self = Effect:new(customMt)
16 self.minValue = 0
17 self.maxValue = 0
18
19 return self
20end

reset

Description
Definition
reset()
Code
160function CutterEffect:reset()
161 self.effectMinValue = 0
162 self.effectMaxValue = 0
163 self.effectAlpha = 0
164 if self.growthStateNodes[self.currentGrowthState] ~= nil then
165 setVisibility(self.growthStateNodes[self.currentGrowthState], false)
166 end
167end

setGrowthState

Description
Definition
setGrowthState()
Code
171function CutterEffect:setGrowthState(growthState)
172 if self.growthStateNodes[self.currentGrowthState] ~= nil then
173 setVisibility(self.growthStateNodes[self.currentGrowthState], false)
174 end
175 self.currentGrowthState = growthState
176end

setMinMaxWidth

Description
Definition
setMinMaxWidth()
Code
180function CutterEffect:setMinMaxWidth(minValue, maxValue, reset)
181 self.minValue = minValue + self.offset
182 self.maxValue = maxValue + self.offset
183 if reset then
184 if not self.useInterpolation then
185 self.effectMinValue = minValue
186 self.effectMaxValue = maxValue
187 end
188 end
189
190 if minValue ~= 0 or maxValue ~= 0 then
191 g_effectManager:startEffect(self)
192 end
193end

start

Description
Definition
start()
Code
148function CutterEffect:start()
149 return true
150end

stop

Description
Definition
stop()
Code
154function CutterEffect:stop()
155 return true
156end

transformEffectNode

Description
Definition
transformEffectNode()
Code
88function CutterEffect:transformEffectNode(xmlFile, key, node)
89 if self.node ~= nil then
90 CutterEffect:superClass().transformEffectNode(self, xmlFile, key, node)
91 setVisibility(self.node, true)
92 end
93end

update

Description
Definition
update()
Code
97function CutterEffect:update(dt)
98 CutterEffect:superClass().update(self, dt)
99
100 self.currentOffset = (self.currentOffset + dt * self.speedScale)
101
102 if self.useInterpolation then
103 if self.useMaxValue then
104 self.effectMinValue = math.min(self.effectMinValue+self.changeSpeedScale*dt, -self.maxValue, 0)
105 else
106 self.effectMinValue = math.min(self.effectMinValue+self.changeSpeedScale*dt, self.minValue, 0)
107 end
108 else
109 if self.minValue < 0 then
110 self.effectMinValue = math.max(self.effectMinValue - self.changeSpeedScale*dt, self.minValue)
111 else
112 self.effectMinValue = math.min(self.effectMinValue + self.changeSpeedScale*dt, self.minValue)
113 end
114 if self.maxValue < 0 then
115 self.effectMaxValue = math.max(self.effectMaxValue - self.changeSpeedScale*dt, self.maxValue)
116 else
117 self.effectMaxValue = math.min(self.effectMaxValue + self.changeSpeedScale*dt, self.maxValue)
118 end
119 end
120
121 if VehicleDebug.state == VehicleDebug.DEBUG_ATTRIBUTES then
122 local x1,y1,z1 = localToWorld(self.growthStateNodes[self.currentGrowthState], self.minValue, 0, 0)
123 local x2,y2,z2 = localToWorld(self.growthStateNodes[self.currentGrowthState], self.maxValue, 0, 0)
124 drawDebugLine(x1,y1,z1, 0, 1, 0, x1, y1+2, z1, 0, 1, 0)
125 drawDebugLine(x2,y2,z2, 0, 1, 0, x2, y2+2, z2, 0, 1, 0)
126 end
127
128 if self.effectMinValue == 0 and self.effectMaxValue == 0 then
129 self.effectAlpha = 0
130 else
131 self.effectAlpha = MathUtil.clamp(self.effectAlpha + dt*0.0025, 0, 1)
132 end
133
134 if self.growthStateNodes[self.currentGrowthState] ~= nil then
135 setVisibility(self.growthStateNodes[self.currentGrowthState], self.effectAlpha ~= 0)
136 setShaderParameter(self.growthStateNodes[self.currentGrowthState], "scrollPosition", self.currentOffset, self.effectAlpha, self.minOffset + self.effectMinValue, self.effectMaxValue, false)
137 end
138end