Nenue@6: --- ${PACKAGE_NAME} Nenue@6: -- @file-author@ Nenue@6: -- @project-revision@ @project-hash@ Nenue@6: -- @file-revision@ @file-hash@ Nenue@6: -- Created: 1/15/2016 6:38 PM Nenue@6: local T, _G = Turok, _G Nenue@6: local GetTime, PlaySoundFile, format = GetTime, PlaySoundFile, string.format Nenue@6: local unpack, tconcat = unpack, table.concat Nenue@6: local ACTIVE, PASSIVE, HIDDEN = 2, 1, 0 Nenue@6: local mod = T.modules.TimerControl Nenue@6: --@debug@ Nenue@6: local cType, cText, cNum, cWord, cKey, cPink, cBool = cType, cText, cNum, cWord, cKey, cPink, cBool Nenue@6: local print = function(...) Nenue@6: if _G.Devian and _G.DevianDB.workspace ~= 1 then Nenue@6: _G.print('Progressbar', ...) Nenue@6: end Nenue@6: end Nenue@9: local uprint = function(...) Nenue@9: if _G.Devian and _G.DevianDB.workspace ~= 1 then Nenue@9: _G.print('Update', ...) Nenue@9: end Nenue@9: end Nenue@6: --@end-debug@ Nenue@6: local GetPrint = function(trace) Nenue@6: if trace then Nenue@6: return print Nenue@6: else Nenue@6: return function() end Nenue@6: end Nenue@6: end Nenue@6: T.defaults.spirit.progressbar = { Nenue@6: combatFade = true, Nenue@6: alpha = 1, Nenue@6: alpha_ooc = 0, Nenue@6: alpha_ooc_passive = 0, Nenue@6: alpha_ooc_active = 1, Nenue@6: Nenue@6: width = 200, height = 24, Nenue@6: parent = 1, Nenue@6: anchor = 'CENTER', anchorTo = 'CENTER', Nenue@6: setAllPoints = true, Nenue@6: strata = 'MEDIUM', Nenue@6: Nenue@6: foreground_color = {1,0.5,0,0.5}, Nenue@6: foreground_blend = 'ADD', Nenue@6: foreground_texture = [[Interface\Addons\Turok\Media\statusbar\Minimalist.tga]], Nenue@6: background_color = {1,1,1,0.5}, Nenue@6: background_blend = 'BLEND', Nenue@6: padding = 3, Nenue@6: spacing = 1, Nenue@6: foreground_inset= 0, Nenue@6: icon = { Nenue@6: embedded = true, Nenue@6: alpha = 1, Nenue@6: alpha_ooc = 1, Nenue@6: size = 24, Nenue@6: x = -6, y = 0, Nenue@6: anchor = 'RIGHT', anchorTo = 'LEFT', Nenue@6: parent = 1, Nenue@6: }, Nenue@6: Nenue@6: -- text Nenue@6: color = {0,0,0,.5}, Nenue@6: } Nenue@6: Nenue@6: local p = mod.prototype.display.progressbar Nenue@6: p.type='display' Nenue@6: Nenue@6: p.inherits = 'TurokProgressbarTemplate' Nenue@6: p.cvars = {} Nenue@6: Nenue@6: --- Load-time config retrieval Nenue@6: p.Init = function (self) Nenue@6: local print = GetPrint(self.trace) Nenue@6: Nenue@6: print(' ', self:GetName(),'<- Progressbar.Load') Nenue@6: print(' ', self:GetHeight()) Nenue@6: Nenue@6: if self.cvars.hideIcon then Nenue@6: self.enableIcon = false Nenue@6: print('Icon hidden') Nenue@6: else Nenue@6: self.icon:Hide() Nenue@6: if self.cvars.icon then Nenue@6: print('Icon data:') Nenue@6: for k,v in pairs(self.cvars.icon) do Nenue@6: print(' ', k, '=', v) Nenue@6: end Nenue@6: print(cWord(' icon=')..cText(self.itemIcon or self.spellIcon)) Nenue@6: self.icon:SetTexture(self.itemIcon or self.spellIcon) Nenue@6: self.icon:ClearAllPoints() Nenue@6: T.SetTextureLayout(self.icon, self.cvars.icon) Nenue@6: self.enableIcon = true Nenue@6: self.icon:Show() Nenue@6: end Nenue@6: Nenue@6: end Nenue@6: Nenue@6: T.SetStatusTextures(self, self.cvars) Nenue@6: Nenue@9: uprint(self.background:GetWidth(), self.background:GetHeight()) Nenue@9: uprint(self.foreground:GetWidth(), self.foreground:GetHeight()) Nenue@6: end Nenue@6: Nenue@6: Nenue@6: --- Negotiate the config differences between different display states Nenue@6: -- Hidden - display is or should (via fade-out) be hidden Nenue@6: -- Passive - display is visible, but no timing information is processed Nenue@6: -- Active - display is visible and counting time; on expiration, it will downgrade itself to passive or hidden Nenue@6: p.SetState = function(self, newState, forcePrevious) Nenue@6: local print = GetPrint(self.trace) Nenue@6: Nenue@6: local previous = self.displayState Nenue@6: self.prevState = forcePrevious and forcePrevious or previous Nenue@6: self.displayState = newState Nenue@6: Nenue@6: local newState, previous = self.displayState, self.prevState Nenue@6: --- Transition Nenue@6: if newState ~= previous then Nenue@6: print(cText(' Transition:'), cWord(self.spellName)) Nenue@6: if newState == HIDDEN then Nenue@6: print(cText(' to HIDDEN')) Nenue@6: -- to HIDDEN Nenue@6: if previous then Nenue@6: -- has to have been ACTIVE or PASSIVE at this point Nenue@6: self.Intro:Stop() Nenue@6: if self.event then Nenue@6: self.Outro:Play() Nenue@6: else Nenue@6: self:Hide() Nenue@6: end Nenue@6: end Nenue@6: -- want to end here if HIDDEN from nil Nenue@6: else Nenue@6: -- to ACTIVE or PASSIVE Nenue@6: self.Outro:Stop() -- stop any running outro Nenue@6: Nenue@6: Nenue@6: if newState == ACTIVE then Nenue@6: Nenue@6: -- and is ACTIVE Nenue@6: self:Show() Nenue@6: end Nenue@6: Nenue@6: print(cText(' from'), cNum(previous)) Nenue@6: if previous and previous ~= HIDDEN then Nenue@6: -- from visible Nenue@6: if self.event then Nenue@6: self.refresh = true Nenue@6: self.Retro:Play() Nenue@6: end Nenue@6: else Nenue@6: if self.event then Nenue@6: self.Intro:Play() Nenue@6: else Nenue@6: self:Show() Nenue@6: end Nenue@6: end Nenue@6: end Nenue@6: else Nenue@6: if newState == ACTIVE then Nenue@6: print(cText('')) Nenue@6: -- and is ACTIVE Nenue@6: end Nenue@6: Nenue@6: if self.event and newState ~= HIDDEN then Nenue@6: self.refresh = true Nenue@6: self.Retro:Play() Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: if newState ~= HIDDEN then Nenue@6: print(cText(' CVars:')) Nenue@6: local c = (newState == ACTIVE) and self.cvars.active or self.cvars.passive Nenue@6: if self.icon and c.icon then Nenue@6: print(cText(' '), cWord('desat=')..cBool(c.icon.desaturated), cWord('color=')..cNum(tconcat(c.icon.color, ', '))) Nenue@6: self.icon:SetVertexColor(unpack(c.icon.color)) Nenue@6: self.icon:SetDesaturated(c.icon.desaturated) Nenue@6: end Nenue@6: local c Nenue@6: if newState == ACTIVE then Nenue@6: self.fillState = 1 Nenue@6: c = self.cvars.active Nenue@6: else Nenue@6: self.fillState = 2 Nenue@6: c = self.cvars.passive Nenue@6: end Nenue@6: Nenue@6: if self.icon and c.icon then Nenue@6: print(cText(' '), cWord('desat=')..cBool(c.icon.desaturated), cWord('color=')..cNum(tconcat(c.icon.color, ', '))) Nenue@6: self.icon:SetVertexColor(unpack(c.icon.color)) Nenue@6: self.icon:SetDesaturated(c.icon.desaturated) Nenue@6: end Nenue@6: Nenue@6: self:UpdateAlpha(T.inCombat) Nenue@6: end Nenue@6: end Nenue@6: Nenue@6: p.Update = function (self) Nenue@6: local print = GetPrint(self.trace) Nenue@6: Nenue@6: -- Trigger business Nenue@6: -- Passive or Hidden, evaluate once Nenue@6: if self.displayState == 0 and self.prevState ~= 0 then Nenue@6: self.prevState = self.displayState -- quietly advance state Nenue@6: self.percent = 0 Nenue@6: self.valueFull = 0 Nenue@6: self.value = 0 Nenue@6: self:SetText() Nenue@6: self:SetProgress(self.percent) Nenue@6: print('go LOW') Nenue@6: elseif self.displayState == 1 and self.prevState ~= 1 then Nenue@6: self.prevState = self.displayState -- quietly advance state Nenue@6: self.valueFull = 0 Nenue@6: self.value = 0 Nenue@6: self.percent = 1 Nenue@6: self:SetText() Nenue@6: self:SetProgress(self.fill_inverse and 0 or 1) Nenue@6: print('go PASSIVE', self.percent, self.duration, self.start, self.expires) Nenue@6: elseif self.displayState == 2 then Nenue@6: if self.prevState ~= 2 or self.refresh then Nenue@6: self.prevState = self.displayState -- quietly advance state Nenue@6: self.refresh = nil Nenue@6: end Nenue@6: -- prevState is set externally Nenue@6: local time = GetTime() Nenue@6: if self.expires <= time and self.charges == self.maxCharges then Nenue@6: self.percent = 1 Nenue@6: self.duration = 0 Nenue@6: self.expires = 0 Nenue@6: self.start= 0 Nenue@6: self.valueFull = self.duration Nenue@6: self.value = self.duration Nenue@6: self.elapsed = self.duration Nenue@6: self.remaining = 0 Nenue@6: self:SetState(self.cvars.persist and self.flags.passive or self.flags.hidden) Nenue@6: else Nenue@6: self.valueFull = self.expires - time Nenue@6: self.percent = self.valueFull / self.duration Nenue@6: self.elapsed = time - self.start Nenue@6: self.remaining = self.duration - time Nenue@6: Nenue@6: self.value = floor(self.valueFull) Nenue@6: end Nenue@6: Nenue@6: --PlaySoundFile(self.cvars.sound_active) Nenue@6: self:SetText() Nenue@6: self:SetProgress(self.percent) Nenue@6: end Nenue@6: end