Nenue@6
|
1 --- ${PACKAGE_NAME}
|
Nenue@6
|
2 -- @file-author@
|
Nenue@6
|
3 -- @project-revision@ @project-hash@
|
Nenue@6
|
4 -- @file-revision@ @file-hash@
|
Nenue@6
|
5 -- Created: 1/15/2016 6:38 PM
|
Nenue@6
|
6 local T, _G = Turok, _G
|
Nenue@6
|
7 local GetTime, PlaySoundFile, format = GetTime, PlaySoundFile, string.format
|
Nenue@6
|
8 local unpack, tconcat = unpack, table.concat
|
Nenue@6
|
9 local ACTIVE, PASSIVE, HIDDEN = 2, 1, 0
|
Nenue@6
|
10 local mod = T.modules.TimerControl
|
Nenue@6
|
11 --@debug@
|
Nenue@6
|
12 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool
|
Nenue@6
|
13 local print = function(...)
|
Nenue@6
|
14 if _G.Devian and _G.DevianDB.workspace ~= 1 then
|
Nenue@6
|
15 _G.print('Progressbar', ...)
|
Nenue@6
|
16 end
|
Nenue@6
|
17 end
|
Nenue@9
|
18 local uprint = function(...)
|
Nenue@9
|
19 if _G.Devian and _G.DevianDB.workspace ~= 1 then
|
Nenue@9
|
20 _G.print('Update', ...)
|
Nenue@9
|
21 end
|
Nenue@9
|
22 end
|
Nenue@6
|
23 --@end-debug@
|
Nenue@6
|
24 local GetPrint = function(trace)
|
Nenue@6
|
25 if trace then
|
Nenue@6
|
26 return print
|
Nenue@6
|
27 else
|
Nenue@6
|
28 return function() end
|
Nenue@6
|
29 end
|
Nenue@6
|
30 end
|
Nenue@6
|
31 T.defaults.spirit.progressbar = {
|
Nenue@6
|
32 combatFade = true,
|
Nenue@6
|
33 alpha = 1,
|
Nenue@6
|
34 alpha_ooc = 0,
|
Nenue@6
|
35 alpha_ooc_passive = 0,
|
Nenue@6
|
36 alpha_ooc_active = 1,
|
Nenue@6
|
37
|
Nenue@6
|
38 width = 200, height = 24,
|
Nenue@6
|
39 parent = 1,
|
Nenue@6
|
40 anchor = 'CENTER', anchorTo = 'CENTER',
|
Nenue@6
|
41 setAllPoints = true,
|
Nenue@6
|
42 strata = 'MEDIUM',
|
Nenue@6
|
43
|
Nenue@6
|
44 foreground_color = {1,0.5,0,0.5},
|
Nenue@6
|
45 foreground_blend = 'ADD',
|
Nenue@6
|
46 foreground_texture = [[Interface\Addons\Turok\Media\statusbar\Minimalist.tga]],
|
Nenue@6
|
47 background_color = {1,1,1,0.5},
|
Nenue@6
|
48 background_blend = 'BLEND',
|
Nenue@6
|
49 padding = 3,
|
Nenue@6
|
50 spacing = 1,
|
Nenue@6
|
51 foreground_inset= 0,
|
Nenue@6
|
52 icon = {
|
Nenue@6
|
53 embedded = true,
|
Nenue@6
|
54 alpha = 1,
|
Nenue@6
|
55 alpha_ooc = 1,
|
Nenue@6
|
56 size = 24,
|
Nenue@6
|
57 x = -6, y = 0,
|
Nenue@6
|
58 anchor = 'RIGHT', anchorTo = 'LEFT',
|
Nenue@6
|
59 parent = 1,
|
Nenue@6
|
60 },
|
Nenue@6
|
61
|
Nenue@6
|
62 -- text
|
Nenue@6
|
63 color = {0,0,0,.5},
|
Nenue@6
|
64 }
|
Nenue@6
|
65
|
Nenue@6
|
66 local p = mod.prototype.display.progressbar
|
Nenue@6
|
67 p.type='display'
|
Nenue@6
|
68
|
Nenue@6
|
69 p.inherits = 'TurokProgressbarTemplate'
|
Nenue@6
|
70 p.cvars = {}
|
Nenue@6
|
71
|
Nenue@6
|
72 --- Load-time config retrieval
|
Nenue@6
|
73 p.Init = function (self)
|
Nenue@6
|
74 local print = GetPrint(self.trace)
|
Nenue@6
|
75
|
Nenue@6
|
76 print(' ', self:GetName(),'<- Progressbar.Load')
|
Nenue@6
|
77 print(' ', self:GetHeight())
|
Nenue@6
|
78
|
Nenue@6
|
79 if self.cvars.hideIcon then
|
Nenue@6
|
80 self.enableIcon = false
|
Nenue@6
|
81 print('Icon hidden')
|
Nenue@6
|
82 else
|
Nenue@6
|
83 self.icon:Hide()
|
Nenue@6
|
84 if self.cvars.icon then
|
Nenue@6
|
85 print('Icon data:')
|
Nenue@6
|
86 for k,v in pairs(self.cvars.icon) do
|
Nenue@6
|
87 print(' ', k, '=', v)
|
Nenue@6
|
88 end
|
Nenue@6
|
89 print(cWord(' icon=')..cText(self.itemIcon or self.spellIcon))
|
Nenue@6
|
90 self.icon:SetTexture(self.itemIcon or self.spellIcon)
|
Nenue@6
|
91 self.icon:ClearAllPoints()
|
Nenue@6
|
92 T.SetTextureLayout(self.icon, self.cvars.icon)
|
Nenue@6
|
93 self.enableIcon = true
|
Nenue@6
|
94 self.icon:Show()
|
Nenue@6
|
95 end
|
Nenue@6
|
96
|
Nenue@6
|
97 end
|
Nenue@6
|
98
|
Nenue@6
|
99 T.SetStatusTextures(self, self.cvars)
|
Nenue@6
|
100
|
Nenue@9
|
101 uprint(self.background:GetWidth(), self.background:GetHeight())
|
Nenue@9
|
102 uprint(self.foreground:GetWidth(), self.foreground:GetHeight())
|
Nenue@6
|
103 end
|
Nenue@6
|
104
|
Nenue@6
|
105
|
Nenue@6
|
106 --- Negotiate the config differences between different display states
|
Nenue@6
|
107 -- Hidden - display is or should (via fade-out) be hidden
|
Nenue@6
|
108 -- Passive - display is visible, but no timing information is processed
|
Nenue@6
|
109 -- Active - display is visible and counting time; on expiration, it will downgrade itself to passive or hidden
|
Nenue@6
|
110 p.SetState = function(self, newState, forcePrevious)
|
Nenue@6
|
111 local print = GetPrint(self.trace)
|
Nenue@6
|
112
|
Nenue@6
|
113 local previous = self.displayState
|
Nenue@6
|
114 self.prevState = forcePrevious and forcePrevious or previous
|
Nenue@6
|
115 self.displayState = newState
|
Nenue@6
|
116
|
Nenue@6
|
117 local newState, previous = self.displayState, self.prevState
|
Nenue@6
|
118 --- Transition
|
Nenue@6
|
119 if newState ~= previous then
|
Nenue@6
|
120 print(cText(' Transition:'), cWord(self.spellName))
|
Nenue@6
|
121 if newState == HIDDEN then
|
Nenue@6
|
122 print(cText(' to HIDDEN'))
|
Nenue@6
|
123 -- to HIDDEN
|
Nenue@6
|
124 if previous then
|
Nenue@6
|
125 -- has to have been ACTIVE or PASSIVE at this point
|
Nenue@6
|
126 self.Intro:Stop()
|
Nenue@6
|
127 if self.event then
|
Nenue@6
|
128 self.Outro:Play()
|
Nenue@6
|
129 else
|
Nenue@6
|
130 self:Hide()
|
Nenue@6
|
131 end
|
Nenue@6
|
132 end
|
Nenue@6
|
133 -- want to end here if HIDDEN from nil
|
Nenue@6
|
134 else
|
Nenue@6
|
135 -- to ACTIVE or PASSIVE
|
Nenue@6
|
136 self.Outro:Stop() -- stop any running outro
|
Nenue@6
|
137
|
Nenue@6
|
138
|
Nenue@6
|
139 if newState == ACTIVE then
|
Nenue@6
|
140
|
Nenue@6
|
141 -- and is ACTIVE
|
Nenue@6
|
142 self:Show()
|
Nenue@6
|
143 end
|
Nenue@6
|
144
|
Nenue@6
|
145 print(cText(' from'), cNum(previous))
|
Nenue@6
|
146 if previous and previous ~= HIDDEN then
|
Nenue@6
|
147 -- from visible
|
Nenue@6
|
148 if self.event then
|
Nenue@6
|
149 self.refresh = true
|
Nenue@6
|
150 self.Retro:Play()
|
Nenue@6
|
151 end
|
Nenue@6
|
152 else
|
Nenue@6
|
153 if self.event then
|
Nenue@6
|
154 self.Intro:Play()
|
Nenue@6
|
155 else
|
Nenue@6
|
156 self:Show()
|
Nenue@6
|
157 end
|
Nenue@6
|
158 end
|
Nenue@6
|
159 end
|
Nenue@6
|
160 else
|
Nenue@6
|
161 if newState == ACTIVE then
|
Nenue@6
|
162 print(cText(''))
|
Nenue@6
|
163 -- and is ACTIVE
|
Nenue@6
|
164 end
|
Nenue@6
|
165
|
Nenue@6
|
166 if self.event and newState ~= HIDDEN then
|
Nenue@6
|
167 self.refresh = true
|
Nenue@6
|
168 self.Retro:Play()
|
Nenue@6
|
169 end
|
Nenue@6
|
170 end
|
Nenue@6
|
171
|
Nenue@6
|
172 if newState ~= HIDDEN then
|
Nenue@6
|
173 print(cText(' CVars:'))
|
Nenue@6
|
174 local c = (newState == ACTIVE) and self.cvars.active or self.cvars.passive
|
Nenue@6
|
175 if self.icon and c.icon then
|
Nenue@6
|
176 print(cText(' '), cWord('desat=')..cBool(c.icon.desaturated), cWord('color=')..cNum(tconcat(c.icon.color, ', ')))
|
Nenue@6
|
177 self.icon:SetVertexColor(unpack(c.icon.color))
|
Nenue@6
|
178 self.icon:SetDesaturated(c.icon.desaturated)
|
Nenue@6
|
179 end
|
Nenue@6
|
180 local c
|
Nenue@6
|
181 if newState == ACTIVE then
|
Nenue@6
|
182 self.fillState = 1
|
Nenue@6
|
183 c = self.cvars.active
|
Nenue@6
|
184 else
|
Nenue@6
|
185 self.fillState = 2
|
Nenue@6
|
186 c = self.cvars.passive
|
Nenue@6
|
187 end
|
Nenue@6
|
188
|
Nenue@6
|
189 if self.icon and c.icon then
|
Nenue@6
|
190 print(cText(' '), cWord('desat=')..cBool(c.icon.desaturated), cWord('color=')..cNum(tconcat(c.icon.color, ', ')))
|
Nenue@6
|
191 self.icon:SetVertexColor(unpack(c.icon.color))
|
Nenue@6
|
192 self.icon:SetDesaturated(c.icon.desaturated)
|
Nenue@6
|
193 end
|
Nenue@6
|
194
|
Nenue@6
|
195 self:UpdateAlpha(T.inCombat)
|
Nenue@6
|
196 end
|
Nenue@6
|
197 end
|
Nenue@6
|
198
|
Nenue@6
|
199 p.Update = function (self)
|
Nenue@6
|
200 local print = GetPrint(self.trace)
|
Nenue@6
|
201
|
Nenue@6
|
202 -- Trigger business
|
Nenue@6
|
203 -- Passive or Hidden, evaluate once
|
Nenue@6
|
204 if self.displayState == 0 and self.prevState ~= 0 then
|
Nenue@6
|
205 self.prevState = self.displayState -- quietly advance state
|
Nenue@6
|
206 self.percent = 0
|
Nenue@6
|
207 self.valueFull = 0
|
Nenue@6
|
208 self.value = 0
|
Nenue@6
|
209 self:SetText()
|
Nenue@6
|
210 self:SetProgress(self.percent)
|
Nenue@6
|
211 print('go LOW')
|
Nenue@6
|
212 elseif self.displayState == 1 and self.prevState ~= 1 then
|
Nenue@6
|
213 self.prevState = self.displayState -- quietly advance state
|
Nenue@6
|
214 self.valueFull = 0
|
Nenue@6
|
215 self.value = 0
|
Nenue@6
|
216 self.percent = 1
|
Nenue@6
|
217 self:SetText()
|
Nenue@6
|
218 self:SetProgress(self.fill_inverse and 0 or 1)
|
Nenue@6
|
219 print('go PASSIVE', self.percent, self.duration, self.start, self.expires)
|
Nenue@6
|
220 elseif self.displayState == 2 then
|
Nenue@6
|
221 if self.prevState ~= 2 or self.refresh then
|
Nenue@6
|
222 self.prevState = self.displayState -- quietly advance state
|
Nenue@6
|
223 self.refresh = nil
|
Nenue@6
|
224 end
|
Nenue@6
|
225 -- prevState is set externally
|
Nenue@6
|
226 local time = GetTime()
|
Nenue@6
|
227 if self.expires <= time and self.charges == self.maxCharges then
|
Nenue@6
|
228 self.percent = 1
|
Nenue@6
|
229 self.duration = 0
|
Nenue@6
|
230 self.expires = 0
|
Nenue@6
|
231 self.start= 0
|
Nenue@6
|
232 self.valueFull = self.duration
|
Nenue@6
|
233 self.value = self.duration
|
Nenue@6
|
234 self.elapsed = self.duration
|
Nenue@6
|
235 self.remaining = 0
|
Nenue@6
|
236 self:SetState(self.cvars.persist and self.flags.passive or self.flags.hidden)
|
Nenue@6
|
237 else
|
Nenue@6
|
238 self.valueFull = self.expires - time
|
Nenue@6
|
239 self.percent = self.valueFull / self.duration
|
Nenue@6
|
240 self.elapsed = time - self.start
|
Nenue@6
|
241 self.remaining = self.duration - time
|
Nenue@6
|
242
|
Nenue@6
|
243 self.value = floor(self.valueFull)
|
Nenue@6
|
244 end
|
Nenue@6
|
245
|
Nenue@6
|
246 --PlaySoundFile(self.cvars.sound_active)
|
Nenue@6
|
247 self:SetText()
|
Nenue@6
|
248 self:SetProgress(self.percent)
|
Nenue@6
|
249 end
|
Nenue@6
|
250 end |