diff Modules/WorldState.lua @ 88:b107b4df7eb6

- core:DynamicReanchor - top-down evaluation of clustered frames - core:InternalReanchor(module) - bottom-up evaluation of target and frames anchored to it
author Nenue
date Thu, 20 Oct 2016 04:08:11 -0400
parents 27db212af783
children 74e714637d6a
line wrap: on
line diff
--- a/Modules/WorldState.lua	Wed Oct 19 16:51:17 2016 -0400
+++ b/Modules/WorldState.lua	Thu Oct 20 04:08:11 2016 -0400
@@ -63,8 +63,6 @@
 function VeneerWorldStateMixin:OnLoad ()
   self.modules = {self:GetChildren()}
   print('|cFFFFFF00'..self:GetName()..'|r!')
-  self:RegisterEvent('ARTIFACT_UPDATE')
-  self:RegisterEvent('ARTIFACT_XP_UPDATE')
   self:RegisterEvent('PLAYER_ENTERING_WORLD')
   self:RegisterEvent('PLAYER_REGEN_ENABLED')
   self:RegisterEvent('PLAYER_REGEN_DISABLED')
@@ -80,13 +78,7 @@
 
 function VeneerWorldStateMixin:OnEvent(event, arg)
   print(event, arg)
-
-  if event == 'PLAYER_LOGIN' then
-    if IsLoggedIn() and not self.initialized then
-      self.initialized = true
-      self:Setup()
-    end
-  elseif event == 'ZONE_CHANGED_NEW_AREA' or event == 'ADDON_LOADED' then
+  if event == 'ZONE_CHANGED_NEW_AREA' or event == 'ADDON_LOADED' then
     if OrderHallCommandBar then
       self:UnregisterEvent('ZONE_CHANGED_NEW_AREA')
       self:UnregisterEvent('ADDON_LOADED')
@@ -101,18 +93,19 @@
   end
 end
 
-function VeneerWorldStateMixin:Update()
+function VeneerWorldStateMixin:Update(isBatchUpdate)
   print('|cFFFFFF00All:Update()|r')
-  for i, frame in ipairs(self.modules) do
+  for index, frame in ipairs(self.modules) do
     if frame.Update then
-      print('  |cFFFF00FF'.. frame:GetName() .. ':Update()')
-      frame:Update()
+      print('  '..index..' |cFFFF00FFUpdate:|r '.. frame:GetName())
+      frame:Update(isBatchUpdate)
+      print('    ', frame:IsVisible(), frame:IsShown())
     end
   end
 end
 
 function VeneerWorldStateMixin:Reanchor(isUpdate)
-  print('|cFFFFFF00'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
+  print('  |cFF0088FF'..self:GetName()..':Reanchor()|r', #self.modules, 'blocks')
   self.maxHeight = 0
   for i, frame in ipairs(self.modules) do
     print('  '..frame:GetName()..':',frame:IsShown(), frame:IsVisible(), frame:GetHeight())
@@ -141,12 +134,28 @@
 
 function VeneerOrderHallMixin:Setup()
   print('|cFFFFFF00'..self:GetName()..':Setup()')
-  hooksecurefunc(OrderHallCommandBar,'Show', function()
-    self:Update()
-  end)
-  hooksecurefunc(OrderHallCommandBar,'Hide', function()
-    self:Update()
-  end)
+  self:SetParent(OrderHallCommandBar)
+  self:RegisterEvent("ZONE_CHANGED");
+  self:RegisterEvent("ZONE_CHANGED_INDOORS");
+  self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
+  self:SetShown(true)
+end
+
+function VeneerOrderHallMixin:OnEvent(event, ...)
+
+  print('|cFF00AAFF'..self:GetName()..'|r:'.. event, ...)
+  self:Update()
+end
+
+function VeneerOrderHallMixin:OnShow()
+  print('|cFF00AAFF'..self:GetName()..'|r:OnShow()', OrderHallCommandBar:IsShown(), self:IsShown())
+  self:Update()
+  Veneer:InternalReanchor(self)
+end
+
+function VeneerOrderHallMixin:OnHide()
+  print('|cFF00AAFF'..self:GetName()..'|r:OnHide()', OrderHallCommandBar:IsShown(), self:IsShown())
+  Veneer:Reanchor()
 end
 
 function VeneerOrderHallMixin:Update()
@@ -156,15 +165,17 @@
     return
   end
 
-  print('|cFF0044FF'..self:GetName()..' update')
   OrderHallCommandBar:ClearAllPoints()
-  OrderHallCommandBar:SetPoint('TOP', self, 'TOP')
+  OrderHallCommandBar:SetPoint('TOP', UIParent, 'TOP')
   OrderHallCommandBar:SetWidth(600)
   OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
   OrderHallCommandBar.WorldMapButton:Hide()
   OrderHallCommandBar:EnableMouse(false)
+  self:SetSize(OrderHallCommandBar:GetSize())
 
-  self:SetSize(OrderHallCommandBar:GetSize())
+  print('|cFF00AAFF'..self:GetName()..'|r:Update()', OrderHallCommandBar:IsVisible(), self:IsShown())
+  print(debugstack(6))
+
 end
 
 function VeneerWorldStateCurrencyMixin:OnLoad ()
@@ -183,7 +194,7 @@
 end
 
 
-function VeneerWorldStateCurrencyMixin:Update()
+function VeneerWorldStateCurrencyMixin:Update(isBatchUpdate)
 
   print('  Zone:', GetZoneText())
   if GetZoneText() == 'Suramar' then
@@ -296,7 +307,7 @@
   self.ProgressFlash:Play()
 end
 
-function VeneerWorldStateProgressMixin:Update()
+function VeneerWorldStateProgressMixin:Update(isBatchUpdate)
   local hasNewInfo = false
   local progressChange = false
   print('  current mode:', self.mode)
@@ -320,7 +331,7 @@
     end
     hasNewInfo = (self.progressAmount ~= xp)
     progressChange = (hasNewInfo and not self.modeChanged) and ((xp - self.progressAmount) / xpMax)
-    self.progressOverflow = bonusXP
+    self.progressOverflow = bonusXP or 0
     self.progressAmount = xp
     self.progressMax = xpMax
 
@@ -329,7 +340,7 @@
 
     if itemID then
       local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
-      print('  C_AUI:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
+      print('    API:', itemID, name, 'XP:', totalXP, 'Points:', pointsSpent, 'Next:', nextRankCost)
       hasNewInfo = (self.progressAmount ~= totalXP)
       progressChange = (hasNewInfo and not self.modeChanged) and (((totalXP - self.progressAmount) / nextRankCost))
 
@@ -348,6 +359,7 @@
       self.progressAmount = totalXP
       self.progressMax = nextRankCost
     else
+      self.progressOverflow = 0
       self.progressAmount = 0
       self.progressMax = 1
       self.progressText = ''
@@ -371,11 +383,9 @@
 
     end
 
-    print(self:IsVisible())
-    print(self:GetWidth())
-    print(self.ProgressBG:GetWidth())
-    print('  Percent:', floor(self.progressPercent*100)/100, 'BarLength:', floor(self:GetWidth()* self.progressPercent), 'NewInfo:', hasNewInfo, 'IsShown:', self:IsShown())
 
+    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 progressChange then
       self:AnimateProgress(progressChange)
@@ -390,9 +400,9 @@
       self.progressLeft = self.progressMax - self.progressAmount
       if self.progressOverflow >= self.progressLeft then
 
+        self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0)
+      else
         self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBar, 'TOPRIGHT', (self.progressOverflow / self.progressMax) * self:GetWidth(), 0)
-      else
-        self.OverflowBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPRIGHT', 0, 0)
       end
 
     else
@@ -469,6 +479,7 @@
   end
   function WorldStateBlockMixin:Setup()
     print('|cFF0088FF'..self:GetName()..':Setup()|r -- nop')
+    self:Update()
   end
   function WorldStateBlockMixin:Reset()
     print('|cFF0088FF'..self:GetName()..':Reset()')