diff Modules/WorldState.lua @ 113:2105b6e5095f

- Added Blood of Sargeras to currency list - Fixed panel ordering issues when a module is loaded on the fly.
author Nick@Zahhak
date Sun, 26 Mar 2017 06:25:18 -0400
parents 7c77fde36287
children 6748c98a6c6c
line wrap: on
line diff
--- a/Modules/WorldState.lua	Thu Mar 23 05:29:03 2017 -0400
+++ b/Modules/WorldState.lua	Sun Mar 26 06:25:18 2017 -0400
@@ -2,31 +2,25 @@
 -- WorldState.lua
 -- Created: 10/7/2016 10:55 PM
 -- %file-revision%
---
+-- An extensible panel group for HUD values
 
 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
 local WorldStateBlockMixin = {}
 VeneerOrderHallMixin = {
   anchorPoint = 'TOP',
   anchorFrom = 'TOP',
+  anchorPriority = 1,
   anchorX = 0,
   anchorY = 0,
   addonTrigger = 'Blizzard_OrderHallUI',
   addonFrame = 'OrderHallCommandBar',
 }
 
-VeneerWorldStateHeadsUpMixin = {
-}
-
-VeneerWorldStateCurrencyMixin = {
-}
-VeneerWorldStateProgressMixin = {
-  keepOpen = true,
-}
 VeneerWorldStateMixin = {
   maxHeight = 0,
   detectedFrames = {},
   anchorPoint = 'TOP',
+  modules = {}
 }
 
 function VeneerWorldStateMixin:Reset()
@@ -42,7 +36,6 @@
   --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
   print('|cFFFFFF00'..self:GetName()..'|r:Setup()')
 
-  self.modules = self.modules or {self:GetChildren()}
   for i, frame in ipairs(self.modules) do
     print('--'.. frame:GetName()..' exists')
     if frame.Setup then
@@ -75,7 +68,7 @@
   self:RegisterEvent('PLAYER_ENTERING_WORLD')
   self:RegisterEvent('PLAYER_REGEN_ENABLED')
   self:RegisterEvent('PLAYER_REGEN_DISABLED')
-  Veneer:AddHandler(self, self.anchorPoint, 2)
+  Veneer:AddHandler(self, self.anchorPoint, self.anchorPriority)
   SLASH_VENEERWORLDSTATE1 = "/vws"
   SLASH_VENEERWORLDSTATE2 = "/worldstate"
   SlashCmdList.VENEERWORLDSTATE = function()
@@ -157,14 +150,17 @@
 function VeneerOrderHallMixin:Setup()
   print('|cFFFFFF00'..self:GetName()..':Setup()')
   self:SetParent(OrderHallCommandBar)
-  self:RegisterEvent("ZONE_CHANGED");
-  self:RegisterEvent("ZONE_CHANGED_INDOORS");
-  self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
+  self:RegisterEvent("UNIT_AURA");
+  self:RegisterEvent("GARRISON_FOLLOWER_CATEGORIES_UPDATED")
+  self:RegisterEvent("GARRISON_FOLLOWER_ADDED")
+  self:RegisterEvent("GARRISON_FOLLOWER_REMOVED")
+
   self:SetShown(true)
 end
 
 function VeneerOrderHallMixin:OnLoad()
   Veneer:AddHandler(self, 'TOP', 1)
+  self:EnableMouse(false)
 end
 
 function VeneerOrderHallMixin:OnEvent(event, ...)
@@ -189,7 +185,6 @@
 end
 
 function VeneerOrderHallMixin:Update()
-
   if not OrderHallCommandBar then
     print('|cFFFF4400'..self:GetName()..' updater called without target')
     return
@@ -201,7 +196,17 @@
   OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
   OrderHallCommandBar.WorldMapButton:Hide()
   OrderHallCommandBar:EnableMouse(false)
-  self:SetSize(700, 24)
+  self:SetSize(700, 22)
+
+  local troops = OrderHallCommandBar.TroopSummary
+  if troops then
+    for _, category in ipairs(troops) do
+      category.Count:SetFontObject(VeneerNumberFont)
+      category.Count:ClearAllPoints()
+      category.Count:SetPoint('BOTTOMRIGHT', category.Icon, 'BOTTOMRIGHT', -1, 1)
+    end
+  end
+  
 
 
   print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
@@ -209,308 +214,7 @@
   Veneer:DynamicReanchor()
 end
 
-function VeneerWorldStateCurrencyMixin:OnLoad ()
-  self:RegisterEvent("PLAYER_ENTERING_WORLD");
-  self:RegisterEvent("ZONE_CHANGED");
-  self:RegisterEvent("ZONE_CHANGED_INDOORS");
-  self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
-  self:RegisterEvent('CURRENCY_DISPLAY_UPDATE')
-  self:RegisterEvent('CHAT_MSG_CURRENCY')
-end
 
-function VeneerWorldStateCurrencyMixin:OnEvent (event, arg)
-  self:Update()
-end
-local zoneCurrency = {
-  ['Suramar'] = 1155,
-  ["Sashj'tar Ruins"] = 1155,
-  ["Faronaar Ruins"] = 1155
-}
-local zoneBountyInfo = {
-  ['Suramar'] = 1859,
-  ["Sashj'tar Ruins"] = 1859,
-  ["Faronaar Ruins"] = 1859,
-
-  ['Azsuna'] = 1900,
-}
-local globalBountyInfo = {
-}
-function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
-  local zoneText = GetRealZoneText()
-  local canShow = false
-  if zoneText then
-    local currency = zoneCurrency[zoneText]
-    if currency then
-      local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(zoneCurrency[zoneText])
-      self.Icon:SetTexture(texture)
-      self.Label:SetFormattedText("%d / %d", earned, totalMax)
-      self:SetWidth(self.Icon:GetWidth() + self.Label:GetStringWidth() + 6)
-      canShow = true
-    end
-  else
-  end
-  self:SetShown(canShow)
-  VeneerWorldState:Reanchor(true)
-end
-
-function VeneerWorldStateProgressMixin:OnUpdate(sinceLast)
-  self.timeLived = (self.timeLived or 0) + sinceLast
-  if self.keepOpen then
-    return
-  end
-  if self.timeLived >= 3 and not self.TimedFadeOut:IsPlaying() then
-    self.TimedFadeOut:Play()
-  end
-end
-
-function VeneerWorldStateProgressMixin:OnLoad()
-  self:RegisterEvent('PLAYER_EQUIPMENT_CHANGED')
-
-  self:RegisterEvent("PLAYER_XP_UPDATE");
-  self:RegisterEvent("UPDATE_EXHAUSTION");
-  self:RegisterEvent("PLAYER_LEVEL_UP");
-  self:RegisterEvent("PLAYER_UPDATE_RESTING");
-
-  self:RegisterEvent("ARTIFACT_UPDATE");
-  self:RegisterEvent("ARTIFACT_XP_UPDATE");
-  self:RegisterEvent("ARTIFACT_CLOSE");
-  self:RegisterEvent("ARTIFACT_MAX_RANKS_UPDATE");
-
-  self.progressPercent = 0
-  self.progressAmount = 0
-  self.progressMax = 1
-  self.progressOverflow = 0
-
-end
-
-function VeneerWorldStateProgressMixin:Setup()
-  self:UpdateXPGain()
-  if self.canGainXP then
-    self.mode = 'xp'
-  else
-    self.mode = 'artifact'
-  end
-  print('setup mode:', self.mode)
-end
-
-function VeneerWorldStateProgressMixin:OnEvent(event, ...)
-  local lastMode = self.mode
-  if event == 'PLAYER_LEVEL_UP' or event == 'ENABLE_XP_GAIN' or event == 'DISABLE_XP_GAIN' then
-    self:UpdateXPGain()
-  elseif event == 'ARTIFACT_XP_UPDATE' or event == 'ARTIFACT_UPDATE' then
-    self.mode = 'artifact'
-
-  elseif event == 'PLAYER_EQUIPMENT_CHANGED' then
-    local slot, hasEquip = ...
-    if slot == 16 then
-      self.mode = 'artifact'
-      lastMode = nil
-    end
-  elseif event == 'PLAYER_XP_UPDATE' or event == 'PLAYER_LEVEL_UP' then
-    print('forcing to XP mode')
-    self.mode = 'xp'
-  end
-  self.modeChanged = (lastMode ~= self.mode)
-  if self.modeChanged and self:IsVisible() then
-    print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()', event, ...)
-    self:AnimateMode()
-  else
-    print('|cFFFFFF00'..self:GetName()..':Update()', event, ...)
-    self:Update()
-  end
-end
-function VeneerWorldStateProgressMixin:UpdateXPGain()
-  self.canGainXP = (UnitLevel('player') < GetMaxPlayerLevel()) and (not IsXPUserDisabled())
-  if not self.canGainXP then
-    self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
-  end
-end
-
-local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
-local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
-
-
-local progressHandlers = {
-  xp = function(self)
-    local hasNewInfo, showChange = false, false
-    local xp = UnitXP('player')
-    local xpMax = UnitXPMax('player')
-    local bonusXP = GetXPExhaustion()
-    if xp then
-      self.progressPercent = xp / xpMax
-    end
-    self.progressText = '|cFFFFCC00' .. UnitLevel('player') .. '|r ' .. xp .. '/' .. xpMax
-    if bonusXP then
-      self.progressOverflow = min(1,(bonusXP / xpMax))
-      self.OverflowBar:SetColorTexture(0.5, 0.5,0.5, 0.25)
-      self.OverflowBar:SetPoint('LEFT', self.ProgressBar, 'LEFT')
-    else
-      self.progressOverflow = nil
-    end
-    self.ProgressBar:SetColorTexture(0, 0.5,1,1)
-    self.OverflowAnchor = self.ProgressBar
-    self.hasNewInfo = (self.progressAmount ~= xp)
-    showChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
-
-    self.progressAmount = xp
-    self.progressMax = xpMax
-    return hasNewInfo, showChange
-  end,
-  artifact = function(self)
-    local hasNewInfo, showChange = false, false
-    local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
-    if itemID then
-      local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
-      print('    API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
-      hasNewInfo = (self.progressAmount ~= totalXP)
-      showChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
-
-      if totalXP > nextRankCost then
-        self.progressPercent = 1
-      else
-        self.progressPercent = totalXP / nextRankCost
-      end
-
-      self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
-
-      self.ProgressBar:SetColorTexture(1,0.5,0,1)
-      self.OverflowBar:Hide()
-
-      if totalXP > nextRankCost then
-        self.progressText = self.progressText .. ' Level Up!'
-        self.progressOverflow = (totalXP - nextRankCost) / nextRankCost
-        self.OverflowBar:SetPoint('LEFT', self.ProgressBG, 'LEFT')
-        self.OverflowAnchor = self.OverflawBar
-      else
-        self.progressOverflow = nil
-        self.OverflowAnchor = self.ProgressBar
-      end
-
-      self.progressAmount = totalXP
-      self.progressMax = nextRankCost
-    else
-      self.progressOverflow = nil
-      self.progressAmount = 0
-      self.progressMax = 1
-      self.progressText = ''
-    end
-    return hasNewInfo, showChange
-  end
-}
-
-function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
-
-  local progressChange = false
-  print('  current mode:', self.mode, 'vis:', self:IsVisible())
-  if (not self.mode) or (not progressHandlers[self.mode]) then
-    self:HidePanel()
-    return
-  end
-
-  local hasNewInfo, showProgress = progressHandlers[self.mode](self)
-  self:SetSize(600,16)
-  if hasNewInfo then
-    self.timeOut = nil
-    self.timeLived = 0
-  end
-
-
-  if not self:IsVisible() then
-    self.TransitionFadeIn:Play()
-  else
-    self:ShowPanel()
-  end
-
-  print('    Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'new:', hasNewInfo, 'shown:', self:IsShown())
-  print('    Metrics:', self:IsVisible(), self:GetWidth(), self.ProgressBG:GetWidth())
-  if self.progressPercent > 0 then
-    self.ProgressBar:Show()
-    self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()* self.progressPercent , 0)
-    self.Label:SetText(self.progressText)
-
-    self.ProgressSpark:ClearAllPoints()
-    if self.progressOverflow then
-      print('    Overflow:', self.progressOverflow)
-      self.OverflowBar:Show()
-      self.OverflowBar:SetWidth(self.progressOverflow * self:GetWidth(), 0)
-    else
-      self.OverflowBar:Hide()
-    end
-    self.ProgressSpark:SetPoint('CENTER', self.OverflowAnchor, 'RIGHT', 0, 0)
-
-  else
-    self.ProgressBar:Hide()
-  end
-
-  if self.progressOverflow and (self.progressOverflow >= self.progressPercent) then
-    self.OverflowBar:SetDrawLayer('ARTWORK', 1)
-    self.ProgressBar:SetDrawLayer('ARTWORK', 2)
-  else
-    self.OverflowBar:SetDrawLayer('ARTWORK', 2)
-    self.ProgressBar:SetDrawLayer('ARTWORK', 1)
-  end
-
-    if progressChange then
-    self:AnimateProgress(progressChange)
-  end
-
-  self.modeChanged = nil
-end
-
-
-function VeneerWorldStateProgressMixin:AnimateProgress(progressChange)
-
-
-  local changeAnchor = (self.progressOverflow and self.OverflowBar) or self.ProgressBar
-  local progressWidth = self:GetWidth() * min(progressChange, changeAnchor:GetWidth())
-
-  self.ProgressAdded:Show()
-  self.ProgressAdded:ClearAllPoints()
-  self.ProgressAdded:SetPoint('TOPRIGHT', changeAnchor, 'TOPRIGHT', 0, 0)
-  self.ProgressAdded:SetPoint('BOTTOMLEFT', changeAnchor, 'BOTTOMRIGHT', - (progressWidth), 0)
-
-  print('  Render change:', progressWidth, changeAnchor)
-  self.ProgressFlash.translation:SetOffset(progressWidth, 0)
-  self.ProgressFlash:Play()
-end
-
-function VeneerWorldStateProgressMixin:OnMouseDown(button)
-  if button == 'RightButton' then
-    if self.keepOpen then
-      self.keepOpen = nil
-      self.timeLived = 1000
-    else
-      self.keepOpen = true
-
-      self.modeChanged = true
-    end
-    print('keepOpen =', self.keepOpen)
-    self:Update()
-  else
-
-    if self.mode == 'xp' then
-      self.mode = 'artifact'
-    else
-      if not self.canGainXP then
-        return
-      end
-      self.mode = 'xp'
-    end
-    print('|cFFFF4400Change mode:', self.mode)
-
-
-    self:AnimateMode()
-  end
-
-end
-
-function VeneerWorldStateProgressMixin:AnimateMode()
-
-  self.TransitionFadeIn:Stop()
-  print('|cFF88FF00'..self:GetName()..'.TransitionFadeOut:Play()')
-  self.modeChanged = true
-  self.TransitionFadeOut:Play()
-end
 
 do
   function WorldStateBlockMixin:ShowPanel()
@@ -555,3 +259,4 @@
   end
 end
 
+