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(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) |
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 |