139 | function 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}; |
155 | end |
120 | function 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); |
135 | end |
181 | function 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); |
205 | end |
60 | function 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); |
91 | end |
95 | function 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; |
116 | end |
167 | function 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; |
177 | end |