8ad40722a0
Update nameplate coloring. Fix world map blips
114 lines
3.9 KiB
Lua
114 lines
3.9 KiB
Lua
local E, L, V, P, G = unpack(ElvUI)
|
|
local S = E:GetModule("Skins")
|
|
|
|
local _G = _G
|
|
local band = bit.band
|
|
|
|
local function LoadSkin()
|
|
if not E.private.enhanced.animatedAchievementBars then return end
|
|
|
|
local function AnimationStatusBar(bar, noNumber)
|
|
bar.anim = CreateAnimationGroup(bar)
|
|
bar.anim.progress = bar.anim:CreateAnimation("Progress")
|
|
bar.anim.progress:SetSmoothing("Out")
|
|
bar.anim.progress:SetDuration(1.7)
|
|
|
|
bar.anim.color = bar.anim:CreateAnimation("Color")
|
|
bar.anim.color:SetSmoothing("Out")
|
|
bar.anim.color:SetColorType("Statusbar")
|
|
bar.anim.color:SetDuration(1.7)
|
|
bar.anim.color.StartR, bar.anim.color.StartG, bar.anim.color.StartB = 1, 0, 0
|
|
|
|
if not noNumber then
|
|
bar.anim2 = CreateAnimationGroup(_G[bar:GetName() .. "Text"])
|
|
bar.anim2.number = bar.anim2:CreateAnimation("Number")
|
|
bar.anim2.number:SetDuration(1.7)
|
|
end
|
|
end
|
|
|
|
local function PlayAnimationStatusBar(bar, max, value, noNumber)
|
|
if bar.anim:IsPlaying() or (bar.anim2 and bar.anim2:IsPlaying()) then
|
|
bar.anim:Stop()
|
|
if not noNumber then
|
|
bar.anim2:Stop()
|
|
end
|
|
end
|
|
bar:SetValue(0)
|
|
bar.anim.progress:SetChange(value)
|
|
|
|
local r, g, b = E:ColorGradient(value / max, 1, 0, 0, 1, 1, 0, 0, 1, 0)
|
|
bar.anim.color:Reset()
|
|
bar.anim.color:SetChange(r, g, b)
|
|
bar.anim:Play()
|
|
|
|
if not noNumber then
|
|
bar.anim2.number:SetPostfix("/" .. max)
|
|
bar.anim2.number:SetChange(value)
|
|
bar.anim2:Play()
|
|
end
|
|
end
|
|
|
|
AnimationStatusBar(AchievementFrameSummaryCategoriesStatusBar)
|
|
AnimationStatusBar(AchievementFrameComparisonSummaryPlayerStatusBar)
|
|
AnimationStatusBar(AchievementFrameComparisonSummaryFriendStatusBar)
|
|
|
|
for i = 1, 8 do
|
|
local frame = _G["AchievementFrameSummaryCategoriesCategory" .. i]
|
|
AnimationStatusBar(frame)
|
|
end
|
|
|
|
hooksecurefunc("AchievementFrameCategory_StatusBarTooltip", function(self)
|
|
local index = GameTooltip.shownStatusBars
|
|
local name = GameTooltip:GetName() .. "StatusBar" .. index
|
|
local statusBar = _G[name]
|
|
if not statusBar then return end
|
|
|
|
if not statusBar.anim then
|
|
AnimationStatusBar(statusBar)
|
|
end
|
|
|
|
PlayAnimationStatusBar(statusBar, self.numAchievements, self.numCompleted)
|
|
end)
|
|
|
|
hooksecurefunc("AchievementFrameComparison_UpdateStatusBars", function(id)
|
|
local numAchievements, numCompleted = GetCategoryNumAchievements(id)
|
|
local statusBar = AchievementFrameComparisonSummaryPlayerStatusBar
|
|
PlayAnimationStatusBar(statusBar, numAchievements, numCompleted)
|
|
|
|
local friendCompleted = GetComparisonCategoryNumAchievements(id)
|
|
statusBar = AchievementFrameComparisonSummaryFriendStatusBar
|
|
PlayAnimationStatusBar(statusBar, numAchievements, friendCompleted)
|
|
end)
|
|
|
|
hooksecurefunc("AchievementFrameSummaryCategoriesStatusBar_Update", function()
|
|
local total, completed = GetNumCompletedAchievements()
|
|
PlayAnimationStatusBar(AchievementFrameSummaryCategoriesStatusBar, total, completed)
|
|
end)
|
|
|
|
hooksecurefunc("AchievementFrameSummaryCategory_OnShow", function(self)
|
|
local totalAchievements, totalCompleted = AchievementFrame_GetCategoryTotalNumAchievements(self:GetID(), true)
|
|
PlayAnimationStatusBar(self, totalAchievements, totalCompleted)
|
|
end)
|
|
|
|
hooksecurefunc("AchievementButton_GetProgressBar", function(index)
|
|
local frame = _G["AchievementFrameProgressBar" .. index]
|
|
if frame and not frame.anim then
|
|
AnimationStatusBar(frame, true)
|
|
end
|
|
end)
|
|
|
|
hooksecurefunc("AchievementObjectives_DisplayCriteria", function(objectivesFrame, id)
|
|
local numCriteria = GetAchievementNumCriteria(id)
|
|
local progressBars = 0
|
|
for i = 1, numCriteria do
|
|
local _, _, _, quantity, reqQuantity, _, flags = GetAchievementCriteriaInfo(id, i)
|
|
if band(flags, ACHIEVEMENT_CRITERIA_PROGRESS_BAR) == ACHIEVEMENT_CRITERIA_PROGRESS_BAR then
|
|
progressBars = progressBars + 1
|
|
local progressBar = AchievementButton_GetProgressBar(progressBars)
|
|
PlayAnimationStatusBar(progressBar, reqQuantity, quantity, true)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
S:AddCallbackForAddon("Blizzard_AchievementUI", "Enhanced_AchievementUI", LoadSkin) |