You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

272 lines
11 KiB

5 years ago
local AS = unpack(AddOnSkins)
-- Cache global variables
--Lua functions
local _G = _G
local pairs, select, unpack = pairs, select, unpack
--WoW API / Variables
local hooksecurefunc = hooksecurefunc
-- GLOBALS:
function AS:SkinAchievement(Achievement, BiggerIcon)
if Achievement.Backdrop then return end
AS:SkinBackdropFrame(Achievement, nil, nil, true)
AS:SetInside(Achievement.Backdrop, Achievement)
AS:SetTemplate(Achievement.icon)
local Size = BiggerIcon and 56 or 38
Achievement.icon:SetSize(Size, Size)
Achievement.icon:ClearAllPoints()
Achievement.icon:SetPoint("LEFT", 6, 0)
AS:Kill(Achievement.icon.bling)
AS:Kill(Achievement.icon.frame)
AS:SkinTexture(Achievement.icon.texture)
AS:SetInside(Achievement.icon.texture)
if Achievement.label then
Achievement.label:SetTextColor(1, .8, .1)
hooksecurefunc(Achievement.label, 'SetVertexColor', function(s, r, g, b) if r == 1 and g == 1 and b == 1 then s:SetTextColor(1, .8, .1) end end)
end
if Achievement.highlight then
AS:StripTextures(Achievement.highlight, true)
Achievement:HookScript('OnEnter', function(s) s.Backdrop:SetBackdropBorderColor(1, .8, .1) end)
Achievement:HookScript('OnLeave', function(s) s.Backdrop:SetBackdropBorderColor(unpack(AS.BorderColor)) end)
end
if Achievement.description then
Achievement.description:SetTextColor(1, 1, 1)
hooksecurefunc(Achievement.description, 'SetTextColor', function(s, r, g, b) if r == 0 and g == 0 and b == 0 then s:SetTextColor(1, 1, 1) end end)
end
if Achievement.hiddenDescription then
Achievement.hiddenDescription:SetTextColor(1, 1, 1)
end
if Achievement.tracked then
AS:SkinCheckBox(Achievement.tracked)
Achievement.tracked:GetRegions():SetTextColor(1, 1, 1)
Achievement.tracked:ClearAllPoints()
Achievement.tracked:SetPoint('TOPLEFT', Achievement.icon, 'BOTTOMLEFT', 0, 0)
end
end
function AS:SkinAchievementStatusBar(StatusBar)
AS:SkinStatusBar(StatusBar)
local StatusBarName = StatusBar:GetName()
local title, label, text = StatusBar.title or _G[StatusBarName..'Title'], StatusBar.label or _G[StatusBarName..'Label'], StatusBar.text or _G[StatusBarName..'Text']
if title then
title:SetPoint("LEFT", 4, 0)
title:SetTextColor(1, 1, 1)
end
if label then
label:SetPoint("LEFT", 4, 0)
label:SetTextColor(1, 1, 1)
end
if text then
if not (title and label) then
text:SetPoint("CENTER", StatusBar, "CENTER", 0, -1)
else
text:SetPoint("RIGHT", -4, 0)
end
text:SetTextColor(1, 1, 1)
end
end
function AS:Blizzard_AchievementUI(event, addon)
if addon ~= 'Blizzard_AchievementUI' then return end
local TooltipBorders = { _G.AchievementFrameStats, _G.AchievementFrameSummary, _G.AchievementFrameAchievements, _G.AchievementFrameComparison }
for _, Frame in pairs(TooltipBorders) do
for i = 1, Frame:GetNumChildren() do
local Child = select(i, Frame:GetChildren())
if Child and Child:IsObjectType('Frame') and not Child:GetName() then
Child:SetBackdrop(nil)
end
end
end
AS:SkinBackdropFrame(_G.AchievementFrame, nil, nil, true)
_G.AchievementFrame.Backdrop:SetPoint('TOPLEFT', 0, 3)
_G.AchievementFrame.Backdrop:SetPoint('BOTTOMRIGHT', 0, 0)
AS:SkinCloseButton(_G.AchievementFrameCloseButton)
_G.AchievementFrameCloseButton:SetPoint("TOPRIGHT", _G.AchievementFrame, "TOPRIGHT", 5, 6)
AS:SkinBackdropFrame(_G.AchievementFrameCategories, nil, nil, true)
_G.AchievementFrameCategories.Backdrop:SetPoint('TOPLEFT', _G.AchievementFrameCategories, 'TOPLEFT', 2, -2)
_G.AchievementFrameCategories.Backdrop:SetPoint('BOTTOMRIGHT', _G.AchievementFrameCategories, 'BOTTOMRIGHT', -2, 2)
_G.AchievementFrameCategories.SetBackdrop = AS.Noop
AS:StripTextures(_G.AchievementFrameHeader, true)
AS:SkinBackdropFrame(_G.AchievementFrameSummary, nil, nil, true)
_G.AchievementFrameSummary.Backdrop:SetPoint('TOPLEFT', 1, -3)
_G.AchievementFrameSummary.Backdrop:SetPoint('BOTTOMRIGHT', -1, 2)
AS:StripTextures(_G.AchievementFrameSummaryCategoriesHeader, true)
AS:StripTextures(_G.AchievementFrameSummaryAchievementsHeader, true)
AS:StripTextures(_G.AchievementFrameAchievements, true)
AS:StripTextures(_G.AchievementFrameComparison, true)
AS:StripTextures(_G.AchievementFrameStatsBG, true)
AS:StripTextures(_G.AchievementFrameComparisonSummaryPlayer, true)
AS:StripTextures(_G.AchievementFrameComparisonSummaryFriend, true)
AS:StripTextures(_G.AchievementFrameComparisonHeader, true)
AS:SkinDropDownBox(_G.AchievementFrameFilterDropDown, 130)
_G.AchievementFrameFilterDropDownText:SetJustifyH('RIGHT')
_G.AchievementFrameFilterDropDownText:ClearAllPoints()
_G.AchievementFrameFilterDropDownText:SetPoint('RIGHT', _G.AchievementFrameFilterDropDown, 'RIGHT', -34, 0)
_G.AchievementFrameFilterDropDown:ClearAllPoints()
_G.AchievementFrameFilterDropDown:SetPoint("TOPLEFT", _G.AchievementFrame, "TOPLEFT", 98, 7)
_G.AchievementFrameFilterDropDownButton:ClearAllPoints()
_G.AchievementFrameFilterDropDownButton:SetPoint("TOPRIGHT", _G.AchievementFrameFilterDropDown, "TOPRIGHT", -14, -8)
_G.AchievementFrameFilterDropDownButton.SetWidth = AS.Noop
_G.AchievementFrameComparisonHeader:SetPoint("BOTTOMRIGHT", _G.AchievementFrameComparison, "TOPRIGHT", 45, -20)
_G.AchievementFrameHeaderTitle:ClearAllPoints()
_G.AchievementFrameHeaderTitle:SetPoint("TOPLEFT", _G.AchievementFrame, "TOP", -200, -3)
_G.AchievementFrameHeaderPoints:ClearAllPoints()
_G.AchievementFrameHeaderPoints:SetPoint("LEFT", _G.AchievementFrameHeaderTitle, "RIGHT", 2, 0)
AS:SkinEditBox(_G.AchievementFrame.searchBox)
_G.AchievementFrame.searchBox:SetHeight(16)
_G.AchievementFrame.searchBox:ClearAllPoints()
_G.AchievementFrame.searchBox:SetPoint("LEFT", _G.AchievementFrameHeaderPoints, "RIGHT", 50, 0)
AS:SkinAchievementStatusBar(_G.AchievementFrameSummaryCategoriesStatusBar)
_G.AchievementFrameSummaryCategoriesStatusBarTitle:SetTextColor(1, 1, 1)
AS:SkinAchievementStatusBar(_G.AchievementFrameComparisonSummaryPlayerStatusBar)
AS:SkinAchievementStatusBar(_G.AchievementFrameComparisonSummaryFriendStatusBar)
AS:SkinBackdropFrame(_G.AchievementFrameAchievementsContainer, nil, nil, true)
_G.AchievementFrameAchievementsContainer.Backdrop:SetPoint('TOPLEFT', _G.AchievementFrameAchievementsContainer, 'TOPLEFT', -2, 1)
_G.AchievementFrameAchievementsContainer.Backdrop:SetPoint('BOTTOMRIGHT', _G.AchievementFrameAchievementsContainer, 'BOTTOMRIGHT', 0, -3)
AS:SkinBackdropFrame(_G.AchievementFrameComparisonContainer, nil, nil, true)
_G.AchievementFrameComparisonContainer.Backdrop:SetPoint('TOPLEFT', _G.AchievementFrameComparisonContainer, 'TOPLEFT', -2, 1)
_G.AchievementFrameComparisonContainer.Backdrop:SetPoint('BOTTOMRIGHT', _G.AchievementFrameComparisonContainer, 'BOTTOMRIGHT', 0, -3)
AS:SkinScrollBar(_G.AchievementFrameCategoriesContainerScrollBar)
AS:SkinScrollBar(_G.AchievementFrameAchievementsContainerScrollBar)
AS:SkinScrollBar(_G.AchievementFrameStatsContainerScrollBar)
AS:SkinScrollBar(_G.AchievementFrameComparisonContainerScrollBar)
AS:SkinScrollBar(_G.AchievementFrameComparisonStatsContainerScrollBar)
for i = 1, 3 do
AS:SkinTab(_G["AchievementFrameTab"..i])
end
for i = 1, 12 do
local StatusBar = "AchievementFrameSummaryCategoriesCategory"..i
AS:SkinAchievementStatusBar(_G[StatusBar])
AS:StripTextures(_G[StatusBar.."ButtonHighlight"])
_G[StatusBar.."Button"]:HookScript('OnEnter', function(self) _G[StatusBar].Backdrop:SetBackdropBorderColor(1, .8, .1) end)
_G[StatusBar.."Button"]:HookScript('OnLeave', function(self) _G[StatusBar].Backdrop:SetBackdropBorderColor(unpack(AS.BorderColor)) end)
end
for _, Achievement in pairs(_G.AchievementFrameAchievementsContainer.buttons) do
AS:SkinAchievement(Achievement, true)
end
for _, Stats in pairs(_G.AchievementFrameStatsContainer.buttons) do
AS:StripTextures(Stats)
Stats.background:SetTexture([[Interface\AddOns\AddOnSkins\Media\Textures\Highlight]])
Stats.background:SetTexCoord(0, 1, 0, 1)
Stats.background.SetTexCoord = AS.Noop
Stats.background:SetAlpha(.3)
Stats.background.SetAlpha = AS.Noop
hooksecurefunc(Stats.background, 'SetBlendMode', function(self, blend) if blend == 'BLEND' then self:Hide() else self:Show() end end)
end
for _, Achievement in pairs(_G.AchievementFrameComparisonContainer.buttons) do
AS:SkinAchievement(Achievement.player)
AS:SkinAchievement(Achievement.friend)
end
local function setAchievementColor(frame)
if frame and frame.Backdrop then
if frame.accountWide then
frame.Backdrop:SetBackdropColor(.1, .2, .3)
else
frame.Backdrop:SetBackdropColor(unpack(AS.BackdropColor))
end
end
end
hooksecurefunc('AchievementButton_DisplayAchievement', setAchievementColor)
hooksecurefunc('AchievementFrameSummary_UpdateAchievements', function()
for _, Achievement in pairs(_G.AchievementFrameSummaryAchievements.buttons) do
AS:SkinAchievement(Achievement)
setAchievementColor(Achievement)
end
end)
hooksecurefunc('AchievementFrameCategories_Update', function()
for _, Category in pairs(_G.AchievementFrameCategoriesContainer.buttons) do
if not Category.isSkinned then
AS:SkinFrame(Category)
Category:HookScript('OnEnter', function(s) s:SetBackdropColor(unpack(AS.Color)) end)
Category:HookScript('OnLeave', function(s)
if s.isSelected then
s:SetBackdropColor(1, .82, 0)
else
s:SetBackdropColor(unpack(AS.BackdropColor))
end
end)
hooksecurefunc(Category, 'LockHighlight', function(self) self:SetBackdropColor(1, .82, 0) end)
hooksecurefunc(Category, 'UnlockHighlight', function(self) self:SetBackdropColor(unpack(AS.BackdropColor)) end)
Category.label:SetTextColor(1, 1, 1)
Category.isSkinned = true
end
end
end)
hooksecurefunc('AchievementButton_GetProgressBar', function(index)
local frame = _G['AchievementFrameProgressBar'..index]
if frame and not frame.Backdrop then
AS:SkinStatusBar(frame)
end
end)
hooksecurefunc('AchievementObjectives_DisplayCriteria', function(objectivesFrame, id)
local numCriteria = GetAchievementNumCriteria(id)
local textStrings, metas, criteria, object = 0, 0
for i = 1, numCriteria do
local _, criteriaType, completed, _, _, _, _, assetID = GetAchievementCriteriaInfo(id, i)
if ( criteriaType == _G.CRITERIA_TYPE_ACHIEVEMENT and assetID ) then
metas = metas + 1
criteria, object = AchievementButton_GetMeta(metas), 'label'
elseif criteriaType ~= 1 then
textStrings = textStrings + 1
criteria, object = AchievementButton_GetCriteria(textStrings), 'name'
end
local r, g, b, x, y = .6, .6, .6, 1, -1
if ( objectivesFrame.completed and completed ) then
r, g, b, x, y = 1, 1, 1, 0, 0
elseif ( completed ) then
r, g, b, x, y = 0, 1, 0, 1, -1
end
criteria[object]:SetTextColor(r, g, b)
criteria[object]:SetShadowOffset(x, y)
end
end)
AS:UnregisterSkinEvent(addon, event)
end
AS:RegisterSkin("Blizzard_AchievementUI", AS.Blizzard_AchievementUI, 'ADDON_LOADED')