annotate ObjectiveTracker/XPTracker.lua @ 37:e84d645c8ab8

- revised the tracker update function to build its complete data list up front and use the values as points of comparison for determining possible out of place blocks, which will be iterated over afterward to remove what wasn't re-used - also entailed revising the exact role of global event handlers and function hooks, limiting their directions of communication so one doesn't end up calling the other multiple or inifinity times - schema handling polish
author Nenue
date Mon, 18 Apr 2016 07:56:23 -0400
parents e837384ac363
children
rev   line source
Nenue@19 1 --- ${PACKAGE_NAME}
Nenue@19 2 -- @file-author@
Nenue@19 3 -- @project-revision@ @project-hash@
Nenue@19 4 -- @file-revision@ @file-hash@
Nenue@19 5 -- Created: 4/6/2016 4:44 AM
Nenue@19 6
Nenue@19 7 local B = select(2,...).frame
Nenue@19 8 local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
Nenue@19 9 local tostring = tostring
Nenue@19 10 local UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled = UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled
Nenue@19 11 local Wrapper = _G.VeneerObjectiveWrapper
Nenue@19 12 local print = B.print('XPTracker')
Nenue@19 13
Nenue@19 14 mod.InitializeXPTracker = function()
Nenue@19 15 local XPBar = Wrapper.XPBar
Nenue@19 16 if UnitLevel('player') == 100 then
Nenue@19 17 XPBar:Hide()
Nenue@19 18 return
Nenue@19 19 end
Nenue@19 20
Nenue@19 21 --- xp bar
Nenue@19 22 XPBar:SetWidth(mod.Conf.Wrapper.WrapperWidth - Wrapper.CloseButton:GetWidth())
Nenue@19 23 XPBar.statusbg:SetAllPoints(XPBar)
Nenue@19 24 XPBar:RegisterEvent('DISABLE_XP_GAIN')
Nenue@19 25 XPBar:RegisterEvent('ENABLE_XP_GAIN')
Nenue@19 26 XPBar:SetScript('OnEvent', mod.UpdateXP)
Nenue@19 27
Nenue@19 28 if not IsXPUserDisabled() then
Nenue@19 29 mod.EnableXP(XPBar)
Nenue@19 30 else
Nenue@19 31 mod.DisableXP(XPBar)
Nenue@19 32 end
Nenue@19 33
Nenue@19 34 mod.UpdateXP(XPBar)
Nenue@19 35 end
Nenue@19 36
Nenue@19 37 mod.EnableXP = function(self)
Nenue@19 38 self:RegisterEvent('PLAYER_XP_UPDATE')
Nenue@19 39 self:RegisterEvent('PLAYER_LEVEL_UP')
Nenue@19 40 self:RegisterEvent('PLAYER_UPDATE_RESTING')
Nenue@19 41 self.statusbg:SetTexture(0,0,0,.25)
Nenue@19 42 self:Show()
Nenue@19 43 end
Nenue@19 44
Nenue@19 45 mod.DisableXP = function(self)
Nenue@19 46 self:UnregisterEvent('PLAYER_XP_UPDATE')
Nenue@19 47 self:UnregisterEvent('PLAYER_LEVEL_UP')
Nenue@19 48 self:UnregisterEvent('PLAYER_UPDATE_RESTING')
Nenue@19 49 self.statusbg:SetTexture(0.5,0.5,0.5,0.5)
Nenue@19 50 self:Hide()
Nenue@19 51 end
Nenue@19 52
Nenue@19 53 mod.UpdateXP = function(self, event)
Nenue@19 54 if event == 'DISABLE_XP_GAIN' then
Nenue@19 55 mod.DisableXP(self)
Nenue@19 56 elseif event == 'ENABLE_XP_GAIN' then
Nenue@19 57 mod.EnableXP(self)
Nenue@19 58 end
Nenue@19 59
Nenue@19 60 if not IsXPUserDisabled() then
Nenue@19 61
Nenue@19 62 local xp = UnitXP('player')
Nenue@19 63 local xpmax = UnitXPMax('player')
Nenue@19 64 local rest = GetXPExhaustion()
Nenue@19 65 self.foreground:SetWidth((xp/xpmax) * self:GetWidth())
Nenue@19 66 if rest then
Nenue@19 67 self.rested:ClearAllPoints()
Nenue@19 68 if xp == 0 then
Nenue@19 69 self.rested:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 0)
Nenue@19 70 else
Nenue@19 71 self.rested:SetPoint('TOPLEFT', self.fg, 'TOPRIGHT', 0, 0)
Nenue@19 72 end
Nenue@19 73
Nenue@19 74 if (xp + rest) > xpmax then
Nenue@19 75 self.rested:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, 0)
Nenue@19 76 else
Nenue@19 77 self.rested:SetWidth((rest/xpmax) * self:GetWidth())
Nenue@19 78 end
Nenue@19 79 self.rested:SetPoint('BOTTOM', self, 'BOTTOM')
Nenue@19 80 self.rested:Show()
Nenue@19 81 else
Nenue@19 82 self.rested:Hide()
Nenue@19 83 end
Nenue@19 84
Nenue@19 85 if IsResting() then
Nenue@19 86 self.statusbg:SetTexture(.2,.8,.2,.5)
Nenue@19 87 else
Nenue@19 88 self.statusbg:SetTexture(0,0,0,.25)
Nenue@19 89 end
Nenue@19 90 self.xpText:SetText(xp .. '/'.. xpmax .. (rest and (' ('..tostring(rest)..')') or ''))
Nenue@19 91 end
Nenue@19 92 end