vanilla-wow-addons – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | -- Does not get called if the timer is paused or stopped. |
2 | -- The function is called with two parameters: |
||
3 | |||
4 | -- First parameter (integer): The time remaining (if counting down)/time elapsed(if counting up), both in seconds. |
||
5 | -- Second parameter (integer): Whether the timer is counting up or down (1 for up, -1 for down). |
||
6 | |||
7 | CT_Timer_CallFunctions = { }; |
||
8 | -- Global variable. Add your function to the list to get it called every time the timer counts 1 second (works both counting up and counting down). |
||
9 | -- You can add the function using "tinsert(CT_Timer_CallFunctions, functionName);" |
||
10 | |||
11 | CT_Timer = { }; |
||
12 | function CT_Timer_OnMouseOver() |
||
13 | CT_TimerFrameDragClickFrame.step = 0.05; |
||
14 | end |
||
15 | |||
16 | function CT_Timer_OnMouseOut() |
||
17 | CT_TimerFrameDragClickFrame.step = -0.05; |
||
18 | end |
||
19 | |||
20 | function CT_Timer_Toggle(btn) |
||
21 | if ( not btn ) then btn = this:GetParent(); end |
||
22 | if ( CT_Timer.status and CT_Timer.status == 1 ) then |
||
23 | CT_Timer.status = 0; |
||
24 | getglobal(btn:GetName() .. "Time"):SetTextColor(1, 0.5, 0); |
||
25 | CT_Timer.color = { 1, 0.5, 0 }; |
||
26 | else |
||
27 | if ( not CT_Timer.status ) then |
||
28 | if ( CT_Timer.time > 0 ) then |
||
29 | CT_Timer.countfrom = CT_Timer_GetTimeString(CT_Timer.time); |
||
30 | CT_Timer.step = -1; |
||
31 | else |
||
32 | CT_Timer.step = 1; |
||
33 | end |
||
34 | end |
||
35 | getglobal(btn:GetName() .. "Time"):SetTextColor(0, 1, 0); |
||
36 | CT_Timer.color = { 0, 1, 0 }; |
||
37 | CT_Timer.status = 1; |
||
38 | end |
||
39 | end |
||
40 | |||
41 | function CT_Timer_UpdateTime(elapsed) |
||
42 | if ( CT_Timer.hideBG ) then |
||
43 | CT_Timer.alphaUpdate = ( CT_Timer.alphaUpdate or 0 ) + elapsed; |
||
44 | if ( CT_Timer.alphaUpdate > 0.05 ) then |
||
45 | if ( ( not CT_Timer.alphaWait or CT_Timer.alphaWait < 1 ) and ( CT_TimerFrameDragClickFrame.step or 0 ) > 0 ) then |
||
46 | CT_Timer.alphaWait = ( CT_Timer.alphaWait or 0 ) + elapsed; |
||
47 | CT_TimerFrameHeaderTexture:SetAlpha(0); |
||
48 | CT_TimerFrameScrollDownHour:SetAlpha(0); |
||
49 | CT_TimerFrameScrollDownMin:SetAlpha(0); |
||
50 | CT_TimerFrameScrollUpHour:SetAlpha(0); |
||
51 | CT_TimerFrameScrollUpMin:SetAlpha(0); |
||
52 | else |
||
53 | CT_Timer.alpha = ( CT_Timer.alpha or 0 ) + ( CT_TimerFrameDragClickFrame.step or 0 ); |
||
54 | if ( CT_Timer.alpha < 0 ) then |
||
55 | CT_Timer.alpha = 0; |
||
56 | CT_Timer.alphaWait = nil; |
||
57 | elseif ( CT_Timer.alpha > 1 ) then |
||
58 | CT_Timer.alpha = 1; |
||
59 | end |
||
60 | CT_TimerFrameHeaderTexture:SetAlpha(CT_Timer.alpha); |
||
61 | CT_TimerFrameScrollDownHour:SetAlpha(CT_Timer.alpha); |
||
62 | CT_TimerFrameScrollDownMin:SetAlpha(CT_Timer.alpha); |
||
63 | CT_TimerFrameScrollUpHour:SetAlpha(CT_Timer.alpha); |
||
64 | CT_TimerFrameScrollUpMin:SetAlpha(CT_Timer.alpha); |
||
65 | end |
||
66 | end |
||
67 | else |
||
68 | CT_Timer.alpha = nil; |
||
69 | CT_Timer.alphaWait = nil; |
||
70 | CT_Timer.alphaUpdate = nil; |
||
71 | CT_TimerFrameHeaderTexture:SetAlpha(1); |
||
72 | CT_TimerFrameScrollDownHour:SetAlpha(1); |
||
73 | CT_TimerFrameScrollDownMin:SetAlpha(1); |
||
74 | CT_TimerFrameScrollUpHour:SetAlpha(1); |
||
75 | CT_TimerFrameScrollUpMin:SetAlpha(1); |
||
76 | end |
||
77 | if ( not CT_Timer.status or CT_Timer.status == 0 ) then |
||
78 | if ( CT_Timer.color ) then |
||
79 | CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]); |
||
80 | end |
||
81 | return; |
||
82 | end |
||
83 | CT_TimerFrame.update = ( CT_TimerFrame.update or 0 ) + elapsed; |
||
84 | if ( CT_TimerFrame.update >= 1 ) then |
||
85 | if ( CT_Timer.color ) then |
||
86 | CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]); |
||
87 | end |
||
88 | CT_Timer.time = CT_Timer.time + CT_Timer.step; |
||
89 | |||
90 | -- Process call list |
||
91 | for k, v in CT_Timer_CallFunctions do |
||
92 | if ( type(v) == "function" ) then |
||
93 | v(CT_Timer.time, CT_Timer.step); |
||
94 | end |
||
95 | end |
||
96 | |||
97 | if ( CT_Timer.time == 0 ) then |
||
98 | DEFAULT_CHAT_FRAME:AddMessage(format(CT_TIMER_FINISHCOUNT, CT_Timer.countfrom), 1, 0.5, 0); |
||
99 | PlaySound("TellMessage"); |
||
100 | CT_Timer_Reset(); |
||
101 | else |
||
102 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
103 | end |
||
104 | CT_TimerFrame.update = CT_TimerFrame.update - 1; |
||
105 | end |
||
106 | end |
||
107 | |||
108 | function CT_Timer_Start(seconds) |
||
109 | CT_Timer.status = 1; |
||
110 | if ( seconds ) then |
||
111 | CT_Timer.step = -1; |
||
112 | CT_Timer.countfrom = CT_Timer_GetTimeString(seconds); |
||
113 | else |
||
114 | CT_Timer.step = 1; |
||
115 | end |
||
116 | if ( seconds ) then |
||
117 | CT_Timer.time = seconds; |
||
118 | else |
||
119 | CT_Timer.time = 0; |
||
120 | end |
||
121 | CT_TimerFrameTime:SetTextColor(0, 1, 0); |
||
122 | CT_Timer.color = { 0, 1, 0 }; |
||
123 | end |
||
124 | |||
125 | function CT_Timer_Pause(newStatus) |
||
126 | if ( not newStatus and ( not CT_Timer.status or CT_Timer.status == 0 ) ) then |
||
127 | newStatus = 1; |
||
128 | elseif ( newStatus and newStatus ~= 0 and newStatus ~= 1 ) then |
||
129 | newStatus = nil; |
||
130 | end |
||
131 | |||
132 | if ( newStatus ) then |
||
133 | if ( not CT_Timer.status ) then |
||
134 | if ( CT_Timer.time > 0 ) then |
||
135 | CT_Timer.countfrom = CT_Timer_GetTimeString(CT_Timer.time); |
||
136 | CT_Timer.step = -1; |
||
137 | else |
||
138 | CT_Timer.step = 1; |
||
139 | end |
||
140 | end |
||
141 | CT_Timer.status = 1; |
||
142 | CT_TimerFrameTime:SetTextColor(0, 1, 0); |
||
143 | CT_Timer.color = { 0, 1, 0 }; |
||
144 | else |
||
145 | CT_Timer.status = 0; |
||
146 | CT_TimerFrameTime:SetTextColor(1, 0.5, 0); |
||
147 | CT_Timer.color = { 1, 0.5, 0 }; |
||
148 | end |
||
149 | end |
||
150 | |||
151 | function CT_Timer_SetTime(num, field) |
||
152 | if ( not num ) then return; end |
||
153 | local hours, mins, secs, temp; |
||
154 | |||
155 | if ( num >= 3600 ) then |
||
156 | hours = floor(num / 3600); |
||
157 | temp = num - (hours*3600); |
||
158 | mins = floor(temp / 60); |
||
159 | secs = temp - (mins*60); |
||
160 | elseif ( num >= 60 ) then |
||
161 | hours = 0; |
||
162 | mins = floor(num / 60); |
||
163 | secs = num - (mins*60); |
||
164 | else |
||
165 | hours = 0; |
||
166 | mins = 0; |
||
167 | secs = num; |
||
168 | end |
||
169 | if ( not CT_Timer.showsecs ) then |
||
170 | getglobal(field:GetName() .. "Time"):SetText(CT_Timer_AddZeros(hours) .. ":" .. CT_Timer_AddZeros(mins)); |
||
171 | else |
||
172 | getglobal(field:GetName() .. "Time"):SetText(CT_Timer_AddZeros(hours) .. ":" .. CT_Timer_AddZeros(mins) .. ":" .. CT_Timer_AddZeros(secs)); |
||
173 | end |
||
174 | if ( CT_Timer.time < 60 ) then |
||
175 | CT_TimerFrameScrollDownMin:Disable(); |
||
176 | CT_TimerFrameScrollDownHour:Disable(); |
||
177 | elseif ( CT_Timer.time < 3600 ) then |
||
178 | CT_TimerFrameScrollDownHour:Disable(); |
||
179 | CT_TimerFrameScrollDownMin:Enable(); |
||
180 | else |
||
181 | CT_TimerFrameScrollDownMin:Enable(); |
||
182 | CT_TimerFrameScrollDownHour:Enable(); |
||
183 | end |
||
184 | end |
||
185 | |||
186 | function CT_Timer_GetTimeString(num) |
||
187 | |||
188 | local hours, mins, secs; |
||
189 | |||
190 | if ( num >= 3600 ) then |
||
191 | hours = floor(num / 3600); |
||
192 | mins = floor(mod(num, 3600) / 60); |
||
193 | else |
||
194 | hours = 0; |
||
195 | mins = floor(num / 60); |
||
196 | end |
||
197 | |||
198 | if ( hours == 0 ) then |
||
199 | if ( mins == 1 ) then |
||
200 | return "1 " .. CT_TIMER_MIN; |
||
201 | else |
||
202 | return mins .. " " .. CT_TIMER_MINS; |
||
203 | end |
||
204 | else |
||
205 | local str; |
||
206 | if ( hours == 1 ) then |
||
207 | str = "1 " .. CT_TIMER_HOUR; |
||
208 | else |
||
209 | str = hours .. " " .. CT_TIMER_HOURS; |
||
210 | end |
||
211 | if ( mins == 0 ) then |
||
212 | return str; |
||
213 | elseif ( mins == 1 ) then |
||
214 | return str .. " and 1 " .. CT_TIMER_MIN; |
||
215 | else |
||
216 | return str .. " and " .. mins .. CT_TIMER_MINS; |
||
217 | end |
||
218 | end |
||
219 | end |
||
220 | |||
221 | function CT_Timer_AddZeros(num) |
||
222 | if ( strlen(num) == 1 ) then |
||
223 | return "0" .. num; |
||
224 | elseif ( strlen(num) == 2 ) then |
||
225 | return num; |
||
226 | else |
||
227 | return "--"; |
||
228 | end |
||
229 | end |
||
230 | |||
231 | function CT_Timer_ModTime(num) |
||
232 | CT_Timer.time = CT_Timer.time + num; |
||
233 | if ( CT_Timer.time < 0 ) then |
||
234 | CT_Timer.time = 0; |
||
235 | end |
||
236 | CT_Timer_SetTime(CT_Timer.time, this:GetParent()); |
||
237 | end |
||
238 | |||
239 | function CT_Timer_SetTimerTime(num) |
||
240 | if ( num < 0 ) then |
||
241 | num = 0; |
||
242 | end |
||
243 | CT_Timer.time = num; |
||
244 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
245 | end |
||
246 | |||
247 | function CT_Timer_Reset() |
||
248 | CT_TimerFrameTime:SetTextColor(1, 0, 0); |
||
249 | CT_Timer.color = { 1, 0, 0 }; |
||
250 | CT_Timer.status = nil; |
||
251 | CT_Timer.time = 0; |
||
252 | CT_Timer.countfrom = nil; |
||
253 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
254 | end |
||
255 | |||
256 | if ( CT_RegisterMod ) then |
||
257 | local function modfunc(modId) |
||
258 | if ( CT_TimerOptionsFrame:IsVisible() ) then |
||
259 | HideUIPanel(CT_TimerOptionsFrame); |
||
260 | else |
||
261 | ShowUIPanel(CT_TimerOptionsFrame); |
||
262 | end |
||
263 | end |
||
264 | |||
265 | CT_RegisterMod( CT_TIMER_MODNAME, |
||
266 | CT_TIMER_SUBNAME, |
||
267 | 5, |
||
268 | "Interface\\Icons\\INV_Misc_Key_02", |
||
269 | CT_TIMER_TOOLTIP, |
||
270 | "off", |
||
271 | nil, |
||
272 | modfunc |
||
273 | ); |
||
274 | end |
||
275 | |||
276 | SlashCmdList["TIMER"] = function(msg) |
||
277 | if ( msg == "" ) then |
||
278 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[1], 1, 1, 0); |
||
279 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[2], 1, 1, 0); |
||
280 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[3], 1, 1, 0); |
||
281 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[4], 1, 1, 0); |
||
282 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[5], 1, 1, 0); |
||
283 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[6], 1, 1, 0); |
||
284 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[7], 1, 1, 0); |
||
285 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[8], 1, 1, 0); |
||
286 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[9], 1, 1, 0); |
||
287 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_HELP[10], 1, 1, 0); |
||
288 | elseif ( msg == "show" ) then |
||
289 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOW_ON, 1, 1, 0); |
||
290 | CT_TimerFrame:Show(); |
||
291 | CT_Timer.show = 1; |
||
292 | elseif ( msg == "hide" ) then |
||
293 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOW_OFF, 1, 1, 0); |
||
294 | CT_TimerFrame:Hide(); |
||
295 | CT_Timer.show = nil; |
||
296 | CT_Timer_ShowTimer = 0; |
||
297 | elseif ( msg == "secs on" ) then |
||
298 | CT_Timer.showsecs = 1; |
||
299 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOWSECS_ON, 1, 1, 0); |
||
300 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
301 | elseif ( msg == "secs off" ) then |
||
302 | CT_Timer.showsecs = nil; |
||
303 | DEFAULT_CHAT_FRAME:AddMessage("<CTMod> " .. CT_TIMER_SHOWSECS_OFF, 1, 1, 0); |
||
304 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
305 | elseif ( msg == "start" ) then |
||
306 | CT_Timer_Start(); |
||
307 | elseif ( msg == "stop" ) then |
||
308 | CT_Timer_Pause(); |
||
309 | elseif ( msg == "reset" ) then |
||
310 | CT_Timer_Reset(); |
||
311 | elseif ( msg == "bg on" ) then |
||
312 | CT_Timer.hideBG = nil; |
||
313 | CT_Timer.alphaUpdate = 5; -- Force redraw |
||
314 | elseif ( msg == "bg off" ) then |
||
315 | CT_Timer.hideBG = 1; |
||
316 | CT_Timer.alphaUpdate = 5; -- Force redraw |
||
317 | elseif ( msg == "options" ) then |
||
318 | ShowUIPanel(CT_TimerOptionsFrame); |
||
319 | elseif ( string.find(msg, "^%d+$") ) then |
||
320 | local _, _, mins = string.find(msg, "^(%d+)$"); |
||
321 | CT_Timer_Start(tonumber(mins)*60); |
||
322 | elseif ( string.find(msg, "^%d+:%d+$") ) then |
||
323 | local _, _, mins, sec = string.find(msg, "^(%d+):(%d+)$"); |
||
324 | CT_Timer_Start(tonumber(mins)*60+tonumber(sec)); |
||
325 | else |
||
326 | SlashCmdList["TIMER"](""); |
||
327 | end |
||
328 | end |
||
329 | |||
330 | SLASH_TIMER1 = "/timer"; |
||
331 | SLASH_TIMER2 = "/tr"; |
||
332 | |||
333 | function CT_Timer_OnEvent(event) |
||
334 | if ( event == "VARIABLES_LOADED" and not CT_RegisterMod ) then |
||
335 | if ( CT_Timer.color ) then |
||
336 | CT_TimerFrameTime:SetTextColor(CT_Timer.color[1], CT_Timer.color[2], CT_Timer.color[3]); |
||
337 | end |
||
338 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
339 | end |
||
340 | end |
||
341 | |||
342 | tinsert(UISpecialFrames, "CT_TimerOptionsFrame"); |
||
343 | |||
344 | function CT_TimerOptions_Initialize() |
||
345 | CT_TimerOptions_OnClick(1, CT_Timer.show); |
||
346 | CT_TimerOptions_OnClick(2, CT_Timer.showsecs); |
||
347 | CT_TimerOptions_OnClick(3, CT_Timer.hideBG); |
||
348 | end |
||
349 | |||
350 | function CT_TimerOptions_OnClick(id, checked) |
||
351 | if ( id == 1 ) then |
||
352 | CT_Timer.show = checked; |
||
353 | getglobal("CT_TimerOptionsFrameShowTimerCB"):SetChecked(checked); |
||
354 | if ( checked ) then |
||
355 | CT_TimerFrame:Show(); |
||
356 | else |
||
357 | CT_TimerFrame:Hide(); |
||
358 | end |
||
359 | elseif ( id == 2 ) then |
||
360 | CT_Timer.showsecs = checked; |
||
361 | getglobal("CT_TimerOptionsFrameShowSecondsCB"):SetChecked(checked); |
||
362 | CT_Timer_SetTime(CT_Timer.time, CT_TimerFrame); |
||
363 | elseif ( id == 3 ) then |
||
364 | CT_Timer.hideBG = checked; |
||
365 | getglobal("CT_TimerOptionsFrameHideBackgroundCB"):SetChecked(checked); |
||
366 | CT_Timer.alphaUpdate = 5; -- Force redraw |
||
367 | end |
||
368 | end |