Compare with Previous | Blame | View Log
--[[
Addon: Taos Group Tools
Author: TProg Taonnor
Created by @Taonnor
]]--
--[[
Local variables
]]--
local TIMEOUT = PLAYERTIMEOUT
local _logger = nil
local _settingsHandler = TGT_SettingsHandler
local _playerHandler = TGT_PlayerHandler
local _name = "TGT-SimpleList"
local _control = TGT_SimpleListControl
local _controlTable = TGT_SimpleListControlContainer
local _isActive = false
local _isCreated = false
local _players = {}
--[[
Table TGT_SimpleList
]]--
TGT_SimpleList = {}
TGT_SimpleList.__index = TGT_SimpleList
--[[
===============
PRIVATE METHODS
===============
]]--
--[[
Updates list row
]]--
local function UpdateListRow(row, player)
local localizedUltimateName = zo_strformat(SI_ABILITY_TOOLTIP_NAME, player.UltimateName)
local playerName = player.PlayerName
if (_settingsHandler.SavedVariables.AccountNames) then
playerName = GetUnitDisplayName(player.PingTag)
end
if (_settingsHandler.SavedVariables.CombatActive[GROUP_ULTIMATE] and player.IsPlayerInCombat) then
playerName = playerName .. "*"
end
local resourcesString = player.RelativeUltimate
if (_settingsHandler.SavedVariables.IsGroupResourcesEnabled) then
resourcesString = zo_strformat("<<1>>/<<2>>/<<3>>", player.RelativeUltimate, player.RelativeStamina, player.RelativeMagicka)
end
row:GetNamedChild("SenderNameValueLabel"):SetText(playerName)
row:GetNamedChild("UltimateValueLabel"):SetText(localizedUltimateName)
row:GetNamedChild("ReadyValueLabel"):SetText(resourcesString)
if (player.IsPlayerTimedOut or player.IsPlayerOnline == false) then
row:GetNamedChild("SenderNameValueLabel"):SetColor(0.3, 0.3, 0.3, 1)
row:GetNamedChild("UltimateValueLabel"):SetColor(0.3, 0.3, 0.3, 1)
row:GetNamedChild("ReadyValueLabel"):SetColor(0.3, 0.3, 0.3, 1)
elseif (player.IsPlayerDead) then
row:GetNamedChild("SenderNameValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
row:GetNamedChild("UltimateValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
row:GetNamedChild("ReadyValueLabel"):SetColor(1.0, 0.0, 0.0, 1)
elseif (player.RelativeUltimate == 100) then
row:GetNamedChild("SenderNameValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
row:GetNamedChild("UltimateValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
row:GetNamedChild("ReadyValueLabel"):SetColor(0.0, 1.0, 0.0, 1)
else
row:GetNamedChild("SenderNameValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
row:GetNamedChild("UltimateValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
row:GetNamedChild("ReadyValueLabel"):SetColor(1.0, 1.0, 1.0, 1)
end
if (row:IsHidden()) then
row:SetHidden(false)
end
end
--[[
Compare
]]--
local function Compare(playerLeft, playerRight)
if (playerLeft.RelativeUltimate == playerRight.RelativeUltimate) then
return playerLeft.PlayerPosition < playerRight.PlayerPosition
else
return playerLeft.RelativeUltimate > playerRight.RelativeUltimate
end
end
--[[
Sets visibility of labels
]]--
local function RefreshList()
local functionTimestamp = GetGameTimeMilliseconds()
local players = {}
local nextFreeRow = 1
for i,player in pairs(_playerHandler.GetRemoteGroupPlayers()) do
if (player.UltimateGroup ~= nil) then
players[nextFreeRow] = player
nextFreeRow = nextFreeRow + 1
end
end
if (_settingsHandler.SavedVariables.IsSortingActive) then
table.sort(players, Compare)
end
local lastRow = nil
for i=1, GROUP_SIZE_MAX, 1 do
local row = _controlTable:GetNamedChild("Row" .. i)
local listPlayer = players[i]
if (listPlayer ~= nil) then
row:ClearAnchors()
if i == 1 then
row:SetAnchor(TOPLEFT, _controlTable, TOPLEFT, 0, 0)
row:SetAnchor(TOPRIGHT, _controlTable, TOPRIGHT, 0, 0)
else
row:SetAnchor(TOPLEFT, lastRow, BOTTOMLEFT, 0, 0)
row:SetAnchor(TOPRIGHT, lastRow, BOTTOMRIGHT, 0, 0)
end
lastRow = row
listPlayer.UltimateSimpleListRow = row
UpdateListRow(row, listPlayer)
else
row:ClearAnchors()
row:SetHidden(true)
end
end
_logger:logTrace("TGT_SimpleList -> RefreshList", GetGameTimeMilliseconds() - functionTimestamp)
end
--[[
Updates players
]]--
local function UpdatePlayer(player)
if (player) then
if (player.UltimateSimpleListRow ~= nil) then
UpdateListRow(player.UltimateSimpleListRow, player)
end
end
end
--[[
Clears player
]]--
local function ClearPlayer(player)
if (player) then
player.UltimateSimpleListRow = nil
end
end
--[[
SetControlMovable sets the Movable and MouseEnabled flag in UI elements
]]--
local function SetControlMovable(isMovable)
local isMovable = _settingsHandler.SavedVariables.Movable
_control:GetNamedChild("MovableControl"):SetHidden(isMovable == false)
_control:SetMovable(isMovable)
_control:SetMouseEnabled(isMovable)
end
--[[
RestorePosition sets TGT_SimpleList on settings position
]]--
local function RestorePosition()
local posX = _settingsHandler.SavedVariables.Position[GROUP_ULTIMATE].PosX
local posY = _settingsHandler.SavedVariables.Position[GROUP_ULTIMATE].PosY
_control:ClearAnchors()
_control:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
end
--[[
SetControlHidden sets hidden on control
]]--
local function SetControlHidden()
-- Get isActive from settings
if (_settingsHandler.IsSimpleListVisible() and _isCreated) then
if (GetIsUnitGrouped() and GetGroupSize() >= _settingsHandler.SavedVariables.VisibleOffset[GROUP_ULTIMATE]) then
_control:SetHidden(CurrentHudHiddenState())
else
_control:SetHidden(true)
end
else
_control:SetHidden(true)
end
end
--[[
SetGroupResources shows/hide the GroupResources UI elements
]]--
local function SetGroupResources()
if (_settingsHandler.SavedVariables.IsGroupResourcesEnabled) then
_control:GetNamedChild("ReadyHeaderLabel"):SetText("Ult/Stam/Mag")
else
_control:GetNamedChild("ReadyHeaderLabel"):SetText("Ultimate")
end
end
--[[
CreateSimpleListRows creates simple list rows
]]--
local function CreateSimpleListRows()
for i=1, GROUP_SIZE_MAX, 1 do
local row = CreateControlFromVirtual("$(parent)Row", _controlTable, "GroupUltimateSimpleListRow", i)
row:SetHidden(true) -- initial not visible
end
end
--[[
SetControlActive sets hidden on control
]]--
local function SetControlActive()
SetControlHidden()
-- Get isActive from settings
local isActive = _settingsHandler.IsSimpleListVisible()
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
CreateSimpleListRows()
end
SetControlMovable()
RestorePosition()
SetGroupResources()
RefreshList()
CALLBACK_MANAGER:RegisterCallback(TGT_PLAYER_DATA_REFRESH, RefreshList)
CALLBACK_MANAGER:RegisterCallback(TGT_PLAYER_DATA_REMOTE_CHANGED, UpdatePlayer)
CALLBACK_MANAGER:RegisterCallback(TGT_PLAYER_DATA_CLEAR, ClearPlayer)
CALLBACK_MANAGER:RegisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:RegisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TGT_VISIBLE_OFFSET_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TGT_GROUP_RESOURCES_ENABLED_CHANGED, SetGroupResources)
else
CALLBACK_MANAGER:UnregisterCallback(TGT_PLAYER_DATA_REFRESH, RefreshList)
CALLBACK_MANAGER:UnregisterCallback(TGT_PLAYER_DATA_REMOTE_CHANGED, UpdatePlayer)
CALLBACK_MANAGER:UnregisterCallback(TGT_PLAYER_DATA_CLEAR, ClearPlayer)
CALLBACK_MANAGER:UnregisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:UnregisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TGT_VISIBLE_OFFSET_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TGT_GROUP_RESOURCES_ENABLED_CHANGED, SetGroupResources)
end
end
end
--[[
==============
PUBLIC METHODS
==============
]]--
--[[
OnSimpleListMoveStop saves current TGT_SimpleList position to settings
]]--
function TGT_SimpleList.OnSimpleListMoveStop()
local left = _control:GetLeft()
local top = _control:GetTop()
_settingsHandler.SavedVariables.Position[GROUP_ULTIMATE].PosX = left
_settingsHandler.SavedVariables.Position[GROUP_ULTIMATE].PosY = top
end
--[[
Initialize initializes TGT_SimpleList
]]--
function TGT_SimpleList.Initialize()
_logger = TGT_LOGGER
CALLBACK_MANAGER:RegisterCallback(TGT_STYLE_CHANGED, SetControlActive)
CALLBACK_MANAGER:RegisterCallback(TGT_SENDING_CHANGED, SetControlActive)
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_ULTIMATE_ENABLED_CHANGED, SetControlActive)
_logger:logTrace("TGT_SimpleList -> Initialized")
end