local ADDON_NAME = "HailMaryGuildTools" local HMGT = LibStub("AceAddon-3.0"):GetAddon(ADDON_NAME) if not HMGT or not HMGT.TrackerManager then return end local Manager = HMGT.TrackerManager local S = Manager._shared or {} function Manager:CollectEntries(tracker) local entries = {} local players = S.GetGroupPlayers(tracker) for _, playerInfo in ipairs(players) do local playerEntries = S.CollectEntriesForPlayer(tracker, playerInfo) for _, entry in ipairs(playerEntries) do entries[#entries + 1] = entry end end return entries end function Manager:CollectTestEntries(tracker) local playerName = HMGT:NormalizePlayerName(UnitName("player")) or "Player" local classToken = select(2, UnitClass("player")) if not classToken then return {} end local entries = {} local pData = HMGT.playerData[playerName] local talents = pData and pData.talents or {} local spells = S.GetTrackerSpellsForPlayer(classToken, GetSpecialization() or 0, tracker.categories) for _, spellEntry in ipairs(spells) do if tracker.enabledSpells[spellEntry.spellId] ~= false then local remaining, total, currentCharges, maxCharges = HMGT:GetCooldownInfo(playerName, spellEntry.spellId) local effectiveCd = HMGT_SpellData.GetEffectiveCooldown(spellEntry, talents) local isAvailabilitySpell = HMGT:IsAvailabilitySpell(spellEntry) local spellKnown = HMGT:IsTrackedSpellKnownForPlayer(playerName, spellEntry.spellId) local hasPartialCharges = (tonumber(maxCharges) or 0) > 0 and (tonumber(currentCharges) or tonumber(maxCharges) or 0) < (tonumber(maxCharges) or 0) local hasActiveCd = ((remaining or 0) > 0) or hasPartialCharges local hasAvailabilityState = isAvailabilitySpell and HMGT:HasAvailabilityState(playerName, spellEntry.spellId) if spellKnown or hasActiveCd or hasAvailabilityState then entries[#entries + 1] = { playerName = playerName, class = classToken, spellEntry = spellEntry, remaining = remaining, total = total > 0 and total or effectiveCd, currentCharges = currentCharges, maxCharges = maxCharges, } end end end return entries end function Manager:BuildEntriesForTracker(tracker) if tracker.testMode then return self:CollectTestEntries(tracker), true end if tracker.demoMode then return HMGT:GetDemoEntries(S.GetTrackerFrameKey(tracker.id), S.GetTrackerSpellPool(tracker.categories), tracker), true end if not tracker.enabled or not HMGT:IsVisibleForCurrentGroup(tracker) then return {}, false end return self:CollectEntries(tracker), true end