Files
Andrew6810 8ad40722a0 Fixes Enhanced character frame
Update nameplate coloring.
Fix world map blips
2022-10-30 16:41:03 -07:00

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)