LUADOC - Farming Simulator 19

Script v1.7.1.0

Engine v1.7.1.0

Foundation Reference

TimerElement

Description
Timer element for a clock-like display. Used layers: "image" for a foreground image, "bgImage" for a background image, "valueImage" for a value display, "markerImage" for a marker display. TODO: This element is not in use. Do we need to retain the code?
Parent
GuiElement
XML Configuration Parameters
GuiElement#timerSizestring [optional] Pixel size of foreground timer image in reference resolution. Format: "[width]px [height]px"
GuiElement#markerSizestring [optional] Pixel size of marker image in reference resolution. Format: "[width]px [height]px"
GuiElement#valuefloat [optional] Initial timer value, defaults to 0.
GuiElement#radiusstring [optional] Pixel radius of marker position in reference resolution. Format: "[radius]px"

Functions

applyScreenAlignment

Description
Definition
applyScreenAlignment()
Code
139function TimerElement:applyScreenAlignment()
140 TimerElement:superClass().applyScreenAlignment(self);
141
142 if bitAND(self.screenAlign, GuiElement.SCREEN_ALIGN_XNONE) == 0 then
143 self.timerSize[1] = self.timerSize[1]*g_aspectScaleX;
144 self.markerSize[1] = self.markerSize[1]*g_aspectScaleX;
145 self.radius[1] = self.radius[1]*g_aspectScaleX;
146 end;
147
148 if bitAND(self.screenAlign, GuiElement.SCREEN_ALIGN_YNONE) == 0 then
149 self.timerSize[2] = self.timerSize[2]*g_aspectScaleY;
150 self.markerSize[2] = self.markerSize[2]*g_aspectScaleY;
151 self.radius[2] = self.radius[2]*g_aspectScaleY;
152 end;
153
154 self.timerOffset = {(self.size[1]-self.timerSize[1])/2, (self.size[2]-self.timerSize[2])/2};
155end

copyAttributes

Description
Definition
copyAttributes()
Code
120function TimerElement:copyAttributes(src)
121 TimerElement:superClass().copyAttributes(self, src);
122
123 self.timerSize = {src.timerSize[1], src.timerSize[2]};
124 self.markerSize = {src.markerSize[1], src.markerSize[2]};
125 self.timerOffset = {src.timerOffset[1], src.timerOffset[2]};
126 self.radius = {src.radius[1], src.radius[2]};
127 self.value = src.value;
128
129 GuiOverlay.copyOverlay(self.overlayFront, src.overlayFront);
130 GuiOverlay.copyOverlay(self.overlayBackground1, src.overlayBackground1);
131 GuiOverlay.copyOverlay(self.overlayBackground2, src.overlayBackground2);
132 GuiOverlay.copyOverlay(self.overlayValue1, src.overlayValue1);
133 GuiOverlay.copyOverlay(self.overlayValue2, src.overlayValue2);
134 GuiOverlay.copyOverlay(self.overlayMarker, src.overlayMarker);
135end

delete

Description
Definition
delete()
Code
48function TimerElement:delete()
49 GuiOverlay.deleteOverlay(self.overlayFront);
50 GuiOverlay.deleteOverlay(self.overlayBackground1);
51 GuiOverlay.deleteOverlay(self.overlayBackground2);
52 GuiOverlay.deleteOverlay(self.overlayValue1);
53 GuiOverlay.deleteOverlay(self.overlayValue2);
54 GuiOverlay.deleteOverlay(self.overlayMarker);
55 TimerElement:superClass().delete(self);
56end

draw

Description
Definition
draw()
Code
181function TimerElement:draw()
182 TimerElement:superClass().draw(self);
183
184 local state = GuiOverlay.STATE_NORMAL;
185 if self.disabled then
186 state = GuiOverlay.STATE_DISABLED;
187 end;
188
189 if self.value > 0.5 then
190 GuiOverlay.renderOverlay(self.overlayBackground2, self.absPosition[1]+self.timerOffset[1], self.absPosition[2]+self.timerOffset[2], self.timerSize[1], self.timerSize[2], state);
191 end;
192 GuiOverlay.renderOverlay(self.overlayValue1, self.absPosition[1]+self.timerOffset[1], self.absPosition[2]+self.timerOffset[2], self.timerSize[1], self.timerSize[2], state);
193
194 if self.value > 0.5 then
195 GuiOverlay.renderOverlay(self.overlayValue2, self.absPosition[1]+self.timerOffset[1], self.absPosition[2]+self.timerOffset[2], self.timerSize[1], self.timerSize[2], state);
196 else
197 GuiOverlay.renderOverlay(self.overlayBackground2, self.absPosition[1]+self.timerOffset[1], self.absPosition[2]+self.timerOffset[2], self.timerSize[1], self.timerSize[2], state);
198 GuiOverlay.renderOverlay(self.overlayBackground1, self.absPosition[1]+self.timerOffset[1], self.absPosition[2]+self.timerOffset[2], self.timerSize[1], self.timerSize[2], state);
199 end;
200 GuiOverlay.renderOverlay(self.overlayFront, self.absPosition[1], self.absPosition[2], self.size[1], self.size[2], state);
201
202 local markerPosX = math.cos(math.rad(((1-self.value) * 360) + 90)) * self.radius[1];
203 local markerPosY = math.sin(math.rad(((1-self.value) * 360) + 90)) * self.radius[2];
204 GuiOverlay.renderOverlay(self.overlayMarker, self.absPosition[1] + self.size[1]/2 - self.markerSize[1]/2 + markerPosX, self.absPosition[2] + self.size[2]/2 - self.markerSize[2]/2 + markerPosY, self.markerSize[1], self.markerSize[2], state);
205end

loadFromXML

Description
Definition
loadFromXML()
Code
60function TimerElement:loadFromXML(xmlFile, key)
61 TimerElement:superClass().loadFromXML(self, xmlFile, key);
62
63 GuiOverlay.loadOverlay(self, self.overlayFront, "image", self.imageSize, nil, xmlFile, key);
64 GuiOverlay.loadOverlay(self, self.overlayBackground1, "bgImage", self.imageSize, nil, xmlFile, key);
65 GuiOverlay.loadOverlay(self, self.overlayBackground2, "bgImage", self.imageSize, nil, xmlFile, key);
66 GuiOverlay.loadOverlay(self, self.overlayValue1, "valueImage", self.imageSize, nil, xmlFile, key);
67 GuiOverlay.loadOverlay(self, self.overlayValue2, "valueImage", self.imageSize, nil, xmlFile, key);
68 GuiOverlay.loadOverlay(self, self.overlayMarker, "markerImage", self.imageSize, nil, xmlFile, key);
69
70 self.timerSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#timerSize"), self.outputSize, self.timerSize);
71 self.markerSize = GuiUtils.getNormalizedValues(getXMLString(xmlFile, key.."#markerSize"), self.outputSize, self.markerSize);
72 self.value = Utils.getNoNil(getXMLFloat(xmlFile, key.."#value"), self.value);
73
74 local radius = getXMLString(xmlFile, key.."#radius");
75 if radius ~= nil then
76 radius = GuiUtils.getNormalizedValues(radius .. " " ..radius, self.outputSize);
77 if radius ~= nil then
78 self.radius = radius;
79 end;
80 end;
81
82 GuiOverlay.createOverlay(self.overlayFront);
83 GuiOverlay.createOverlay(self.overlayBackground1);
84 GuiOverlay.createOverlay(self.overlayBackground2);
85 GuiOverlay.createOverlay(self.overlayValue1);
86 GuiOverlay.createOverlay(self.overlayValue2);
87 GuiOverlay.createOverlay(self.overlayMarker);
88
89 self:updateUVs(self.overlayValue2, math.rad(180));
90 self:setValue(self.value);
91end

loadProfile

Description
Definition
loadProfile()
Code
95function TimerElement:loadProfile(profile, applyProfile)
96 TimerElement:superClass().loadProfile(self, profile, applyProfile);
97
98 GuiOverlay.loadOverlay(self, self.overlayFront, "image", self.imageSize, profile, nil, nil);
99 GuiOverlay.loadOverlay(self, self.overlayBackground1, "bgImage", self.imageSize, profile, nil, nil);
100 GuiOverlay.loadOverlay(self, self.overlayBackground2, "bgImage", self.imageSize, profile, nil, nil);
101 GuiOverlay.loadOverlay(self, self.overlayValue1, "valueImage", self.imageSize, profile, nil, nil);
102 GuiOverlay.loadOverlay(self, self.overlayValue2, "valueImage", self.imageSize, profile, nil, nil);
103 GuiOverlay.loadOverlay(self, self.overlayMarker, "markerImage", self.imageSize, profile, nil, nil);
104
105 self.timerSize = GuiUtils.getNormalizedValues(profile:getValue("timerSize"), self.outputSize, self.timerSize);
106 self.markerSize = GuiUtils.getNormalizedValues(profile:getValue("markerSize"), self.outputSize, self.markerSize);
107 self.value = profile:getNumber("value", self.value);
108
109 local radius = profile:getValue("radius");
110 if radius ~= nil then
111 radius = GuiUtils.getNormalizedValues(radius .. " " ..radius, self.outputSize);
112 if radius ~= nil then
113 self.radius = radius;
114 end;
115 end;
116end

new

Description
Definition
new()
Code
24function TimerElement:new(target, custom_mt)
25 if custom_mt == nil then
26 custom_mt = TimerElement_mt;
27 end;
28 local self = GuiElement:new(target, custom_mt);
29
30 self.value = 0;
31 self.timerSize = {1, 1};
32 self.markerSize = {1, 1};
33 self.radius = 1;
34 self.timerOffset = nil;
35
36 self.overlayFront = {};
37 self.overlayBackground1 = {};
38 self.overlayBackground2 = {};
39 self.overlayValue1 = {};
40 self.overlayValue2 = {};
41 self.overlayMarker = {};
42
43 return self;
44end

setValue

Description
Definition
setValue()
Code
159function TimerElement:setValue(newValue)
160 self.value = MathUtil.clamp(newValue, 0, 1);
161 self:updateUVs(self.overlayValue1, math.rad(((1-self.value) * 360)));
162 self:updateUVs(self.overlayBackground1, math.rad(180 + (-self.value * 360)));
163end

updateUVs

Description
Definition
updateUVs()
Code
167function TimerElement:updateUVs(overlay, rotation)
168 local uvs = GuiOverlay.getOverlayUVs(overlay);
169 uvs[1] = -0.5 * math.cos(-rotation) + 0.5 * math.sin(-rotation) + 0.5;
170 uvs[2] = -0.5 * math.sin(-rotation) - 0.5 * math.cos(-rotation) + 0.5;
171 uvs[3] = -0.5 * math.cos(-rotation) - 0.5 * math.sin(-rotation) + 0.5;
172 uvs[4] = -0.5 * math.sin(-rotation) + 0.5 * math.cos(-rotation) + 0.5;
173 uvs[5] = 0.5 * math.cos(-rotation) + 0.5 * math.sin(-rotation) + 0.5;
174 uvs[6] = 0.5 * math.sin(-rotation) - 0.5 * math.cos(-rotation) + 0.5;
175 uvs[7] = 0.5 * math.cos(-rotation) - 0.5 * math.sin(-rotation) + 0.5;
176 uvs[8] = 0.5 * math.sin(-rotation) + 0.5 * math.cos(-rotation) + 0.5;
177end