Compare with Previous | Blame | View Log
--[[
Addon: Taos Group Tools
Author: TProg Taonnor
Created by @Taonnor
]]--
--[[
Local variables
]]--
local EARTHGORE = EARTHGORE_ICON_ID
local _logger = nil
local _settingsHandler = TGT_SettingsHandler
local _isActive = false
local _isCreated = false
local _control = TGT_EarthgoreTrackerControl
--[[
Table TGT_EarthgoreTracker
]]--
TGT_EarthgoreTracker = {}
TGT_EarthgoreTracker.__index = TGT_EarthgoreTracker
--[[
===============
PRIVATE METHODS
===============
]]--
--[[
SortTrackers
]]--
local function SortTrackers()
local trackerContainer = _control:GetNamedChild("Container")
local lastTracker = nil
for i, tracker in ipairs(_control.Trackers) do
-- Set hidden state
if (tracker.Player and tracker.EarthgoreTimeStamp >= 0) then
-- Set anchor
tracker:ClearAnchors()
if (i == 1) then
tracker:SetAnchor(TOPLEFT, trackerContainer, TOPLEFT, 0, 3)
else
tracker:SetAnchor(TOPLEFT, lastTracker, BOTTOMLEFT, 0, 3)
end
lastTracker = tracker
tracker:SetHidden(false)
else
tracker:ClearAnchors()
tracker:SetHidden(true)
end
end
return lastTracker
end
--[[
GetPlayerTracker
]]--
local function GetPlayerTracker(player)
-- search player
for i, tracker in ipairs(_control.Trackers) do
if (tracker.Player ~= nil and tracker.Player.PlayerName == player.PlayerName) then
return tracker
end
end
-- search free
for i, tracker in ipairs(_control.Trackers) do
if (tracker.Player == nil) then
return tracker
end
end
return nil
end
--[[
SetupTracker
]]--
local function SetupTracker(player, tracker)
tracker.EarthgoreTimeStamp = GetGameTimeMilliseconds()
tracker.Player = player
local playerName = player.PlayerName
if (_settingsHandler.SavedVariables.AccountNames) then
playerName = GetUnitDisplayName(player.PingTag)
end
tracker.TimeLabel:SetText(zo_strformat("<<1>>", playerName))
end
--[[
UpdatePlayerEarthgore
]]--
local function UpdatePlayerEarthgore(player)
if (player) then
local tracker = GetPlayerTracker(player)
if (tracker) then
if (player.Buffs[EARTHGORE] ~= nil and player.Buffs[EARTHGORE].isActive) then
SetupTracker(player, tracker)
else
tracker:SetHidden(true)
tracker.EarthgoreTimeStamp = -1
tracker.Player = nil
end
SortTrackers()
else
_logger:logError("TGT_EarthgoreTracker -> UpdatePlayerPurgable; No tracker")
end
end
end
--[[
UpdateEarthgoreFrameHeader sets Earthgore frame header hidden
]]--
local function UpdateEarthgoreFrameHeader()
local isHidden = _settingsHandler.SavedVariables.IsGroupEarthgoreHeaderVisible == false
_control:GetNamedChild("HeaderLabel"):SetHidden(isHidden)
end
--[[
SetControlColor sets control color
]]--
local function SetControlColors(part)
if (part == GROUP_EARTHGORE) then
local controlColor = _settingsHandler.SavedVariables.ModuleColors[part].GroupEarthgoreColor
local labelColor = GetAdjustedLabelColor(controlColor)
for i, tracker in ipairs(_control.Trackers) do
tracker.Background:SetAlpha(1)
tracker.Background:SetCenterColor(controlColor.R, controlColor.G, controlColor.B, controlColor.A)
tracker.TimeLabel:SetColor(labelColor.R, labelColor.G, labelColor.B, labelColor.A)
end
end
end
--[[
ResizeControl resizes container control
]]--
local function ResizeControl()
local size = _settingsHandler.SavedVariables.GroupEarthgoreSize
local height = GROUP_SIZE_MAX * size.Height + _control:GetNamedChild("HeaderLabel"):GetHeight()
_control:SetDimensions(size.Width, height)
end
--[[
ResizeEarthgoreBars resizes Earthgore bars
]]--
local function ResizeEarthgoreBars()
local size = _settingsHandler.SavedVariables.GroupEarthgoreSize
for i, tracker in ipairs(_control.Trackers) do
tracker:SetDimensions(size.Width, size.Height)
tracker.TimeLabel:SetDimensions(size.Width - 10, size.Height - 2)
end
SortTrackers() -- Resets anchors
ResizeControl()
end
--[[
RestorePosition sets settings position
]]--
local function RestorePosition()
local posX = _settingsHandler.SavedVariables.Position[GROUP_EARTHGORE].PosX
local posY = _settingsHandler.SavedVariables.Position[GROUP_EARTHGORE].PosY
_control:ClearAnchors()
_control:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
end
--[[
SetControlMovable sets the Movable and MouseEnabled flag in UI elements
]]--
local function SetControlMovable()
local isMovable = _settingsHandler.SavedVariables.Movable
_control:GetNamedChild("MovableControl"):SetHidden(isMovable == false)
_control:SetMovable(isMovable)
_control:SetMouseEnabled(isMovable)
end
--[[
SetControlHidden sets hidden on control
]]--
local function SetControlHidden()
-- Get isActive from settings
if (_settingsHandler.SavedVariables.IsGroupEarthgoreEnabled and _isCreated) then
if (GetIsUnitGrouped()) then
_control:SetHidden(CurrentHudHiddenState())
else
_control:SetHidden(true)
end
else
_control:SetHidden(true)
end
end
--[[
CreateTrackers creates tracker sub controls
]]--
local function CreateTrackers()
local trackerContainer = _control:GetNamedChild("Container")
_control.Trackers = {}
local lastTracker = nil
for i=1, GROUP_SIZE_MAX, 1 do
local tracker = CreateControlFromVirtual("$(parent)EarthgoreTracker", trackerContainer, "TimedBuffTrackerControl", i)
tracker:GetNamedChild("StatusBar"):SetHidden(true)
tracker.Background = tracker:GetNamedChild("Background")
tracker.TimeLabel = tracker:GetNamedChild("TimeLabel")
tracker.EarthgoreTimeStamp = -1
tracker:ClearAnchors()
tracker:SetHidden(true)
lastTracker = tracker
_control.Trackers[i] = tracker
end
end
--[[
SetControlActive sets hidden on control
]]--
local function SetControlActive()
SetControlHidden()
-- Get isActive from settings
local isActive = _settingsHandler.SavedVariables.IsGroupEarthgoreEnabled
if (_isActive ~= isActive) then
_isActive = isActive
if (isActive) then
-- Workaround: To avoid "Too many anchors processed" error; Thank you ZOS for stealing hours of my life!
if (_isCreated == false) then
_isCreated = true
CreateTrackers()
end
SetControlMovable()
RestorePosition()
UpdateEarthgoreFrameHeader()
SetControlColors(GROUP_EARTHGORE)
ResizeEarthgoreBars()
CALLBACK_MANAGER:RegisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TAO_UNIT_GROUPED_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:RegisterCallback(TGT_PLAYER_DATA_REMOTE_CHANGED, UpdatePlayerEarthgore)
CALLBACK_MANAGER:RegisterCallback(TGT_GROUP_EARTHGORE_HEADER_CHANGED, UpdateEarthgoreFrameHeader)
CALLBACK_MANAGER:RegisterCallback(TGT_COLOR_SETTINGS_CHANGED, SetControlColors)
CALLBACK_MANAGER:RegisterCallback(TGT_GROUP_EARTHGORE_SIZE_CHANGED, ResizeEarthgoreBars)
else
CALLBACK_MANAGER:UnregisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TAO_UNIT_GROUPED_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:UnregisterCallback(TGT_PLAYER_DATA_REMOTE_CHANGED, UpdatePlayerEarthgore)
CALLBACK_MANAGER:UnregisterCallback(TGT_GROUP_EARTHGORE_HEADER_CHANGED, UpdateEarthgoreFrameHeader)
CALLBACK_MANAGER:UnregisterCallback(TGT_COLOR_SETTINGS_CHANGED, SetControlColors)
CALLBACK_MANAGER:UnregisterCallback(TGT_GROUP_EARTHGORE_SIZE_CHANGED, ResizeEarthgoreBars)
end
end
end
--[[
==============
PUBLIC METHODS
==============
]]--
--[[
TGT_EarthgoreTracker_OnMoveStop saves position
]]--
function TGT_EarthgoreTracker_OnMoveStop(control)
_settingsHandler.SavedVariables.Position[GROUP_EARTHGORE].PosX = control:GetLeft()
_settingsHandler.SavedVariables.Position[GROUP_EARTHGORE].PosY = control:GetTop()
end
--[[
Initialize initializes TGT_EarthgoreTracker
]]--
function TGT_EarthgoreTracker.Initialize()
_logger = TGT_LOGGER
CALLBACK_MANAGER:RegisterCallback(TGT_IS_ZONE_CHANGED, SetControlActive)
CALLBACK_MANAGER:RegisterCallback(TGT_PLAYER_ACTIVATED, SetControlActive)
CALLBACK_MANAGER:RegisterCallback(TAO_UNIT_GROUPED_CHANGED, SetControlActive)
CALLBACK_MANAGER:RegisterCallback(TGT_GROUP_EARTHGORE_ENABLED_CHANGED, SetControlActive)
_logger:logTrace("TGT_EarthgoreTracker -> Initialized")
end