diff Modules/ArtifactPower.lua @ 122:ea2c616a3b4f

Standardize anchor variables - anchorGroup sets general position, defers to anchorPoint - anchorPoint and anchorFrom are used in SetPoint, deferring to anchorGroup and its inverse Artifact Power: - scan and update triggers trimmed down BuffFrame: - extra values can be right clicked to hide for particular auras LFG: - Desolate Host link placed above Sisters when searching for best cheevos TalkingHead - Re-enable TalkingHeadFrame click behaviour
author Nenue
date Mon, 21 Aug 2017 22:15:46 -0400
parents 1f68c46bc4de
children b3c0258b419d
line wrap: on
line diff
--- a/Modules/ArtifactPower.lua	Mon Jul 17 11:51:31 2017 -0400
+++ b/Modules/ArtifactPower.lua	Mon Aug 21 22:15:46 2017 -0400
@@ -15,32 +15,23 @@
   worldQuestItems = {},
   ItemButtons = {},
   anchorGroup = 'TOP',
-  anchorPoint = 'TOP',
+  anchorPoint = 'TOPLEFT',
   anchorPriority = 3,
   anchorFrom = 'BOTTOMLEFT',
   moduleName = 'Artifactor',
   HideCombat = true
 }
+
+VeneerArtifactButtonMixin = {}
+local Artifact = VeneerArtifactButtonMixin
+
 local defaultSettings = {
   firstUse = true,
   autoHide = true,
 }
 local Module = VeneerArtifactPowerMixin
-local BAGS_TO_SCAN = {BACKPACK_CONTAINER }
+local BAGS_TO_SCAN = {BACKPACK_CONTAINER}
 local TOOLTIP_NAME = 'VeneerAPScanner'
-local POINT_COSTS = {
-  100, 300, 325, 350, 375,
-  400, 425, 450, 525, 625,
-  750, 875, 1000, 6840, 8830,
-  11280, 14400, 18620, 24000, 30600,
-  39520, 50880, 64800, 82500, 105280,
-  138650, 182780, 240870, 325520, 417560,
-  546000, 718200, 946660, 1245840, 1635200,
-  191500, 2010000, 2110000, 2215000, 2325000,
-  2440000, 2560000, 2690000, 2825000, 2965000,
-  3115000, 3270000, 3435000, 3605000, 3785000,
-  3975000, 4175000, 4385000, 4605000
-}
 local FISHING_MAX_TRAITS = 24
 local WEAPON_MAX_TRAITS = 92
 local FRAME_PADDING = 4
@@ -53,13 +44,13 @@
 function Module:OnLoad()
   self:RegisterEvent('BAG_UPDATE') -- use to obtain bag IDs to scan
   self:RegisterEvent('BAG_UPDATE_DELAYED') -- use to trigger actual scan activity
-  self:RegisterEvent('BANKFRAME_OPENED')  -- determine when bank info is available
-  self:RegisterEvent('BANKFRAME_CLOSED')  -- " " "
-  self:RegisterEvent('ARTIFACT_UPDATE')    -- when artifact data has changed
-  self:RegisterEvent('ARTIFACT_XP_UPDATE') -- when artifact xp has changed (but not necessarily data)
-  self:RegisterEvent('PLAYER_REGEN_ENABLED')
-  self:RegisterEvent('PLAYER_REGEN_DISABLED')
-  self:RegisterEvent('PLAYER_ENTERING_WORLD')
+  self:RegisterEvent('BANKFRAME_OPENED')  -- bank info available
+  self:RegisterEvent('BANKFRAME_CLOSED')  --
+  self:RegisterEvent('ARTIFACT_UPDATE')    -- visible data change
+  self:RegisterEvent('ARTIFACT_XP_UPDATE') -- xp for equipped artifact
+  self:RegisterEvent('PLAYER_REGEN_ENABLED') -- combat
+  self:RegisterEvent('PLAYER_REGEN_DISABLED') --
+  self:RegisterEvent('PLAYER_ENTERING_WORLD') -- zone/instance transfer
   self:RegisterEvent('ITEM_LOCK_CHANGED') -- use to clear bag slot cache data
   Veneer:AddHandler(self)
   SLASH_VENEER_AP1 = "/vap"
@@ -80,7 +71,16 @@
       end
       self:Print('Cache data reset.')
       self:Update()
+    elseif arg:match('item') then
+      print('name', arg:match("^item (%S.+)"))
+      print('num', arg:match("Hitem:(%d+)"))
+      local linkOrID = arg:match("item:(%d+)") or arg:match("^item (%S+)")
+      if linkOrID then
+        local name, etc = GetItemInfo(linkOrID)
+      end
+
     else
+
       self:Show()
     end
   end
@@ -90,7 +90,10 @@
 
 end
 local ShortNumberString = function (value)
-  if value >= 1000000 then
+  if value >= 1000000000 then
+
+    return tostring(floor(value/10000000)/100) .. 'B'
+  elseif value >= 1000000 then
     return tostring(floor(value/100000)/10) .. 'M'
   elseif value >= 100000 then
     return tostring(floor(value/1000)) .. 'k'
@@ -354,6 +357,7 @@
     self:ScanAllBags()
   elseif event == 'BAG_UPDATE_DELAYED' then
     if not self.firstHit then
+      -- prevent double call from login
       self.firstHit = true
     else
       self:ScanAllBags()
@@ -367,13 +371,13 @@
     local newItem = ...
     if newItem then
       local itemID, _, name, texture, currentXP, pointsSpent = C_ArtifactUI:GetArtifactInfo()
-      self:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
-      self:ScanAllBags(self.bankAccess)
+      self:UpdateArtifact(itemID, name, texture, currentXP, pointsSpent)
+      --self:ScanAllBags(self.bankAccess)
     end
   elseif event == 'ARTIFACT_XP_UPDATE' then
     local itemID, _, name, texture, currentXP, pointsSpent = C_ArtifactUI:GetEquippedArtifactInfo()
-    self:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
-    self:ScanAllBags(self.bankAccess)
+    self:UpdateArtifact(itemID, name, texture, currentXP, pointsSpent)
+    --self:ScanAllBags(self.bankAccess)
   elseif event == 'PLAYER_REGEN_ENABLED' then
 
     if self.queuedScan then
@@ -417,7 +421,26 @@
     print('|cFFFF4400Update()|r')
     return
   end
-  print('|cFF00FFFFUpdate()|r')
+  print('|cFFFFFF00pdate()|r')
+
+  local numButtons = 0
+  local contentsHeight = 16
+  local contentsWidth = 400
+  if self.profile.knowledgeMultiplier then
+    local artifactsWidth = self:UpdateArtifactButtons()
+
+    if artifactsWidth ~= 0 then
+      contentsHeight = contentsHeight + 64
+    end
+
+    contentsWidth = max(contentsWidth, min(artifactsWidth, 400))
+
+    local itemsWidth, itemsHeight = self:UpdateItemButtons()
+    contentsHeight = contentsHeight + itemsHeight
+    contentsWidth = max(contentsWidth, itemsWidth)
+  end
+
+
 
   local bankText, bagText
   if not self.profile.knowledgeMultiplier then
@@ -443,22 +466,8 @@
 
 
   self.SummaryHeader:SetText(bankText)
-
-  local numButtons = 0
-  local contentsHeight = 16 + self.SummaryHeader:GetHeight()
-  local contentsWidth = 400
-  if self.profile.knowledgeMultiplier then
-    local artifactsWidth = self:UpdateArtifactButtons()
-
-    if artifactsWidth ~= 0 then
-      contentsHeight = contentsHeight + 64
-    end
-
-    contentsWidth = max(contentsWidth, min(artifactsWidth, 400))
-
-    local itemsWidth, itemsHeight = self:UpdateItemButtons()
-    contentsHeight = contentsHeight + itemsHeight
-    contentsWidth = max(contentsWidth, itemsWidth)
+  if not self.lastButton then
+    contentsHeight = contentsHeight + self.SummaryHeader:GetHeight()
   end
 
 
@@ -534,6 +543,7 @@
 
   -- Artifact icons, in no particular order
   self.equippedID = C_ArtifactUI.GetEquippedArtifactInfo()
+  self.lastButton = nil
   self.canAddAP = nil
   self.canAddFishingAP = nil
   local hasArtifacts
@@ -547,13 +557,13 @@
     numButtons = numButtons + 1
     button = self.Artifact[numButtons]
     button.relativeFrame = self
-    lastFrame = button:SetButton(self.equippedID, equipped, numButtons, true, nil)
-    hasArtifacts = true
-
+    if self.equippedID ~= button.itemID then
+      button:SetItem(self.equippedID, equipped, numButtons, true, nil)
+      hasArtifacts = true
+    end
+    lastFrame = button
     buttonsWidth = EQUIPPED_SIZE + (FRAME_PADDING * 2)
   end
-
-
   for itemID, artifact in pairs(self.profile.artifacts) do
     if (itemID == UNDERLIGHT_ANGLER_ID) then
       -- only add if we have fishing AP items and it's not being shown in the equipped slot
@@ -577,13 +587,18 @@
           numButtons = numButtons + 1
           button = self.Artifact[numButtons]
           button.relativeFrame = lastFrame
-          lastFrame = button:SetButton(itemID, artifact, numButtons, (self.equippedID == itemID), nil)
+          if button.itemID ~= itemID then
+            button:SetItem(itemID, artifact, numButtons, (self.equippedID == itemID), nil)
+          end
+          lastFrame = button
           buttonsWidth = buttonsWidth + lastFrame:GetWidth() + FRAME_PADDING
         end
       end
     end
   end
 
+  self.lastButton = lastFrame
+
 
   if fishingData and (self.fishingAP and self.fishingAP > 0) then
     numButtons = numButtons + 1
@@ -591,7 +606,8 @@
     local button = self.Artifact[numButtons]
     button.relativeFrame = lastFrame
     button.isFishing = true
-    button:SetButton(fishingID, fishingData, numButtons, self.equippedID == fishingID)
+    button:SetItem(fishingID, fishingData, numButtons, self.equippedID == fishingID)
+    self.lastButton = button
   end
 
   self.hasArtifacts = hasArtifacts
@@ -600,6 +616,14 @@
     self.Artifact[i]:Hide()
   end
 
+  self.SummaryHeader:ClearAllPoints()
+  if self.lastButton then
+    self.SummaryHeader:SetPoint('TOPLEFT', self.lastButton, 'TOPRIGHT', 4, -2)
+  else
+    self.SummaryHeader:SetPoint('BOTTOMLEFT', self, 'BOTTOMLEFT', 4, 4)
+  end
+
+
 
   return buttonsWidth
 end
@@ -757,24 +781,14 @@
   return self.cache.items[itemID], self.cache.fishing[itemID]
 end
 
-function Module:SetArtifact(itemID, name, texture, currentXP, pointsSpent)
-  print('|cFF00FF00SetArtifact()|r')
+function Module:UpdateArtifact(itemID, name, texture, currentXP, pointsSpent)
+  print('|cFF00FF00UpdateArtifact()|r')
   if not self.profile then
     return
   end
   local artifacts = self.profile.artifacts
 
-  local multi = C_ArtifactUI.GetArtifactKnowledgeMultiplier()
-  if multi and (self.profile.knowledgeMultiplier ~= multi) then
-    table.wipe(self.cache.items)
-    table.wipe(self.cache.fishing)
-  end
-
-  self.profile.knowledgeMultiplier = multi or self.profile.knowledgeMultiplier
-  print('multiplier:', multi)
-
   if itemID then
-
     self.currentEquipped = itemID
 
     artifacts[itemID] = artifacts[itemID] or {}
@@ -786,12 +800,17 @@
     artifact.currentXP = currentXP
     artifact.level = pointsSpent
     artifact.tier = C_ArtifactUI.GetArtifactTier() or ((pointsSpent >= 36) and 2 or 1)
+    artifact.itemID = itemID
 
     print('tier', artifact.tier)
     local cost = C_ArtifactUI.GetCostForPointAtRank(pointsSpent, artifact.tier)
     artifact.currentCost = cost
 
-
+    for index, frame in pairs(self.Artifact) do
+      if frame.itemID == itemID then
+        frame:SetItem(itemID, artifact, index, (itemID == self.equippedID), (itemID == UNDERLIGHT_ANGLER_ID))
+      end
+    end
 
   end
 end
@@ -924,13 +943,11 @@
   self:TryToShow()
 end
 
-VeneerArtifactButtonMixin = {}
-local Artifact = VeneerArtifactButtonMixin
 
-function Artifact:SetButton(itemID, artifact, index, equipped, fishing)
-  print(itemID, index)
+function Artifact:SetItem(itemID, artifact, index, equipped, fishing)
+  print('|cFF00FFFFSetItem()|r', itemID, index)
   print(artifact.name, artifact.texture, artifact.currentXP)
-  self:SetID(itemID)
+
   if not artifact.currentCost then
     artifact.currentCost = artifact.cost
   end
@@ -1004,27 +1021,106 @@
     self:SetPoint('TOPLEFT', self.relativeFrame, 'TOPLEFT', 4, -4)
   end
 
+  self.itemID = itemID
   self.isEquipped = equipped
   self:Update()
   self:Show()
+
   return self
 end
 
+function Artifact:UpdateXPBar()
+  local r3, g3, b3 = 1, .5, 0 -- main xp bar
+  -- current:   amount shown in blizz ui
+  -- actual:    amount contributing the next level, will be same until current point cap is reached
+  -- potential: total of ap on hand
+  print(self.currentXP, self.actualXP, self.potentialXP)
+
+  local maxHeight = self:GetHeight() - 8
+  local currentHeight = self.CurrentProgress:GetHeight() or 1
+  local offHeight = self.AdjustedProgress:GetHeight() or 1
+
+
+  local currentProgress = (self.currentXP < self.currentCost) and (self.currentXP / self.currentCost) or 1
+  local projectedProgress = (self.totalXP < self.totalCost) and (self.totalXP / self.totalCost) or 1
+  if self.actualLevel ~= self.level then
+    r3, g3, b3 = 0, 1, 1
+  end
+
+  print('|cFFFF4400', currentProgress)
+  if self.level <= WEAPON_MAX_TRAITS then
+    self.CurrentProgress.animateFrom = currentHeight or 1
+    self.CurrentProgress.animateTo = currentProgress * maxHeight
+    self.CurrentProgress:Show()
+    self.ProgressLine:Show()
+  else
+    self.CurrentProgress:Hide()
+    self.ProgressLine:Hide()
+  end
+
+  if self.totalXP ~= self.currentXP then
+    print('|cFF00FFFF', projectedProgress)
+    if (projectedProgress > currentProgress) then
+      self.AdjustedProgress:SetPoint('BOTTOM', self.CurrentProgress, 'TOP')
+      projectedProgress = projectedProgress - currentProgress
+      print('show projected above', currentProgress, projectedProgress)
+    else
+      self.CurrentProgress:Hide()
+      self.ProgressLine:Hide()
+      self.AdjustedProgress:SetPoint('BOTTOM', self, 'BOTTOM', 0 , 4)
+      print('show projected at bottom', currentProgress, projectedProgress)
+    end
+
+    self.AdjustedProgress.animateFrom = self.AdjustedProgress:GetHeight() or 1
+    self.AdjustedProgress.animateTo = projectedProgress * self:GetHeight()
+    self.AdjustedLine:Show()
+    self.AdjustedProgress:Show()
+  else
+    self.CurrentProgress:SetPoint('BOTTOM', self, 'BOTTOM', 0, 4)
+    self.AdjustedProgress:Hide()
+    self.AdjustedLine:Hide()
+  end
+  --print(self.CurrentProgress:GetPoint(3))
+  --print(self.CurrentProgress:GetSize())
+
+  self.CurrentProgress:SetColorTexture(r3,g3,b3,1)
+
+end
+
+function Artifact:OnLoad()
+  print('|cFFFF4400OnLoad()|r', self:GetName(), self:GetID())
+  self:RegisterEvent('ARTIFACT_UPDATE')
+  self:RegisterEvent('PLAYER_LOGIN')
+end
+
+function Artifact:OnEvent(event)
+  local itemID, _, _, nextCost = C_ArtifactUI.GetEquippedArtifactInfo()
+  print(self:GetID(), '|cFFFF4400OnEvent()|r', event, itemID, '=', self.itemID, (itemID == self.itemID))
+  if itemID == self.itemID then
+    self:Update()
+  end
+end
+
 function Artifact:Update()
-  local r1, g1, b1 = 1, 1, 1
-  local r2, g2, b2 = 1, 1, 0
+  if not self.itemID then
+    return
+  end
+
+  print(self:GetName(), '|ff00FFFFUpdate()|r')
+  local r1, g1, b1 = 1, 1, 1  -- top text
+  local r2, g2, b2 = 1, 1, 0  -- bottom text
   local levelText = self.level
   local xpText = ShortNumberString(self.currentXP)
   local costText = ShortNumberString(self.currentCost)
   local remainingText  = ShortNumberString(self.currentCost - self.currentXP)
-  -- current:   amount shown in blizz ui
-  -- actual:    amount contributing the next level, will be same until current point cap is reached
-  -- potential: total of ap on hand
-  print(self.currentXP, self.actualXP, self.potentialXP)
+
+  local maxHeight = self:GetHeight() - 4
+  local currentHeight = self.CurrentProgress:GetHeight() or 1
+  local offHeight = self.AdjustedProgress:GetHeight() or 1
+
   if self.actualLevel ~= self.level then
     levelText = self.actualLevel
     r1, g1, b1 = 0, 1, 0
-    --r2, g2, b2 = 0, 1, 0
     xpText = ShortNumberString(self.actualXP)
     costText = ShortNumberString(self.actualCost)
     remainingText = ShortNumberString(self.actualCost-self.actualXP)
@@ -1034,8 +1130,6 @@
     costText = ShortNumberString(self.potentialCost)
     remainingText = ShortNumberString(self.potentialCost-self.potentialXP)
     --]]
-  elseif self.totalLevel ~= self.actualLevel then
-    r1, g1, b1 = 0, 1, 1
   end
 
   self.Level:SetText(levelText)
@@ -1054,41 +1148,7 @@
     self:SetNormalTexture(nil, 'ADD')
   end
 
-  local currentProgress = (self.currentXP < self.currentCost) and (self.currentXP / self.currentCost) or 1
-  print('|cFFFF4400', currentProgress)
-  if self.level <= 92 then
-    self.CurrentProgress.animateFrom = self.CurrentProgress:GetHeight() or 1
-    self.CurrentProgress.animateTo = currentProgress * self:GetHeight()
-    self.CurrentProgress:Show()
-    self.ProgressLine:Show()
-  else
-    self.CurrentProgress:Hide()
-    self.ProgressLine:Hide()
-  end
-
-  if self.totalXP ~= self.currentXP then
-    local projectedProgress = (self.totalXP / self.totalCost)
-    print('|cFF00FFFF', projectedProgress)
-    if (projectedProgress > currentProgress) then
-      self.AdjustedProgress:SetPoint('BOTTOM', self.CurrentProgress, 'TOP')
-      projectedProgress = projectedProgress - currentProgress
-    else
-      self.CurrentProgress:Hide()
-      self.ProgressLine:Hide()
-      self.AdjustedProgress:SetPoint('BOTTOM', self, 'BOTTOM')
-    end
-    print('show actual', currentProgress, projectedProgress)
-    self.AdjustedProgress.animateFrom = self.AdjustedProgress:GetHeight() or 1
-    self.AdjustedProgress.animateTo = projectedProgress * self:GetHeight()
-    self.AdjustedLine:Show()
-    self.AdjustedProgress:Show()
-  else
-    self.CurrentProgress:SetPoint('BOTTOM', self, 'BOTTOM')
-    self.AdjustedProgress:Hide()
-    self.AdjustedLine:Hide()
-  end
-  print(self.CurrentProgress:GetPoint(3))
-  print(self.CurrentProgress:GetSize())
+  self:UpdateXPBar()
 
   if self.actualLevel ~= self.currentLevel then
     self:SetNormalTexture([[Interface\Buttons\UI-Quickslot-Depress]], 'ADD')
@@ -1171,4 +1231,4 @@
 
     end
   end
-end
\ No newline at end of file
+end