Go to most recent revision | Compare with Previous | Blame | View Log
--[[
Addon: Taos Group Ultimate
Author: TProg Taonnor
Created by @Taonnor
]]--
--[[
Global variables
]]--
local LOG_ACTIVE = true
local SWIMLANES = 6
local ROWS = 6
--[[
Class SwimlaneList
]]--
SwimlaneList = {}
SwimlaneList.__index = SwimlaneList
--[[
Class Members
]]--
SwimlaneList.Swimlanes = {}
--[[
Sets visibility of labels
]]--
function SwimlaneList.RefreshList()
if (LOG_ACTIVE) then logTrace("SwimlaneList.RefreshList") end
-- for i=1, GROUP_SIZE_MAX, 1 do
-- local row = SwimlaneListControlContainerScrollChild:GetNamedChild("Row" .. i)
-- if (row ~= nil) then
-- if (DoesUnitExist("group" .. i) == false) then
-- row:SetHidden(true)
-- row:GetNamedChild("SenderNameValueLabel"):SetText("-")
-- row:GetNamedChild("UltimateValueLabel"):SetText("-")
-- row:GetNamedChild("ReadyValueLabel"):SetText("0")
-- end
-- else
-- if (LOG_ACTIVE) then logError("SwimlaneList.RefreshList, row nil " .. i) end
-- end
-- end
end
--[[
Updates list row
]]--
function SwimlaneList.UpdateListRow(player)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.UpdateListRow")
-- logDebug("player.PingTag: " .. tostring(player.PingTag),
-- "player.GroupNumber: " .. tostring(player.GroupNumber),
-- "player.PlayerName: " .. tostring(player.PlayerName),
-- "player.IsPlayerDead: " .. tostring(player.IsPlayerDead),
-- "player.AbilityID: " .. tostring(player.AbilityID),
-- "player.UltimateName: " .. tostring(player.UltimateName),
-- "player.UltimateIcon: " .. tostring(player.UltimateIcon),
-- "player.RelativeUltimate: " .. tostring(player.RelativeUltimate))
end
if (player) then
local ultimateGroupId = UltimateGroupHandler.GetUltimateGroupByAbilityId(player.AbilityID)
local swimLane = SwimlaneList.GetSwimLane(ultimateGroupId)
local row = nil
if (swimLane) then
local playerRowId = SwimlaneList.GetSwimLaneRow(swimLane, player.PlayerName)
if (playerRowId ~= -1) then
row = swimLane.SwimlaneControl:GetNamedChild("Row" .. playerRowId)
else
local nextFreeRow = 1
for i,row in ipairs(swimLane.Players) do
nextFreeRow = nextFreeRow + 1
end
if (LOG_ACTIVE) then
logDebug("SwimlaneList.UpdateListRow, add player " .. tostring(playerName) .. " to row " .. tostring(nextFreeRow))
end
swimLane.Players[nextFreeRow] = player
row = swimLane.SwimlaneControl:GetNamedChild("Row" .. nextFreeRow)
end
end
if (row ~= nil) then
row:SetHidden(false)
row:GetNamedChild("SenderNameValueLabel"):SetText(player.PlayerName)
row:GetNamedChild("RelativeUltimateStatusBar"):SetValue(player.RelativeUltimate)
if (player.IsPlayerDead) then
-- Dead Color
row:GetNamedChild("SenderNameValueLabel"):SetColor(0.5, 0.5, 0.5, 0.8)
row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.8, 0.03, 0.03, 0.7)
elseif (player.RelativeUltimate == 100) then
-- Ready Color
row:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 1)
row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.7, 0.03, 0.7)
else
-- Inprogress Color
row:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 0.8)
row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.03, 0.7, 0.7)
end
else
if (LOG_ACTIVE) then logError("SwimlaneList.UpdateListRow, row nil " .. tostring(player.GroupNumber)) end
end
end
end
--[[
Get swimlane from current SwimLanes
]]--
function SwimlaneList.GetSwimLane(ultimateGroupId)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.GetSwimLane")
logDebug("ultimateGroupId: " .. tostring(ultimateGroupId))
end
if (ultimateGroupId ~= 0) then
for i,swimLane in ipairs(SwimlaneList.Swimlanes) do
if (swimLane.UltimateGroupId == ultimateGroupId) then
return swimLane
end
end
if (LOG_ACTIVE) then logDebug("SwimlaneList.GetSwimLane, swimLane not found " .. tostring(ultimateGroupId)) end
return nil
else
if (LOG_ACTIVE) then logError("SwimlaneList.GetSwimLane, ultimateGroupId is 0") end
return nil
end
end
--[[
Get Player Row from current players in swimlane
]]--
function SwimlaneList.GetSwimLaneRow(swimLane, playerName)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.GetSwimLaneRow")
logDebug("swimLane ID: " .. tostring(swimLane.Id))
end
if (swimLane) then
for i,player in ipairs(swimLane.Players) do
logDebug(player.PlayerName .. " == " .. playerName)
if (player.PlayerName == playerName) then
return i
end
end
if (LOG_ACTIVE) then logDebug("SwimlaneList.GetSwimLane, player not found " .. tostring(playerName)) end
return -1
else
if (LOG_ACTIVE) then logError("SwimlaneList.GetSwimLane, swimLane is nil") end
return -1
end
end
--[[
SetControlMovable sets the Movable and MouseEnabled flag in UI elements
]]--
function SwimlaneList.SetControlMovable(isMovable)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.SetControlMovable")
logDebug("isMovable: " .. tostring(isMovable))
end
SwimlaneListControl:SetMovable(isMovable)
SwimlaneListControl:SetMouseEnabled(isMovable)
end
--[[
RestorePosition sets SwimlaneList on settings position
]]--
function SwimlaneList.RestorePosition(posX, posY)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.RestorePosition")
logDebug("posX: " .. tostring(posX),
"posY: " .. tostring(posY))
end
SwimlaneListControl:ClearAnchors()
SwimlaneListControl:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
end
--[[
OnSwimlaneListMoveStop saves current SwimlaneList position to settings
]]--
function SwimlaneList.OnSwimlaneListMoveStop()
if (LOG_ACTIVE) then logTrace("SwimlaneList.OnSwimlaneListMoveStop") end
local left = SwimlaneListControl:GetLeft()
local top = SwimlaneListControl:GetTop()
SettingsHandler.SavedVariables.PosX = left
SettingsHandler.SavedVariables.PosY = top
if (LOG_ACTIVE) then
logDebug("PosX set: " .. tostring(SettingsHandler.SavedVariables.PosX),
"PosY set: " .. tostring(SettingsHandler.SavedVariables.PosY))
end
end
--[[
SetControlHidden sets hidden on control
]]--
function SwimlaneList.SetControlHidden(isHidden)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.SetControlHidden")
logDebug("isHidden: " .. tostring(isHidden))
end
SwimlaneListControl:SetHidden(isHidden)
end
--[[
CreateSwimLaneListHeaders creates swimlane list headers
]]--
function SwimlaneList.CreateSwimLaneListHeaders()
if (LOG_ACTIVE) then logTrace("SwimlaneList.CreateSwimLaneListHeaders") end
for i=1, SWIMLANES, 1 do
local ultimateGroupId = SettingsHandler.SavedVariables.SwimlaneUltimateGroupIds[i]
local swimlaneControlName = "Swimlane" .. tostring(i)
local swimlaneControl = SwimlaneListControl:GetNamedChild(swimlaneControlName)
local icon = swimlaneControl:GetNamedChild("Header"):GetNamedChild("Border"):GetNamedChild("Icon")
if (icon ~= nil and swimlaneControl ~= nil) then
if (ultimateGroupId ~= 0) then
if (LOG_ACTIVE) then
logDebug("Create Swimlane: " .. tostring(i),
"ultimateGroupId: " .. tostring(ultimateGroupId),
"swimlaneControlName: " .. tostring(swimlaneControlName))
end
-- TODO: Namen des Headers auf die GruppenID setzen! (Eigene Übersetzung)
icon:SetTexture(GetAbilityIcon(ultimateGroupId))
local swimLane = {}
swimLane.Id = i
swimLane.UltimateGroupId = ultimateGroupId
swimLane.SwimlaneControl = swimlaneControl
swimLane.Players = {}
SwimlaneList.CreateSwimlaneListRows(swimlaneControl)
SwimlaneList.Swimlanes[i] = swimLane
else
swimlaneControl:SetHidden(true)
end
else
if (LOG_ACTIVE) then
logError("SwimlaneList.CreateSwimLaneListHeaders, controls nil " .. tostring(swimlaneControl) .. ";" .. tostring(icon) .. ";" .. tostring(swimlaneControl))
end
end
end
-- logDebug("Create TestRow")
-- local row = CreateControlFromVirtual("$(parent)Row", SwimlaneListControlSwimlane1, "GroupUltimateSwimlaneRow", 1)
-- row:SetAnchor(TOPLEFT, SwimlaneListControlSwimlane1, TOPLEFT, 0, 25)
-- row:GetNamedChild("SenderNameValueLabel"):SetText("Taonnor Annare")
-- row:GetNamedChild("RelativeUltimateStatusBar"):SetValue(50)
-- -- Inprogress Color
-- row:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 0.8)
-- row:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.03, 0.7, 0.7)
-- logDebug("Create TestRow2")
-- local row2 = CreateControlFromVirtual("$(parent)Row", SwimlaneListControlSwimlane1, "GroupUltimateSwimlaneRow", 2)
-- row2:SetAnchor(TOP, row, BOTTOM, 0, -1)
-- row2:GetNamedChild("SenderNameValueLabel"):SetText("Taonnor ...")
-- row2:GetNamedChild("RelativeUltimateStatusBar"):SetValue(100)
-- -- Ready Color
-- row2:GetNamedChild("SenderNameValueLabel"):SetColor(1, 1, 1, 1)
-- row2:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.03, 0.7, 0.03, 0.7)
-- logDebug("Create TestRow3")
-- local row3 = CreateControlFromVirtual("$(parent)Row", SwimlaneListControlSwimlane1, "GroupUltimateSwimlaneRow", 3)
-- row3:SetAnchor(TOP, row2, BOTTOM, 0, -1)
-- row3:GetNamedChild("SenderNameValueLabel"):SetText("Taonnor")
-- row3:GetNamedChild("RelativeUltimateStatusBar"):SetValue(25)
-- -- Dead Color
-- row3:GetNamedChild("SenderNameValueLabel"):SetColor(0.5, 0.5, 0.5, 0.8)
-- row3:GetNamedChild("RelativeUltimateStatusBar"):SetColor(0.8, 0.03, 0.03, 0.7)
end
--[[
CreateSwimlaneListRows creates swimlane lsit rows
]]--
function SwimlaneList.CreateSwimlaneListRows(swimlaneControl)
if (LOG_ACTIVE) then logTrace("SwimlaneList.CreateSwimlaneListRows") end
if (swimlaneControl ~= nil) then
for i=1, ROWS, 1 do
local row = CreateControlFromVirtual("$(parent)Row", swimlaneControl, "GroupUltimateSwimlaneRow", i)
if (LOG_ACTIVE) then logDebug("Row created " .. row:GetName()) end
row:SetHidden(true) -- initial not visible
if i == 1 then
row:SetAnchor(TOPLEFT, swimlaneControl, TOPLEFT, 0, 25)
else
row:SetAnchor(TOP, lastRow, BOTTOM, 0, -1)
end
lastRow = row
end
else
if (LOG_ACTIVE) then
logError("SwimlaneList.CreateSwimlaneListRows, swimlaneControl nil.")
end
end
end
--[[
Initialize initializes SwimlaneList
]]--
function SwimlaneList.Initialize(isHidden, isMovable, posX, posY)
if (LOG_ACTIVE) then
logTrace("SwimlaneList.Initialize")
logDebug("isHidden: " .. tostring(isHidden),
"isMovable: " .. tostring(isMovable),
"posX: " .. tostring(posX),
"posY: " .. tostring(posY))
end
SwimlaneList.SetControlHidden(isHidden)
SwimlaneList.SetControlMovable(isMovable)
SwimlaneList.RestorePosition(posX, posY)
SwimlaneList.CreateSwimLaneListHeaders()
CALLBACK_MANAGER:RegisterCallback("TGU-GroupChanged", SwimlaneList.RefreshList)
CALLBACK_MANAGER:RegisterCallback("TGU-MapPingChanged", SwimlaneList.UpdateListRow)
end