comparison Turok/Modules/Timer/Icon.lua @ 6:a9b8b0866ece

clear out log jam
author Nenue
date Sun, 21 Feb 2016 08:32:53 -0500
parents
children 9400a0ff8540
comparison
equal deleted inserted replaced
5:8a9a6637f082 6:a9b8b0866ece
1 --- ${PACKAGE_NAME}
2 -- @file-author@
3 -- @project-revision@ @project-hash@
4 -- @file-revision@ @file-hash@
5 -- Created: 1/15/2016 6:31 PM
6 local T, _G = Turok, _G
7 local mod = T.modules.TimerControl
8 local GetTime, floor, unpack, tconcat = GetTime, floor, unpack, table.concat
9 local HIDDEN, PASSIVE, ACTIVE = 0, 1,2
10 --@debug@
11 local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool
12 local print = function(...)
13 if _G.Devian and _G.DevianDB.workspace ~= 1 then
14 _G.print('Icon', ...)
15 end
16 end
17 print('Peep!', ...)
18 --@end-debug@
19 local GetPrint = function(trace)
20 if trace then
21 return print
22 else
23 return function() end
24 end
25 end
26
27 T.defaults.spirit.icon = {
28 combatFade = true,
29 alpha = 1,
30 alpha_passive = 1,
31 alpha_active = 1,
32 alpha_ooc_passive = 0,
33 alpha_ooc_active = 1,
34 alpha_ooc = 0.25,
35 size = 48,
36 container = 'default',
37 strata = 'LOW',
38 fade_in_time = 0.2,
39 fade_out_time = 0.3,
40 anchor = 'BOTTOM', anchorTo = 'BOTTOM',
41 parent = 1,
42 size = 48,
43 width = 48, height = 48,
44 x = 0,
45 y = 0,
46 strata = 'MEDIUM',
47 padding = 3,
48 spacing = 1,
49 foreground_inset= 0,
50 }
51
52 local p = mod.prototype.display.icon
53
54 p.type='display'
55 p.inherits = 'TurokIconTemplate'
56
57 --- if config flags need to overrided
58 p.cvars = {
59 enableIcon = true
60 }
61 --- Negotiate the config differences between different display states
62 -- Hidden - display is or should (via fade-out) be hidden
63 -- Passive - display is visible, but no timing information is processed
64 -- Active - display is visible and counting time; on expiration, it will downgrade itself to passive or hidden
65 p.Init = function(self)
66 local print = GetPrint(self.trace)
67
68 print('display.Icon.Load')
69 local c = self.cvars
70 if c.type == 'aura' then
71 self.spiral:SetReverse(true)
72 else
73 self.spiral:SetReverse(false)
74 end
75
76 if not self.icon:IsShown() then
77 self.icon:Show()
78 end
79 print('icon texture=', self.spellIcon or self.itemIcon)
80 self.icon:SetTexture(self.spellIcon or self.itemIcon)
81 end
82
83
84 --- Advances the display state, applying any visual transitions as necessary;
85 -- @param self frame object
86 -- @param newState state value; 1 for inactive, 2 for untimed active, 3 for timed active
87 -- @param forcePrevious force the frame's lastState to this value to block off OnUpdate difference tests
88 -- even if forced, the actual history value will still be used for method scope
89 p.SetState = function(self, newState, forcePrevious)
90
91 --print(cWord(self:GetName()), 'state change issued:', cNum(state), cType(previous))
92
93 local previous = self.displayState
94 self.prevState = forcePrevious and forcePrevious or previous
95 self.displayState = newState
96 print('SetState', cNum(newState), '(from '..cType(previous)..')', cText(self.timerName))
97 --_G.print('Prototype.'..self.cvars.type, 'SetState', cNum(newState), '(from '..cType(previous)..')', cText(self.timerName))
98
99 --- Change transitions
100 if newState ~= previous then
101 print(cText(' Transition'))
102 if newState == HIDDEN then
103 print(cText(' to HIDDEN'))
104 -- to HIDDEN
105 if previous then
106 -- has to have been ACTIVE or PASSIVE at this point
107 if previous == ACTIVE then
108 print(' from ACTIVE')
109 self.spiral:StopAnimating()
110 else
111 print(' from PASSIVE')
112 end
113
114 self.Intro:Stop()
115 if self.event then
116 print(' set by event script')
117 self.Outro:Play()
118 else
119 print(' non-event source')
120 self:Hide()
121 end
122 end
123 -- want to end here if HIDDEN from nil
124 else
125 -- to ACTIVE or PASSIVE
126 self.Outro:Stop() -- stop any running outro
127
128
129 if newState == ACTIVE then
130
131 -- and is ACTIVE
132 self:Show()
133 self.spiral:Show()
134 self.spiral:SetCooldown(self.charges and self.chargeStart or self.start, self.charges and self.chargeDuration or self.duration)
135 print('spiral:Play() new', self.charges and self.chargeStart or self.start, self.charges and self.chargeDuration or self.duration)
136 end
137
138 if previous and previous ~= HIDDEN then
139 print(cText(' from vis'))
140 -- from visible
141 if self.event then
142 self.refresh = true
143 self.Retro:Play()
144 end
145 else
146 print(cText(' from non-vis'))
147 if self.event then
148 self.Intro:Play()
149 else
150 self:Show()
151 end
152 end
153 end
154 else
155 --- No-change transitions
156 if newState == ACTIVE then
157 -- ACTIVE to ACTIVE
158 print(cText(''))
159 self.spiral:Show()
160 self.spiral:SetCooldown(self.charges and self.chargeStart or self.start, self.charges and self.chargeDuration or self.duration)
161 print('spiral:Play() new', self.charges and self.chargeStart or self.start, self.charges and self.chargeDuration or self.duration)
162 else
163 print(cPink('stopping spiral'))
164 self.spiral:Hide()
165 end
166
167 -- non-HIDDEN to non-HIDDEN and not a dry fire
168 if self.event and newState ~= HIDDEN then
169 self.refresh = true
170 self.Retro:Play()
171 end
172 end
173
174 if newState ~= HIDDEN then
175 print(cText(' CVars:'))
176 local c
177 if newState == ACTIVE then
178 print('apply active profile')
179 c = self.cvars.active
180 self.fillState = 1
181 else
182 print('apply passive profile')
183 c = self.cvars.passive
184 self.fillState = 2
185 end
186
187 if self.icon and c.icon then
188
189 print(cText(' '), cWord('desat=')..cBool(c.icon.desaturated), cWord('color=')..cNum(tconcat(c.icon.color, ', ')))
190 self.icon:SetVertexColor(unpack(c.icon.color))
191 self.icon:SetDesaturated(c.icon.desaturated)
192 end
193 self:UpdateAlpha(T.inCombat, self.displayState, self.fillState)
194 end
195 end
196
197 p.Update = function(self)
198
199 if self.displayState == 0 and self.prevState ~= 0 then
200 print('flip to', self.displayState)
201 self.prevState = self.displayState -- quietly advance state
202 self.percent = 1
203 self.valueFull = 0
204 self.value = 0
205 self:SetText()
206 elseif self.displayState == 1 and self.prevState ~= 1 then
207 print('flip to', self.displayState)
208 self.prevState = self.displayState -- quietly advance state
209 self.valueFull = 0
210 self.value = 0
211 self.percent = 1
212 self:SetText()
213 print(self.percent, self.duration, self.start, self.expires)
214 elseif self.displayState == 2 then
215 if self.prevState ~= 2 or self.refresh then
216 print('flipped to', self.displayState)
217 self.prevState = self.displayState -- quietly advance state
218 self.refresh = nil
219 end
220 -- prevState is set externally
221 local time = GetTime()
222 if self.expires <= time and self.charges == self.maxCharges then
223 _G.print(self.cvars.type, 'timer expired, set to', (self.cvars.persist and self.flags.passive or self.flags.hidden))
224 self.percent = 1
225 self.duration = 0
226 self.expires = 0
227 self.start= 0
228 self.valueFull = self.duration
229 self.value = self.duration
230 self.elapsed = self.duration
231 self.remaining = 0
232 self:SetState(self.cvars.persist and self.flags.passive or self.flags.hidden)
233 else
234 self.percent = (self.charges and self.charges < self.maxCharges) and ((time - self.chargeStart) / self.chargeDuration) or ((time - self.start) / self.duration)
235 self.valueFull = self.expires - time
236 self.elapsed = time - self.start
237 self.remaining = self.duration - time
238
239 self.value = floor(self.valueFull)
240 end
241
242 --PlaySoundFile(self.cvars.sound_active)
243 self:SetText()
244 end
245 end