Quantcast

Artifact Bar and Tooltips

MilleXIV [09-01-16 - 23:37]
Artifact Bar and Tooltips
Filename
locales/enUS.lua
modules/talent.lua
diff --git a/locales/enUS.lua b/locales/enUS.lua
index 791b2d8..687ef00 100644
--- a/locales/enUS.lua
+++ b/locales/enUS.lua
@@ -116,3 +116,7 @@ L['Set Specialization'] = true;
 L['Set Loot Specialization'] = true;
 L['Current Specialization'] = true;
 L['Current Loot Specialization'] = true;
+L['Talent Minimum Width'] = true;
+L['Remaining'] = true;
+L['Available Ranks'] = true;
+L['Artifact Knowledge'] = true;
diff --git a/modules/talent.lua b/modules/talent.lua
index f4c840d..420fe6f 100644
--- a/modules/talent.lua
+++ b/modules/talent.lua
@@ -24,6 +24,7 @@ function TalentModule:OnInitialize()
   self.lootSpecButtons = {}
   self.classIcon = xb.constants.mediaPath..'spec\\'..xb.constants.playerClass
   self.LAD = LibStub('LibArtifactData-1.0')
+  self.curArtifactId = 0
 end

 function TalentModule:OnEnable()
@@ -38,6 +39,7 @@ function TalentModule:OnEnable()

   self:CreateFrames()
   self:RegisterFrameEvents()
+  self.LAD:ForceUpdate()
   self:Refresh()
 end

@@ -55,8 +57,8 @@ function TalentModule:Refresh()
   if self.talentFrame == nil then return; end
   if not db.modules.talent.enabled then return; end

-  local artifactId = 0
-  --local artifactId = self.LAD:GetActiveArtifactID() or 0
+  --local artifactId = 0
+  local artifactId = self.LAD:GetActiveArtifactID() or 0

   self.currentSpecID = GetSpecialization()
   self.currentLootSpecID = GetLootSpecialization()
@@ -67,6 +69,7 @@ function TalentModule:Refresh()
   local textHeight = db.text.fontSize
   if artifactId > 0 then
     textHeight = floor((xb:GetHeight() - 4) / 2)
+    self.curArtifactId = artifactId
   end
   self.specIcon:SetTexture(self.classIcon)
   self.specIcon:SetTexCoord(unpack(self.specCoords[self.currentSpecID]))
@@ -105,6 +108,14 @@ function TalentModule:Refresh()
   self.specFrame:SetSize(iconSize + self.specText:GetStringWidth() + 5, xb:GetHeight())
   self.specFrame:SetPoint('LEFT')

+  if self.specFrame:GetWidth() < db.modules.talent.minWidth then
+    self.specFrame:SetWidth(db.modules.talent.minWidth)
+  end
+
+  if self.specBar:GetWidth() < db.modules.talent.minWidth then
+    self.specBar:SetWidth(db.modules.talent.minWidth)
+  end
+
   self.talentFrame:SetSize(self.specFrame:GetWidth(), xb:GetHeight())

   local popupPadding = xb.constants.popupPadding
@@ -165,7 +176,11 @@ function TalentModule:RegisterFrameEvents()
   self:RegisterEvent('ACTIVE_TALENT_GROUP_CHANGED', 'Refresh')
   self:RegisterEvent('PLAYER_LOOT_SPEC_UPDATED', 'Refresh')

-  -- ARTIFACT_ACTIVE_CHANGED
+  self:RegisterEvent('ARTIFACT_XP_UPDATE', function()
+    UpdateArtifactBar(self.curArtifactId)
+  end)
+
+  self:RegisterEvent('UNIT_INVENTORY_CHANGED', 'Refresh')

   self.specFrame:EnableMouse(true)
   self.specFrame:RegisterForClicks('AnyUp')
@@ -434,7 +449,22 @@ function TalentModule:ShowTooltip()
   else
     _, name, _ = GetSpecializationInfoByID(self.currentLootSpecID)
   end
-  GameTooltip:AddLine("|cffffffff"..L['Current Loot Specialization']..": |cffffff00"..name.."|r")
+  GameTooltip:AddDoubleLine(L['Current Loot Specialization'], name, 1, 1, 0, 1, 1, 1)
+
+  if self.curArtifactId > 0 then
+    GameTooltip:AddLine(" ")
+    local _, artifactData = self.LAD:GetArtifactInfo(self.curArtifactId)
+    local knowLevel, knowMult = self.LAD:GetArtifactKnowledge()
+    if knowLevel > 0 then
+      GameTooltip:AddDoubleLine(L['Artifact Knowledge']..':', string.format('%d (x%d)', knowLevel, ((knowMult) - 1 * 100)), 1, 1, 0, 1, 1, 1)
+      GameTooltip:AddLine(" ")
+    end
+    GameTooltip:AddDoubleLine(ARTIFACT_POWER..':', string.format('%d / %d (%d%%)', artifactData.power, artifactData.maxPower, floor((artifactData.power / artifactData.maxPower) * 100)), 1, 1, 0, 1, 1, 1)
+    GameTooltip:AddDoubleLine(L['Remaining']..':', string.format('%d (%d%%)', artifactData.powerForNextRank, floor((artifactData.powerForNextRank / artifactData.maxPower) * 100)), 1, 1, 0, 1, 1, 1)
+    if artifactData.numRanksPurchasable > 0 then
+      GameTooltip:AddDoubleLine(L['Available Ranks']..':', string.format('%d', artifactData.numRanksPurchasable), 1, 1, 0, 1, 1, 1)
+    end
+  end

   GameTooltip:AddLine(" ")
   GameTooltip:AddDoubleLine('<'..L['Left-Click']..'>', L['Set Specialization'], 1, 1, 0, 1, 1, 1)
@@ -446,7 +476,8 @@ function TalentModule:GetDefaultOptions()
   return 'talent', {
       enabled = true,
       barCC = false,
-      showTooltip = true
+      showTooltip = true,
+      minWidth = 50
     }
 end

@@ -483,6 +514,16 @@ function TalentModule:GetConfig()
         type = "toggle",
         get = function() return xb.db.profile.modules.talent.showTooltip; end,
         set = function(_, val) xb.db.profile.modules.talent.showTooltip = val; self:Refresh(); end
+      },
+      minWidth = {
+        name = L['Talent Minimum Width'],
+        type = 'range',
+        order = 4,
+        min = 10,
+        max = 200,
+        step = 10,
+        get = function() return xb.db.profile.modules.talent.minWidth; end,
+        set = function(info, val) xb.db.profile.modules.talent.minWidth = val; self:Refresh(); end
       }
     }
   }