LUADOC - Farming Simulator 22

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(clipX1, clipY1, clipX2, clipY2)
182 TimerElement:superClass().draw(self, clipX1, clipY1, clipX2, clipY2)
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