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