ElvUI/Modules/Skins/Blizzard/Talent.lua

356 lines
11 KiB
Lua

local E, L, V, P, G = unpack(select(2, ...)); --Import: Engine, Locales, PrivateDB, ProfileDB, GlobalDB
local S = E:GetModule('Skins')
local _G = _G
local pairs, select, unpack = pairs, select, unpack
local hooksecurefunc = hooksecurefunc
local CreateFrame = CreateFrame
local UnitSex = UnitSex
local GetNumSpecializations = GetNumSpecializations
local GetSpecialization = GetSpecialization
local GetSpecializationInfo = GetSpecializationInfo
local GetSpecializationSpells = GetSpecializationSpells
local GetSpellTexture = GetSpellTexture
local C_SpecializationInfo_GetPvpTalentSlotInfo = C_SpecializationInfo.GetPvpTalentSlotInfo
local C_SpecializationInfo_GetSpellsDisplay = C_SpecializationInfo.GetSpellsDisplay
local function clearBackdrop(self)
self:SetBackdropColor(0, 0, 0, 0)
end
function S:Blizzard_TalentUI()
if not (E.private.skins.blizzard.enable and E.private.skins.blizzard.talent) then return end
local PlayerTalentFrame = _G.PlayerTalentFrame
S:HandlePortraitFrame(PlayerTalentFrame)
_G.PlayerTalentFrameTalents:StripTextures()
if E.global.general.disableTutorialButtons then
_G.PlayerTalentFrameTalentsTutorialButton:Kill()
_G.PlayerTalentFrameSpecializationTutorialButton:Kill()
end
local buttons = {
_G.PlayerTalentFrameSpecializationLearnButton,
_G.PlayerTalentFrameTalentsLearnButton,
_G.PlayerTalentFramePetSpecializationLearnButton
}
S:HandleButton(_G.PlayerTalentFrameActivateButton)
for _, button in pairs(buttons) do
S:HandleButton(button)
end
for i = 1, 3 do
S:HandleTab(_G['PlayerTalentFrameTab'..i])
end
for _, Frame in pairs({ _G.PlayerTalentFrameSpecialization, _G.PlayerTalentFramePetSpecialization }) do
Frame:StripTextures()
for _, Child in pairs({Frame:GetChildren()}) do
if Child:IsObjectType('Frame') and not Child:GetName() then
Child:StripTextures()
end
end
for i = 1, 4 do
local Button = Frame['specButton'..i]
local _, _, _, icon = GetSpecializationInfo(i, false, Frame.isPet)
_G['PlayerTalentFrameSpecializationSpecButton'..i..'Glow']:Kill()
Button:CreateBackdrop()
Button.backdrop:Point('TOPLEFT', 8, 2)
Button.backdrop:Point('BOTTOMRIGHT', 10, -2)
Button.specIcon:Size(50, 50)
Button.specIcon:Point('LEFT', Button, 'LEFT', 15, 0)
Button.specIcon:SetDrawLayer('ARTWORK', 2)
Button.roleIcon:SetDrawLayer('ARTWORK', 2)
Button.bg:SetAlpha(0)
Button.ring:SetAlpha(0)
Button.learnedTex:SetAlpha(0)
Button.selectedTex:SetAlpha(0)
Button.specIcon:SetTexture(icon)
S:HandleIcon(Button.specIcon, true)
Button.specIcon.backdrop:SetFrameLevel(Button:GetFrameLevel()+1)
Button.specIcon.backdrop:SetBackdropColor(0, 0, 0, 0)
Button.specIcon.backdrop.callbackBackdropColor = clearBackdrop
Button:SetHighlightTexture(nil)
Button.SelectedTexture = Button:CreateTexture(nil, 'ARTWORK')
Button.SelectedTexture:SetColorTexture(0, 1, 0, 0.2)
end
Frame.spellsScroll.child.gradient:Kill()
Frame.spellsScroll.child.scrollwork_topleft:SetAlpha(0)
Frame.spellsScroll.child.scrollwork_topright:SetAlpha(0)
Frame.spellsScroll.child.scrollwork_bottomleft:SetAlpha(0)
Frame.spellsScroll.child.scrollwork_bottomright:SetAlpha(0)
Frame.spellsScroll.child.ring:SetAlpha(0)
Frame.spellsScroll.child.Seperator:SetAlpha(0)
S:HandleIcon(Frame.spellsScroll.child.specIcon, true)
end
do
local onFinished = function(s)
local r, g, b = s:GetChange()
local defaultR, defaultG, defaultB = unpack(E.media.bordercolor)
defaultR = E:Round(defaultR, 2)
defaultG = E:Round(defaultG, 2)
defaultB = E:Round(defaultB, 2)
if r == defaultR and g == defaultG and b == defaultB then
s:SetChange(unpack(E.media.rgbvaluecolor))
else
s:SetChange(defaultR, defaultG, defaultB)
end
end
local onShow = function(s)
local parent = s:GetParent()
if not parent.transition:IsPlaying() then
for _, child in pairs(parent.transition.color.children) do
child:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
parent.transition:Play()
end
end
local onHide = function(s)
local parent = s:GetParent()
if parent.transition:IsPlaying() then
parent.transition:Stop()
for _, child in pairs(parent.transition.color.children) do
child:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
end
end
for i = 1, _G.MAX_TALENT_TIERS do
local row = _G.PlayerTalentFrameTalents['tier'..i]
row:StripTextures()
row.TopLine:Point('TOP', 0, 4)
row.BottomLine:Point('BOTTOM', 0, -4)
row.transition = _G.CreateAnimationGroup(row)
row.transition:SetLooping(true)
row.transition.color = row.transition:CreateAnimation('Color')
row.transition.color:SetDuration(0.7)
row.transition.color:SetColorType('border')
row.transition.color:SetChange(unpack(E.media.rgbvaluecolor))
row.transition.color:SetScript('OnFinished', onFinished)
row.GlowFrame:StripTextures()
row.GlowFrame:HookScript('OnShow', onShow)
row.GlowFrame:HookScript('OnHide', onHide)
for j = 1, _G.NUM_TALENT_COLUMNS do
local bu = row['talent'..j]
bu:StripTextures()
bu:SetFrameLevel(bu:GetFrameLevel() + 5)
bu.knownSelection:SetAlpha(0)
bu.icon:SetDrawLayer('OVERLAY', 1)
S:HandleIcon(bu.icon, true)
bu.bg = CreateFrame('Frame', nil, bu)
bu.bg:CreateBackdrop('Overlay')
bu.bg:SetFrameLevel(bu:GetFrameLevel() - 4)
bu.bg:Point('TOPLEFT', 15, -1)
bu.bg:Point('BOTTOMRIGHT', -10, 1)
row.transition.color:AddChild(bu.bg.backdrop)
bu.GlowFrame:Kill()
bu.bg.SelectedTexture = bu.bg:CreateTexture(nil, 'ARTWORK')
bu.bg.SelectedTexture:Point('TOPLEFT', bu, 'TOPLEFT', 15, -1)
bu.bg.SelectedTexture:Point('BOTTOMRIGHT', bu, 'BOTTOMRIGHT', -10, 1)
bu.bg.SelectedTexture:SetColorTexture(0, 1, 0, 0.2)
bu.ShadowedTexture = bu:CreateTexture(nil, 'OVERLAY', nil, 2)
bu.ShadowedTexture:SetColorTexture(0, 0, 0, 0.6)
end
end
end
hooksecurefunc('TalentFrame_Update', function(s)
for i = 1, _G.MAX_TALENT_TIERS do
for j = 1, _G.NUM_TALENT_COLUMNS do
local bu = s['tier'..i]['talent'..j]
if bu.bg and bu.knownSelection then
if bu.knownSelection:IsShown() then
bu.bg.SelectedTexture:Show()
bu.ShadowedTexture:Hide()
else
bu.ShadowedTexture:SetAllPoints(bu.bg.SelectedTexture)
bu.bg.SelectedTexture:Hide()
bu.ShadowedTexture:Show()
bu.icon:SetDesaturated(false)
end
end
end
end
end)
hooksecurefunc('PlayerTalentFrame_UpdateSpecFrame', function(s, spec)
local playerTalentSpec = GetSpecialization(nil, s.isPet, _G.PlayerSpecTab2:GetChecked() and 2 or 1)
local shownSpec = spec or playerTalentSpec or 1
local numSpecs = GetNumSpecializations(nil, s.isPet)
local sex = s.isPet and UnitSex('pet') or UnitSex('player')
local id, _, _, icon = GetSpecializationInfo(shownSpec, nil, s.isPet, nil, sex)
if not id then return end
local scrollBar = s.spellsScroll.ScrollBar
if scrollBar and not scrollBar.backdrop then
S:HandleScrollBar(scrollBar)
end
local scrollChild = s.spellsScroll.child
scrollChild.specIcon:SetTexture(icon)
scrollChild:SetScale(0.99) -- the scrollbar showed on simpy's when it shouldn't, this fixes it by reducing the scale by .01 lol
local index = 1
local bonuses
local bonusesIncrement = 1
if s.isPet then
bonuses = {GetSpecializationSpells(shownSpec, nil, s.isPet, true)}
bonusesIncrement = 2
else
bonuses = C_SpecializationInfo_GetSpellsDisplay(id)
end
for i = 1, numSpecs do
local bu = s['specButton'..i]
bu.SelectedTexture:SetInside(bu.backdrop)
if bu.selected then
bu.SelectedTexture:Show()
else
bu.SelectedTexture:Hide()
end
end
if bonuses then
for i = 1, #bonuses, bonusesIncrement do
local frame = scrollChild['abilityButton'..index]
if frame then
local _, spellTex = GetSpellTexture(bonuses[i])
if spellTex then
frame.icon:SetTexture(spellTex)
end
if not frame.reskinned then
frame.reskinned = true
frame.ring:Hide()
frame.icon:SetTexCoord(unpack(E.TexCoords))
frame.icon:Size(40, 40)
frame:CreateBackdrop()
frame.backdrop:SetOutside(frame.icon)
end
end
index = index + 1
end
end
-- Hide the default flash anim
s.learnButton.Flash:Hide()
s.learnButton.FlashAnim:Stop()
end)
local PvpTalentFrame = _G.PlayerTalentFrameTalents.PvpTalentFrame
PvpTalentFrame:StripTextures()
for _, button in pairs(PvpTalentFrame.Slots) do
button:CreateBackdrop()
button.backdrop:SetOutside(button.Texture)
button.Arrow:SetAlpha(0)
button.Border:Hide()
hooksecurefunc(button, 'Update', function(s)
local slotInfo = C_SpecializationInfo_GetPvpTalentSlotInfo(s.slotIndex);
if not slotInfo then return end
if slotInfo.enabled then
S:HandleIcon(s.Texture)
if not slotInfo.selectedTalentID then
s.Texture:SetTexture([[Interface\Icons\INV_Misc_QuestionMark]])
s.backdrop:SetBackdropBorderColor(0, 1, 0, 1)
else
s.backdrop:SetBackdropBorderColor(unpack(E.media.bordercolor))
end
else
s.Texture:SetTexture([[Interface\PetBattles\PetBattle-LockIcon]])
s.Texture:SetTexCoord(0, 1, 0, 1)
s.Texture:SetDesaturated(true)
s.Texture:Show()
s.backdrop:SetBackdropBorderColor(1, 0, 0, 1)
end
end)
end
PvpTalentFrame.TalentList:StripTextures()
PvpTalentFrame.TalentList:CreateBackdrop('Transparent')
PvpTalentFrame.TalentList:Point('BOTTOMLEFT', PlayerTalentFrame, 'BOTTOMRIGHT', 5, 26)
S:SkinTalentListButtons(PvpTalentFrame.TalentList)
local TalentList_CloseButton = select(4, _G.PlayerTalentFrameTalents.PvpTalentFrame.TalentList:GetChildren())
if TalentList_CloseButton and TalentList_CloseButton:HasScript('OnClick') then
S:HandleButton(TalentList_CloseButton, true)
end
PvpTalentFrame.TalentList.ScrollFrame:Point('TOPLEFT', 5, -5)
PvpTalentFrame.TalentList.ScrollFrame:Point('BOTTOMRIGHT', -21, 32)
PvpTalentFrame.OrbModelScene:SetAlpha(0)
PvpTalentFrame:Size(131, 379)
PvpTalentFrame:Point('LEFT', _G.PlayerTalentFrameTalents, 'RIGHT', -135, 0)
PvpTalentFrame.Swords:Point('BOTTOM', 0, 30)
PvpTalentFrame.Label:Point('BOTTOM', 0, 104)
PvpTalentFrame.InvisibleWarmodeButton:SetAllPoints(PvpTalentFrame.Swords)
PvpTalentFrame.Swords:Size(72, 67)
PvpTalentFrame.Orb:Hide()
PvpTalentFrame.Ring:Hide()
for _, Button in pairs(PvpTalentFrame.TalentList.ScrollFrame.buttons) do
Button:DisableDrawLayer('BACKGROUND')
S:HandleIcon(Button.Icon)
Button:StyleButton()
Button:CreateBackdrop()
Button.Selected:SetTexture()
Button.backdrop:SetAllPoints()
Button.selectedTexture = Button:CreateTexture(nil, 'ARTWORK')
Button.selectedTexture:SetInside(Button)
Button.selectedTexture:SetColorTexture(0, 1, 0, 0.2)
Button.selectedTexture:SetShown(Button.Selected:IsShown())
end
hooksecurefunc(PvpTalentFrame.TalentList, 'Update', function()
for _, Button in pairs(PvpTalentFrame.TalentList.ScrollFrame.buttons) do
if not Button.selectedTexture then return end
if Button.Selected:IsShown() then
Button.selectedTexture:SetShown(true)
else
Button.selectedTexture:Hide()
end
end
end)
S:HandleButton(_G.PlayerTalentFrameTalents.PvpTalentButton)
S:HandleScrollBar(_G.PlayerTalentFrameTalents.PvpTalentFrame.TalentList.ScrollFrame.ScrollBar)
end
S:AddCallbackForAddon('Blizzard_TalentUI')