changeset 81:65ec88b30eb8

- OrderHall plugin converted to a general world state cluster. Includes: - Suramar ancient mana - Artifact power/XP progress - OrderHall bar shrinker
author Nenue
date Mon, 17 Oct 2016 04:57:32 -0400
parents bb6b532c5d2f
children be813a9d99c0
files .idea/uiDesigner.xml Modules/OrderHall.lua Modules/PaperDoll.lua Veneer.xml
diffstat 4 files changed, 294 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.idea/uiDesigner.xml	Mon Oct 17 04:57:32 2016 -0400
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
--- a/Modules/OrderHall.lua	Tue Oct 11 08:03:41 2016 -0400
+++ b/Modules/OrderHall.lua	Mon Oct 17 04:57:32 2016 -0400
@@ -5,58 +5,91 @@
 --
 
 VeneerWorldStateCurrencyMixin = {}
-VeneerWorldStateMixin = {}
+VeneerWorldStateProgressMixin = {}
+VeneerWorldStateMixin = {
+  detectedFrames = {}
+}
 local print = DEVIAN_WORKSPACE and function(...) print('VnWorldState', ...) end or nop
 
 function VeneerWorldStateMixin:Setup()
-  hooksecurefunc(OrderHallCommandBar,'Show', function()
-    self:Refresh()
-  end)
   self:Refresh()
   --DEFAULT_CHAT_FRAME:AddMessage('Loaded')
+  print('All:Setup()')
+
+  self.modules = self.modules or {self:GetChildren()}
+  for i, frame in ipairs(self.modules) do
+    if frame.Setup then
+      frame:Setup()
+    end
+  end
 end
 
 function VeneerWorldStateMixin:Refresh()
-  OrderHallCommandBar:ClearAllPoints()
-  OrderHallCommandBar:SetPoint('TOP')
-  OrderHallCommandBar:SetWidth(600)
-  OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
-  OrderHallCommandBar.WorldMapButton:Hide()
-  OrderHallCommandBar:EnableMouse(false)
+  if OrderHallCommandBar then
+    if not self.detectedFrames[OrderHallCommandBar] then
+      self.detectedFrames[OrderHallCommandBar] = true
+      hooksecurefunc(OrderHallCommandBar,'Show', function()
+        self:Refresh()
+      end)
+    end
+
+
+    OrderHallCommandBar:ClearAllPoints()
+    OrderHallCommandBar:SetPoint('TOP')
+    OrderHallCommandBar:SetWidth(600)
+    OrderHallCommandBar.Background:SetColorTexture(0,0,0,0.5)
+    OrderHallCommandBar.WorldMapButton:Hide()
+    OrderHallCommandBar:EnableMouse(false)
+  end
+
 end
 local initialized
 function VeneerWorldStateMixin:OnEvent(event, arg)
   print(event, arg)
-  if OrderHallCommandBar and not initialized then
-    initialized = true
+
+  if event == 'PLAYER_LOGIN' and not initialized then
+    if IsLoggedIn() then
+      initialized = true
       self:Setup()
-      self:UnregisterEvent('ADDON_LOADED')
+      self:UnregisterEvent('PLAYER_LOGIN')
+    end
   end
 
   if event == 'PLAYER_ENTERING_WORLD' then
     self:Update()
+  elseif event == 'PLAYER_REGEN_ENABLED' then
+    self:Show()
+  elseif event == 'PLAYER_REGEN_DISABLED' then
+    self:Hide()
   end
 end
 
 function VeneerWorldStateMixin:Update()
-  local frames = {self:GetChildren()}
+  self.modules = self.modules or {self:GetChildren()}
   print('|cFFFFFF00All:Update()|r')
-  for i, frame in ipairs(frames) do
+  self.maxHeight = 0
+  for i, frame in ipairs(self.modules) do
     if frame.Update then
       print(frame:GetName())
       frame:Update()
+      if frame:IsVisible() then
+        self.maxHeight = max(self.maxHeight, frame.maxHeight)
+      end
     end
   end
+  self:SetHeight(self.maxHeight)
 end
 
 
 
 function VeneerWorldStateMixin:OnLoad ()
+  self:RegisterEvent('PLAYER_LOGIN')
   self:RegisterEvent('ADDON_LOADED')
   self:RegisterEvent('ARTIFACT_UPDATE')
   self:RegisterEvent('ARTIFACT_XP_UPDATE')
   self:RegisterEvent('PLAYER_ENTERING_WORLD')
-
+  self:RegisterEvent('PLAYER_REGEN_ENABLED')
+  self:RegisterEvent('PLAYER_REGEN_DISABLED')
 end
 
 function VeneerWorldStateCurrencyMixin:OnLoad ()
@@ -73,9 +106,9 @@
 
 
 function VeneerWorldStateCurrencyMixin:Update()
-  local mapID = GetCurrentMapAreaID()
+
   print('currency refresh: zone =', mapID)
-  if mapID == 1033 then
+  if GetZoneText() == 'Suramar' then
     local name, earned, texture, earnedThisWeek, weeklyMax, totalMax = GetCurrencyInfo(1155)
 
     self.Icon:SetTexture(texture)
@@ -85,4 +118,118 @@
   else
     self:Hide()
   end
+
+  self.maxHeight = self:GetHeight()
+end
+
+function VeneerWorldStateProgressMixin:OnLoad()
+  self:RegisterEvent('PLAYER_XP_UPDATE')
+  self:RegisterEvent('PLAYER_LEVEL_UP')
+  self:RegisterEvent('PLAYER_UPDATE_RESTING')
+  self:RegisterEvent('ENABLE_XP_GAIN')
+  self:RegisterEvent('DISABLE_XP_GAIN')
+  self:RegisterEvent('PLAYER_LOGIN')
+  self:RegisterEvent('ARTIFACT_UPDATE')
+  self:RegisterEvent('ARTIFACT_XP_UPDATE')
+
+end
+
+function VeneerWorldStateProgressMixin:Setup()
+  self:UpdateXPGain()
+  if UnitLevel('player') < GetMaxPlayerLevel() then
+    self.mode = 'xp'
+  else
+    self.mode = 'artifact'
+  end
+  print('setup mode:', self.mode)
+  self:Update()
+end
+
+function VeneerWorldStateProgressMixin:OnEvent(event)
+  if 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_XP_UPDATE' or 'PLAYER_LEVEL_UP' then
+    self.mode = 'xp'
+  end
+
+
+  self:Update()
+
+end
+function VeneerWorldStateProgressMixin:UpdateXPGain()
+  if IsXPUserDisabled() then
+    self.ProgressBar:SetColorTexture(0.75,0.75,0.75)
+    self.mode = nil
+  else
+    self.ProgressBar:SetColorTexture(1,1,1)
+  end
+end
+
+local GetEquippedArtifactInfo = _G.C_ArtifactUI.GetEquippedArtifactInfo
+local GetCostForPointAtRank = _G.C_ArtifactUI.GetCostForPointAtRank
+function VeneerWorldStateProgressMixin:Update()
+
+  if not self.mode then
+    if UnitLevel('player') < GetMaxPlayerLevel() then
+      self.mode = 'xp'
+    else
+      self.mode = 'artifact'
+    end
+  end
+
+
+  self.progressPercent = 0
+  self.progressAmount = 0
+  self.progressMax = 1
+  self.progressOverflow = 0
+  if self.mode == 'xp' then
+    local xp = UnitXP('player')
+    local xpMax = UnitXPMax('player')
+    local bonusXP = GetXPExhaustion()
+    if xp then
+      self.progressPercent = xp / xpMax
+    end
+  elseif self.mode == 'artifact' then
+
+    local itemID, altItemID, name, icon, totalXP, pointsSpent = GetEquippedArtifactInfo()
+    if not itemID then
+      self:Hide()
+      return
+    end
+
+    local pointsAvailable = 0
+
+    local nextRankCost = GetCostForPointAtRank(pointsSpent) or 0
+
+    self.progressAmount = totalXP
+    self.progressMax = nextRankCost
+    if totalXP > nextRankCost then
+      self.progressPercent = 1
+      self.progressOverflow = totalXP - nextRankCost
+    else
+      self.progressPercent = totalXP / nextRankCost
+    end
+
+    self.progressText = name .. ' ('..pointsSpent .. '): '.. totalXP .. ' / ' .. nextRankCost
+  else
+    self:Hide()
+    return
+  end
+
+  print(self.progressPercent, floor(self.ProgressBG:GetWidth()* self.progressPercent))
+
+  if self.progressPercent > 0 then
+    self.ProgressBar:Show()
+    self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self.ProgressBG:GetWidth()* self.progressPercent , 0)
+
+    self.Label:SetText(self.progressText)
+  else
+    self.ProgressBar:Hide()
+  end
+
+
+
+  self.maxHeight = self:GetHeight()
 end
\ No newline at end of file
--- a/Modules/PaperDoll.lua	Tue Oct 11 08:03:41 2016 -0400
+++ b/Modules/PaperDoll.lua	Mon Oct 17 04:57:32 2016 -0400
@@ -77,7 +77,7 @@
     nextRankCost = GetCostForPointAtRank(pointsSpent + pointsAvailable) or 0
   end
   self.Header:SetText(name)
-  self.Level:SetText(pointsSpent)
+  self.Level:SetText((pointsAvailable >= 1) and (pointsSpent .. ' ('.. pointsAvailable..')') or (pointsSpent))
   self.ProgressText:SetFormattedText("|cFF00FFFF%d|r / %d", totalXP, nextRankCost)
 
   self.ProgressBar:SetPoint('TOPRIGHT', self.ProgressBG, 'TOPLEFT', self:GetWidth()*(totalXP/nextRankCost), 0)
--- a/Veneer.xml	Tue Oct 11 08:03:41 2016 -0400
+++ b/Veneer.xml	Mon Oct 17 04:57:32 2016 -0400
@@ -219,7 +219,7 @@
         </FontString>
         <FontString parentKey="Level" inherits="GameFontNormal">
           <Anchors>
-            <Anchor point="TOPLEFT" />
+            <Anchor point="TOP" x="0" y="14" />
           </Anchors>
         </FontString>
         <FontString parentKey="ProgressText" inherits="VeneerNumberFont">
@@ -238,11 +238,11 @@
     <Anchors>
       <Anchor point="TOP" />
     </Anchors>
-    <Size x="500" y="24" />
+    <Size x="600" y="24" />
     <Frames>
-      <Frame name="$parentProgress" parentKey="Progress" mixin="VeneerWorldStateProgressMixin" hidden="true" inherits="VeneerMixinScripts">
+      <Frame name="$parentProgress" parentKey="Progress" mixin="VeneerWorldStateProgressMixin" inherits="VeneerMixinScripts">
 
-        <Size x="500" y="24" />
+        <Size x="600" y="12" />
         <Anchors>
           <Anchor point="TOPLEFT" />
         </Anchors>