Files
Guda-ClassicAPI/UI/CharacterSelector.lua
T
Salikh Gurgenidze aec33e3652 first commit
2025-11-16 04:47:49 +04:00

129 lines
3.5 KiB
Lua

-- Guda Character Selector
-- Select character to view bags/bank
local addon = Guda
local CharacterSelector = {}
addon.Modules.CharacterSelector = CharacterSelector
local charButtons = {}
-- OnLoad
function Guda_CharacterSelector_OnLoad(self)
getglobal(self:GetName().."_Title"):SetText("Select Character")
addon:Debug("Character selector loaded")
end
-- OnShow
function Guda_CharacterSelector_OnShow(self)
CharacterSelector:Update()
end
-- Toggle visibility
function CharacterSelector:Toggle()
if Guda_CharacterSelector:IsShown() then
Guda_CharacterSelector:Hide()
else
Guda_CharacterSelector:Show()
end
end
-- Update character list
function CharacterSelector:Update()
-- Clear existing buttons
for _, button in ipairs(charButtons) do
button:Hide()
end
charButtons = {}
-- Get all characters
local characters = addon.Modules.DB:GetAllCharacters(true) -- Same faction only
local characterList = getglobal("Guda_CharacterSelector_CharacterList")
-- Create buttons for each character
local yOffset = -10
for i, char in ipairs(characters) do
local button = self:GetCharacterButton(i)
-- Set text with class color
local classColor = addon.Modules.Utils:GetClassColor(char.class)
local coloredName = addon.Modules.Utils:ColorText(char.name, classColor.r, classColor.g, classColor.b)
button:SetText(string.format("%s (Lv %d)", coloredName, char.level))
button.charData = char
-- Position
button:ClearAllPoints()
button:SetPoint("TOP", characterList, "TOP", 0, yOffset)
yOffset = yOffset - 35
button:Show()
table.insert(charButtons, button)
end
if table.getn(characters) == 0 then
addon:Debug("No other characters found")
end
end
-- Get or create character button
function CharacterSelector:GetCharacterButton(index)
local name = "Guda_CharButton" .. index
local characterList = getglobal("Guda_CharacterSelector_CharacterList")
local button = getglobal(name)
if not button then
button = CreateFrame("Button", name, characterList, "Guda_CharacterButtonTemplate")
end
return button
end
-- Character button OnClick
function Guda_CharacterButton_OnClick(self)
if not self.charData then
return
end
addon:Print("Viewing %s's bags", self.charData.name)
-- Show bags for this character
addon.Modules.BagFrame:ShowCharacter(self.charData.fullName)
-- Close selector
Guda_CharacterSelector:Hide()
-- Show bag frame if not visible
if not Guda_BagFrame:IsShown() then
Guda_BagFrame:Show()
end
end
-- Character button OnEnter
function Guda_CharacterButton_OnEnter(self)
if not self.charData then
return
end
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
GameTooltip:AddLine(self.charData.name, 1, 1, 1)
GameTooltip:AddLine("Level " .. self.charData.level .. " " .. self.charData.class, 0.7, 0.7, 0.7)
GameTooltip:AddLine("Money: " .. addon.Modules.Utils:FormatMoney(self.charData.money))
if self.charData.lastUpdate then
GameTooltip:AddLine("Last seen: " .. addon.Modules.Utils:FormatTimeAgo(self.charData.lastUpdate), 0.5, 0.5, 0.5)
end
GameTooltip:Show()
end
-- Show current character
function Guda_CharacterSelector_ShowCurrent()
addon.Modules.BagFrame:ShowCurrentCharacter()
Guda_CharacterSelector:Hide()
if not Guda_BagFrame:IsShown() then
Guda_BagFrame:Show()
end
end