Files
coa-elvui/ElvUI/Modules/Skins/Blizzard/Character.lua
T
2023-12-11 17:46:50 -07:00

352 lines
12 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)) --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local S = E:GetModule("Skins")
--Lua functions
local _G = _G
local getmetatable = getmetatable
local ipairs = ipairs
local select = select
local unpack = unpack
local find = string.find
--WoW API / Variables
local GetCurrencyListInfo = GetCurrencyListInfo
local GetInventoryItemQuality = GetInventoryItemQuality
local GetInventoryItemTexture = GetInventoryItemTexture
local GetItemInfo = GetItemInfo
local GetItemQualityColor = GetItemQualityColor
local hooksecurefunc = hooksecurefunc
S:AddCallback("Skin_Character", function()
if not E.private.skins.blizzard.enable or not E.private.skins.blizzard.character then return end
-- CharacterFrame
AscensionCharacterFrame:StripTextures(true)
AscensionCharacterFrameNineSlice:StripTextures(true)
AscensionCharacterFrameInset:StripTextures(true)
AscensionCharacterFrame:CreateBackdrop("Transparent")
S:HandleCloseButton(AscensionCharacterFrameCloseButton)
AscensionPaperDollPanel:StripTextures(true)
AscensionPaperDollPanelModel:StripTextures(true)
S:HandleTabSystem(AscensionCharacterFrame)
local popoutButtonOnEnter = function(self) self.icon:SetVertexColor(unpack(E.media.rgbvaluecolor)) end
local popoutButtonOnLeave = function(self) self.icon:SetVertexColor(1, 1, 1) end
local slots = {
[1] = AscensionCharacterHeadSlot,
[2] = AscensionCharacterNeckSlot,
[3] = AscensionCharacterShoulderSlot,
[4] = AscensionCharacterShirtSlot,
[5] = AscensionCharacterChestSlot,
[6] = AscensionCharacterWaistSlot,
[7] = AscensionCharacterLegsSlot,
[8] = AscensionCharacterFeetSlot,
[9] = AscensionCharacterWristSlot,
[10] = AscensionCharacterHandsSlot,
[11] = AscensionCharacterFinger0Slot,
[12] = AscensionCharacterFinger1Slot,
[13] = AscensionCharacterTrinket0Slot,
[14] = AscensionCharacterTrinket1Slot,
[15] = AscensionCharacterBackSlot,
[16] = AscensionCharacterMainHandSlot,
[17] = AscensionCharacterSecondaryHandSlot,
[18] = AscensionCharacterRangedSlot,
[19] = AscensionCharacterTabardSlot,
[20] = AscensionCharacterAmmoSlot, -- 0
}
for i, slotFrame in ipairs(slots) do
local slotFrameName = slotFrame:GetName()
local icon = _G[slotFrameName.."IconTexture"]
slotFrame:StripTextures()
slotFrame:StyleButton(false)
slotFrame:SetTemplate("Default", true, true)
icon:SetInside()
icon:SetTexCoord(unpack(E.TexCoords))
slotFrame:SetFrameLevel(AscensionPaperDollPanel:GetFrameLevel() + 2)
if i ~= 20 then
local cooldown = _G[slotFrameName.."Cooldown"]
local popout = _G[slotFrameName.."PopoutButton"]
E:RegisterCooldown(cooldown)
popout:StripTextures()
popout:HookScript("OnEnter", popoutButtonOnEnter)
popout:HookScript("OnLeave", popoutButtonOnLeave)
popout.icon = popout:CreateTexture(nil, "ARTWORK")
popout.icon:Size(24)
popout.icon:Point("CENTER")
popout.icon:SetTexture(E.Media.Textures.ArrowUp)
if slotFrame.verticalFlyout then
popout.icon:SetRotation(S.ArrowRotation.down)
else
popout.icon:SetRotation(S.ArrowRotation.right)
end
hooksecurefunc(popout, "SetOpenArtwork", function(self)
if self:GetParent().verticalFlyout then
self.icon:SetRotation(S.ArrowRotation.down)
else
self.icon:SetRotation(S.ArrowRotation.right)
end
end)
hooksecurefunc(popout, "SetClosedArtwork", function(self)
if self:GetParent().verticalFlyout then
self.icon:SetRotation(S.ArrowRotation.up)
else
self.icon:SetRotation(S.ArrowRotation.left)
end
end)
end
end
local function updateSlotFrame(self, event, slotID, exist)
if event then
self = slots[slotID]
end
if exist then
local quality = GetInventoryItemQuality("player", slotID)
if quality then
self:SetBackdropBorderColor(GetItemQualityColor(quality))
else
self:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
else
self:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
local function colorItemBorder()
for _, slotFrame in ipairs(slots) do
local slotID = slotFrame:GetID()
updateSlotFrame(slotFrame, nil, slotID, GetInventoryItemTexture("player", slotID) ~= nil)
end
end
local f = CreateFrame("Frame")
f:RegisterEvent("PLAYER_EQUIPMENT_CHANGED")
f:SetScript("OnEvent", updateSlotFrame)
AscensionCharacterFrame:HookScript("OnShow", colorItemBorder)
colorItemBorder()
hooksecurefunc(EquipmentFlyoutFrame, "RefreshItems", function(self)
for button in self.ButtonPool:EnumerateActive() do
if not button.isSkinned then
button.icon = _G[button:GetName().."IconTexture"]
button:GetNormalTexture():SetTexture(nil)
button:SetTemplate("Default")
button:StyleButton()
button.icon:SetInside()
button.icon:SetTexCoord(unpack(E.TexCoords))
E:RegisterCooldown(button.Cooldown)
end
if not button.location or button.location >= PDFITEMFLYOUT_FIRST_SPECIAL_LOCATION then return end
local id = EquipmentManager_GetItemInfoByLocation(button.location)
local _, _, quality = GetItemInfo(id)
button:SetBackdropBorderColor(GetItemQualityColor(quality))
end
end)
-- Side tabs
AscensionCharacterFrameRightInset:StripTextures(true)
S:HandleTabSystem(AscensionCharacterFrameRightInset)
-- Stat Panel
AscensionCharacterStatsPanel:StripTextures(true)
AscensionCharacterStatsPanel:CreateBackdrop("Default")
S:HandleScrollList(AscensionCharacterStatsPanel, function(button)
S:HandleNextPrevButton(button.MoveDownButton, "down", nil, true)
button.MoveDownButton:Size(16)
button.MoveDownButton:SetPoint("RIGHT", -4, 1)
S:HandleNextPrevButton(button.MoveUpButton, "up", nil, true)
button.MoveUpButton:Size(16)
button.MoveUpButton:SetPoint("RIGHT", button.MoveDownButton, "LEFT", 0, -1)
local r, g, b, a = unpack(E.media.backdropfadecolor)
button.Left:SetTexture(E.media.blankTex)
button.Left:SetVertexColor(r, g, b, a)
button.Right:SetTexture(E.media.blankTex)
button.Right:SetVertexColor(r, g, b, a)
button.Middle:SetTexture(E.media.blankTex)
button.Middle:SetVertexColor(r, g, b, a)
end)
-- Title Panel
AscensionCharacterTitlesPanel:StripTextures(true)
AscensionCharacterTitlesPanel:CreateBackdrop("Default")
S:HandleScrollList(AscensionCharacterTitlesPanel, function(button)
button:StripTextures()
button.Active:SetOutside(button)
button.Active:SetTexCoord(0, 1, 0, 1)
button.Active:SetTexture(E.media.blankTex)
button.Active:SetBlendMode("BLEND")
button.Active:SetAlpha(0.2)
local r, g, b = unpack(E.media.rgbvaluecolor)
button.Active:SetVertexColor(r, g, b)
end)
-- Equipment Manager
AscensionCharacterEquipmentManagerPanel:StripTextures(true)
AscensionCharacterEquipmentManagerPanel:CreateBackdrop("Default")
S:HandleScrollList(AscensionCharacterEquipmentManagerPanel, function(button)
button:StripTextures()
S:HandleBorderIcon(button.Icon)
hooksecurefunc(button, "Update", function(self)
if self.index ~= 1 then
self.Icon.Icon:SetTexCoord(unpack(E.TexCoords)) -- add set button will mess with tex coord
end
self:SetNormalTexture(E.media.blankTex)
local color = self.index % 2 == 0 and E.media.backdropcolor or E.media.backdropfadecolor
self:GetNormalTexture():SetVertexColor(unpack(color))
end)
end)
-- Mystic Enchants
AscensionCharacterMysticEnchantPanel:StripTextures(true)
AscensionCharacterMysticEnchantPanel:CreateBackdrop("Default")
S:HandleScrollList(AscensionCharacterMysticEnchantPanel, function(button)
button:GetNormalTexture():SetAllPoints()
hooksecurefunc(button, "Update", function(self)
self:SetNormalTexture(E.media.blankTex)
local color = self.index % 2 == 0 and E.media.backdropcolor or E.media.backdropfadecolor
self:GetNormalTexture():SetVertexColor(unpack(color))
end)
end)
-- Companions
AscensionCharacterCompanionPanel:StripTextures(true)
AscensionCharacterCompanionPanel:CreateBackdrop("Default")
S:HandleScrollList(AscensionCharacterCompanionPanel, function(button)
button:StripTextures()
S:HandleBorderIcon(button.Icon)
hooksecurefunc(button, "Update", function(self)
self:SetNormalTexture(E.media.blankTex)
self.Icon.Icon:SetTexCoord(unpack(E.TexCoords))
local color = self.index % 2 == 0 and E.media.backdropcolor or E.media.backdropfadecolor
self:GetNormalTexture():SetVertexColor(unpack(color))
end)
end)
S:HandleEditBox(AscensionCharacterCompanionPanelSearchBox)
-- PetPaperDollFrame
AscensionPetPaperDollPanel:StripTextures(true)
S:HandleTabSystem(AscensionPetPaperDollPanel)
AscensionPetPaperDollPanelPetTab:StripTextures(true)
AscensionPetPaperDollPanelPetTabOverlay:StripTextures(true)
-- PetPaperDollFrame CompanionFrame
AscensionPetPaperDollPanelCompanionTab:StripTextures(true)
AscensionPetPaperDollPanelCompanionTabCompanionModel:StripTextures(true)
AscensionPetPaperDollPanelCompanionTabCompanionModelOverlay:StripTextures(true)
S:HandleButton(AscensionPetPaperDollPanelCompanionTabCompanionModelOverlaySummonButton)
-- Reputation Frame
AscensionReputationPanel:StripTextures(true)
S:HandleScrollList(AscensionReputationPanelScrollList, function(button)
button:StripTextures(true)
button.ReputationBar.LeftTexture:SetTexture()
button.ReputationBar.RightTexture:SetTexture()
button.ReputationBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(button.ReputationBar)
button.ExpandOrCollapseButton:SetNormalTexture(E.Media.Textures.Minus)
button.ExpandOrCollapseButton.SetNormalTexture = E.noop
button.ExpandOrCollapseButton:GetNormalTexture():Size(15)
button.ExpandOrCollapseButton:SetHighlightTexture(nil)
hooksecurefunc(button, "Update", function(self)
if self.isCollapsed then
self.ExpandOrCollapseButton:GetNormalTexture():SetTexture(E.Media.Textures.Plus)
else
self.ExpandOrCollapseButton:GetNormalTexture():SetTexture(E.Media.Textures.Minus)
end
end)
end)
-- Reputation DetailFrame
AscensionReputationPanelDetailsFrame:StripTextures()
AscensionReputationPanelDetailsFrame:SetTemplate("Transparent")
S:HandleCloseButton(AscensionReputationPanelDetailsFrameCloseButton, AscensionReputationPanelDetailsFrame)
S:HandleCheckBox(AscensionReputationPanelDetailsFrameAtWarToggle)
AscensionReputationPanelDetailsFrameAtWarToggle:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-SwordCheck")
S:HandleCheckBox(AscensionReputationPanelDetailsFrameInactiveToggle)
S:HandleCheckBox(AscensionReputationPanelDetailsFrameWatchToggle)
-- Skill Frame
AscensionSkillsPanel:StripTextures(true)
S:HandleScrollList(AscensionSkillsPanelScrollList, function(button)
button.StatusBar:SetStatusBarTexture(E.media.normTex)
E:RegisterStatusBar(button.StatusBar)
button.StatusBar.Border:SetTexture()
button.ExpandIcon:Size(15)
_G[button.StatusBar:GetName().."Background"]:SetTexture()
hooksecurefunc(button, "Update", function(self)
self.CategoryBackground:SetTexture()
local _, _, isExpanded = GetSkillLineInfo(self.index)
self.ExpandIcon:SetTexCoord(0, 1, 0, 1)
if isExpanded then
self.ExpandIcon:SetTexture(E.Media.Textures.Minus)
else
self.ExpandIcon:SetTexture(E.Media.Textures.Plus)
end
end)
end)
AscensionSkillsPanelDetailsFrame:StripTextures()
AscensionSkillsPanelDetailsFrame:CreateBackdrop("Default")
S:HandleCloseButton(AscensionSkillsPanelDetailsFrameCloseButton)
S:HandleButton(AscensionSkillsPanelDetailsFrameAbandonButton)
-- Token Frame
AscensionCurrencyPanel:StripTextures(true)
S:HandleScrollList(AscensionCurrencyPanelScrollList, function(button)
button.ExpandIcon:SetTexCoord(0, 1, 0, 1)
button.ExpandIcon:SetTexture(E.Media.Textures.Minus)
button.ExpandIcon:Size(15)
hooksecurefunc(button, "Update", function(self)
self.CategoryBackground:SetTexture()
local _, _, isExpanded = GetCurrencyListInfo(self.index)
self.ExpandIcon:SetTexCoord(0, 1, 0, 1)
if isExpanded then
self.ExpandIcon:SetTexture(E.Media.Textures.Minus)
else
self.ExpandIcon:SetTexture(E.Media.Textures.Plus)
end
end)
end)
-- Token Frame Popup
AscensionCurrencyPanelDetailsFrame:StripTextures()
AscensionCurrencyPanelDetailsFrame:SetTemplate("Transparent")
S:HandleCloseButton(AscensionCurrencyPanelDetailsFrameCloseButton, AscensionCurrencyPanelDetailsFrame)
S:HandleCheckBox(AscensionCurrencyPanelDetailsFrameInactiveToggle)
S:HandleCheckBox(AscensionCurrencyPanelDetailsFrameBackpackToggle)
end)