diff ObjectiveTracker/XPTracker.lua @ 23:e837384ac363

Separating objective tracker module
author Nenue
date Sun, 10 Apr 2016 04:35:32 -0400
parents XPTracker.lua@605e8f0e46db
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ObjectiveTracker/XPTracker.lua	Sun Apr 10 04:35:32 2016 -0400
@@ -0,0 +1,92 @@
+--- ${PACKAGE_NAME}
+-- @file-author@
+-- @project-revision@ @project-hash@
+-- @file-revision@ @file-hash@
+-- Created: 4/6/2016 4:44 AM
+
+local B = select(2,...).frame
+local mod = B:RegisterModule("ObjectiveTracker", _G.VeneerObjectiveWrapper, 'BuffFrame')
+local tostring = tostring
+local UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled = UnitLevel, IsResting, UnitXP, UnitXPMax, GetXPExhaustion, IsXPUserDisabled
+local Wrapper = _G.VeneerObjectiveWrapper
+local print = B.print('XPTracker')
+
+mod.InitializeXPTracker = function()
+  local XPBar = Wrapper.XPBar
+  if UnitLevel('player') == 100 then
+    XPBar:Hide()
+    return
+  end
+
+  --- xp bar
+  XPBar:SetWidth(mod.Conf.Wrapper.WrapperWidth - Wrapper.CloseButton:GetWidth())
+  XPBar.statusbg:SetAllPoints(XPBar)
+  XPBar:RegisterEvent('DISABLE_XP_GAIN')
+  XPBar:RegisterEvent('ENABLE_XP_GAIN')
+  XPBar:SetScript('OnEvent', mod.UpdateXP)
+
+  if not IsXPUserDisabled() then
+    mod.EnableXP(XPBar)
+  else
+    mod.DisableXP(XPBar)
+  end
+
+  mod.UpdateXP(XPBar)
+end
+
+mod.EnableXP = function(self)
+  self:RegisterEvent('PLAYER_XP_UPDATE')
+  self:RegisterEvent('PLAYER_LEVEL_UP')
+  self:RegisterEvent('PLAYER_UPDATE_RESTING')
+  self.statusbg:SetTexture(0,0,0,.25)
+  self:Show()
+end
+
+mod.DisableXP = function(self)
+  self:UnregisterEvent('PLAYER_XP_UPDATE')
+  self:UnregisterEvent('PLAYER_LEVEL_UP')
+  self:UnregisterEvent('PLAYER_UPDATE_RESTING')
+  self.statusbg:SetTexture(0.5,0.5,0.5,0.5)
+  self:Hide()
+end
+
+mod.UpdateXP = function(self, event)
+  if event == 'DISABLE_XP_GAIN' then
+    mod.DisableXP(self)
+  elseif event == 'ENABLE_XP_GAIN' then
+    mod.EnableXP(self)
+  end
+
+  if not IsXPUserDisabled() then
+
+    local xp = UnitXP('player')
+    local xpmax = UnitXPMax('player')
+    local rest = GetXPExhaustion()
+    self.foreground:SetWidth((xp/xpmax) * self:GetWidth())
+    if rest then
+      self.rested:ClearAllPoints()
+      if xp == 0 then
+        self.rested:SetPoint('TOPLEFT', self, 'TOPLEFT', 0, 0)
+      else
+        self.rested:SetPoint('TOPLEFT', self.fg, 'TOPRIGHT', 0, 0)
+      end
+
+      if (xp + rest) > xpmax then
+        self.rested:SetPoint('BOTTOMRIGHT', self, 'BOTTOMRIGHT', 0, 0)
+      else
+        self.rested:SetWidth((rest/xpmax) * self:GetWidth())
+      end
+      self.rested:SetPoint('BOTTOM', self, 'BOTTOM')
+      self.rested:Show()
+    else
+      self.rested:Hide()
+    end
+
+    if IsResting() then
+      self.statusbg:SetTexture(.2,.8,.2,.5)
+    else
+      self.statusbg:SetTexture(0,0,0,.25)
+    end
+    self.xpText:SetText(xp .. '/'.. xpmax .. (rest and (' ('..tostring(rest)..')') or ''))
+  end
+end
\ No newline at end of file