LUADOC - Farming Simulator 17

Printable Version

Script v1.4.4.0

Engine v7.0.0.2

Foundation Reference

RotorSpreader

Description
Class for sprayers with a rotor animation
Functions

prerequisitesPresent

Description
Checks if all prerequisite specializations are loaded
Definition
prerequisitesPresent(table specializations)
Arguments
tablespecializationsspecializations
Return Values
booleanhasPrerequisitetrue if all prerequisite specializations are loaded
Code
23function RotorSpreader.prerequisitesPresent(specializations)
24 return SpecializationUtil.hasSpecialization(Sprayer, specializations) and SpecializationUtil.hasSpecialization(Cylindered, specializations);
25end;

load

Description
Called on loading
Definition
load(table savegame)
Arguments
tablesavegamesavegame
Code
30function RotorSpreader:load(savegame)
31
32 self.animation = {};
33 self.animation.state = RotorSpreader.STATE_DISABLED;
34 self.animation.startWeight = 1;
35 self.animation.runWeight = 0;
36 self.animation.endWeight = 0;
37 self.animation.crossFadeTime = 200;
38 self.animation.runThreshold = 0.9;
39
40 self.animation.rootNode = Utils.indexToObject(self.components, getXMLString(self.xmlFile, "vehicle.rotorAnimation#rootNode"));
41 if self.animation.rootNode ~= nil then
42 self.animation.startClipSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.rotorAnimation#startClipSpeed", 1));
43 self.animation.runClipSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.rotorAnimation#runClipSpeed", 1));
44 self.animation.endClipSpeed = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.rotorAnimation#endClipSpeed", 1));
45 self.animation.animCharSet = getAnimCharacterSet(self.animation.rootNode);
46 if self.animation.animCharSet ~= 0 then
47 local startClip = getAnimClipIndex(self.animation.animCharSet, getXMLString(self.xmlFile, "vehicle.rotorAnimation#startClip"));
48 local runClip = getAnimClipIndex(self.animation.animCharSet, getXMLString(self.xmlFile, "vehicle.rotorAnimation#runClip"));
49 local endClip = getAnimClipIndex(self.animation.animCharSet, getXMLString(self.xmlFile, "vehicle.rotorAnimation#endClip"));
50 assignAnimTrackClip(self.animation.animCharSet, 0, startClip);
51 assignAnimTrackClip(self.animation.animCharSet, 1, runClip);
52 assignAnimTrackClip(self.animation.animCharSet, 2, endClip);
53 self.animation.startDuration = getAnimClipDuration(self.animation.animCharSet, startClip);
54 self.animation.runDuration = getAnimClipDuration(self.animation.animCharSet, runClip);
55 self.animation.endDuration = getAnimClipDuration(self.animation.animCharSet, endClip);
56 setAnimTrackSpeedScale(self.animation.animCharSet, 0, self.animation.startClipSpeed);
57 setAnimTrackSpeedScale(self.animation.animCharSet, 1, self.animation.runClipSpeed);
58 setAnimTrackSpeedScale(self.animation.animCharSet, 2, self.animation.endClipSpeed);
59 setAnimTrackLoopState(self.animation.animCharSet, 0, false);
60 setAnimTrackLoopState(self.animation.animCharSet, 1, true);
61 setAnimTrackLoopState(self.animation.animCharSet, 2, false);
62 setAnimTrackTime(self.animation.animCharSet, 0, 0);
63 setAnimTrackTime(self.animation.animCharSet, 1, 0);
64 setAnimTrackTime(self.animation.animCharSet, 2, 0);
65 setAnimTrackBlendWeight(self.animation.animCharSet, 0, self.animation.startWeight);
66 setAnimTrackBlendWeight(self.animation.animCharSet, 1, self.animation.runWeight);
67 setAnimTrackBlendWeight(self.animation.animCharSet, 2, self.animation.endWeight);
68 end;
69 self.initializeAnimation = true;
70 self.isAnimationRunning = false;
71 end
72end;

update

Description
Called on update
Definition
update(float dt)
Arguments
floatdttime since last call in ms
Code
86function RotorSpreader:update(dt)
87 if self.animation.rootNode == nil or self.animation.animCharSet == 0 then
88 return;
89 end
90
91 if self.initializeAnimation then
92 enableAnimTrack(self.animation.animCharSet, 0);
93 setAnimTrackTime(self.animation.animCharSet, 0, 0, true);
94 disableAnimTrack(self.animation.animCharSet, 0);
95 self.initializeAnimation = false;
96 end;
97
98 if self.animation.state ~= RotorSpreader.STATE_DISABLED then
99 if self.animation.state == RotorSpreader.STATE_STARTING then
100 self.animation.startWeight = math.min(self.animation.startWeight + dt/self.animation.crossFadeTime, 1);
101 self.animation.endWeight = 1-self.animation.startWeight;
102
103 if getAnimTrackTime(self.animation.animCharSet, 0) >= self.animation.startDuration then
104 self.animation.runWeight = 1;
105 self.animation.startWeight = 0;
106 self.animation.endWeight = 0;
107 setAnimTrackTime(self.animation.animCharSet, 0, 0);
108 setAnimTrackTime(self.animation.animCharSet, 1, 0);
109 enableAnimTrack(self.animation.animCharSet, 1);
110 disableAnimTrack(self.animation.animCharSet, 0);
111 self.animation.state = RotorSpreader.STATE_RUNNING;
112 end;
113 elseif self.animation.state == RotorSpreader.STATE_STOP then
114 local runTime = getAnimTrackTime(self.animation.animCharSet, 1);
115 if runTime >= self.animation.runDuration*self.animation.runThreshold then
116 setAnimTrackTime(self.animation.animCharSet, 2, 0);
117 enableAnimTrack(self.animation.animCharSet, 2);
118 self.animation.state = RotorSpreader.STATE_STOPPING
119 end;
120 elseif self.animation.state == RotorSpreader.STATE_STOPPING then
121 self.animation.endWeight = math.min(self.animation.endWeight + dt/self.animation.crossFadeTime, 1);
122 self.animation.runWeight = 1-self.animation.endWeight;
123
124 if getAnimTrackTime(self.animation.animCharSet, 2) >= self.animation.endDuration then
125 disableAnimTrack(self.animation.animCharSet, 2);
126 disableAnimTrack(self.animation.animCharSet, 1);
127 self.animation.state = RotorSpreader.STATE_DISABLED;
128 self.animation.runWeight = 0;
129 end;
130 end;
131 setAnimTrackBlendWeight(self.animation.animCharSet, 0, self.animation.startWeight);
132 setAnimTrackBlendWeight(self.animation.animCharSet, 1, self.animation.runWeight);
133 setAnimTrackBlendWeight(self.animation.animCharSet, 2, self.animation.endWeight);
134 end;
135end;

draw

Description
Called on draw
Definition
draw()
Code
142function RotorSpreader:draw()
143 if self.animation.rootNode == nil or self.animation.animCharSet == 0 then
144 return;
145 end
146end;

onDeactivate

Description
Called on deactivate
Definition
onDeactivate()
Code
150function RotorSpreader:onDeactivate()
151 if self.animation.rootNode == nil or self.animation.animCharSet == 0 then
152 return;
153 end
154
155 if self.animation.state == RotorSpreader.STATE_RUNNING then
156 self.animation.state = RotorSpreader.STATE_STOP;
157 end;
158 if self.animation.state == RotorSpreader.STATE_STARTING then
159 self.animation.state = RotorSpreader.STATE_STOPPING;
160 end;
161end;

onTurnedOn

Description
Called on turn on
Definition
onTurnedOn(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
166function RotorSpreader:onTurnedOn(noEventSend)
167 if self.animation.rootNode == nil or self.animation.animCharSet == 0 then
168 return;
169 end
170
171 setAnimTrackTime(self.animation.animCharSet, 0, 0);
172 enableAnimTrack(self.animation.animCharSet, 0);
173 self.animation.state = RotorSpreader.STATE_STARTING;
174end;

onTurnedOff

Description
Called on turn off
Definition
onTurnedOff(boolean noEventSend)
Arguments
booleannoEventSendno event send
Code
179function RotorSpreader:onTurnedOff(noEventSend)
180 if self.animation.rootNode == nil or self.animation.animCharSet == 0 then
181 return;
182 end
183
184 self.animation.state = RotorSpreader.STATE_STOP;
185end;