Compare with Previous | Blame | View Log
--[[
Addon: Taos Group Tools
Author: TProg Taonnor
Created by @Taonnor
]]--
--[[
Local variables
]]--
local _logger = nil
local _settingsHandler = TGT_SettingsHandler
local _control = TGT_CustomizedCompassControl
local _compassLabels = {
[1] = _control:GetNamedChild("North"),
[2] = _control:GetNamedChild("East"),
[3] = _control:GetNamedChild("South"),
[4] = _control:GetNamedChild("West"),
}
local _isActive = false
--[[
Table TGT_CustomizedCompass
]]--
TGT_CustomizedCompass = {}
TGT_CustomizedCompass.__index = TGT_CustomizedCompass
--[[
===============
PRIVATE METHODS
===============
]]--
--[[
UpdateCompassAngle updates rotation of compass
]]--
local function UpdateCompassAngle()
local angle, posX, posY
local radius = _settingsHandler.SavedVariables.CompassRadius
local flatCompass = _settingsHandler.SavedVariables.FlatCompass
local compassFontSize = _settingsHandler.SavedVariables.CompassFontSize
for i = 1, 4 do
angle = (i - 2) * math.pi / 2 + GetPlayerCameraHeading()
posX = zo_round(radius * math.cos(angle))
posY = zo_round(radius * math.sin(angle))
if (flatCompass) then
if (posY >= compassFontSize) then
_compassLabels[i]:SetHidden(true)
else
_compassLabels[i]:SetHidden(false)
end
posY = 0
end
_compassLabels[i]:ClearAnchors()
_compassLabels[i]:SetAnchor(CENTER, _control, CENTER, posX, posY)
end
end
--[[
SetControlColors sets control color
]]--
local function SetControlColors(part)
if (part == GROUP_LEADER) then
local controlColor = _settingsHandler.SavedVariables.ModuleColors[part].CompassColor
_control:GetNamedChild("North"):SetColor(controlColor.R, controlColor.G, controlColor.B, controlColor.A)
_control:GetNamedChild("East"):SetColor(controlColor.R, controlColor.G, controlColor.B, controlColor.A)
_control:GetNamedChild("South"):SetColor(controlColor.R, controlColor.G, controlColor.B, controlColor.A)
_control:GetNamedChild("West"):SetColor(controlColor.R, controlColor.G, controlColor.B, controlColor.A)
end
end
--[[
SetControlSize sets control size
]]--
local function SetControlSize()
local radius = _settingsHandler.SavedVariables.CompassRadius
local flatCompass = _settingsHandler.SavedVariables.FlatCompass
local compassFontSize = _settingsHandler.SavedVariables.CompassFontSize
if (flatCompass) then
_control:SetDimensions(radius * 2, compassFontSize)
else
_control:SetDimensions(radius * 2, radius * 2)
end
end
--[[
SetControlFont sets control font
]]--
local function SetControlFont()
local fontIndex = _settingsHandler.SavedVariables.CompassFont
local compassFont = _settingsHandler.CompassFonts[fontIndex].fontName
local compassFontSize = _settingsHandler.SavedVariables.CompassFontSize
local face = _G[compassFont]:GetFontInfo()
local shadowStyle = "soft-shadow-thick"
if (compassFontSize <= 14) then
shadowStyle = "soft-shadow-thin"
end
local fontSizeString = CHAT_SYSTEM:GetFontSizeString(compassFontSize)
local fontFormatString = ("%s|%s|%s"):format(face, fontSizeString, shadowStyle)
_control:GetNamedChild("North"):SetFont(fontFormatString)
_control:GetNamedChild("East"):SetFont(fontFormatString)
_control:GetNamedChild("South"):SetFont(fontFormatString)
_control:GetNamedChild("West"):SetFont(fontFormatString)
SetControlSize()
end
--[[
SetControlStyle Updates control
]]--
local function SetControlStyle()
local flatCompass = _settingsHandler.SavedVariables.FlatCompass
if (flatCompass == false) then
_control:GetNamedChild("North"):SetHidden(false)
_control:GetNamedChild("East"):SetHidden(false)
_control:GetNamedChild("South"):SetHidden(false)
_control:GetNamedChild("West"):SetHidden(false)
end
SetControlSize()
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
--[[
RestorePosition sets on settings position
]]--
local function RestorePosition()
local posX = _settingsHandler.SavedVariables.Position[GROUP_LEADER].PosX
local posY = _settingsHandler.SavedVariables.Position[GROUP_LEADER].PosY
_control:ClearAnchors()
_control:SetAnchor(TOPLEFT, GuiRoot, TOPLEFT, posX, posY)
end
--[[
HideStandardCompass sets hidden on standard compass controls
]]--
local function HideStandardCompass()
local isActive = _settingsHandler.SavedVariables.IsCustomizedCompassActive
local hideStandardCompass = _settingsHandler.SavedVariables.HideStandardCompass
if (hideStandardCompass and isActive and GetIsUnitGrouped()) then
ZO_CompassCenterOverPinLabel:SetHidden(true)
ZO_CompassContainer:SetHidden(true)
ZO_CompassFrameLeft:SetHidden(true)
ZO_CompassFrameCenter:SetHidden(true)
ZO_CompassFrameRight:SetHidden(true)
else
ZO_CompassCenterOverPinLabel:SetHidden(false)
ZO_CompassContainer:SetHidden(false)
ZO_CompassFrameLeft:SetHidden(false)
ZO_CompassFrameCenter:SetHidden(false)
ZO_CompassFrameRight:SetHidden(false)
end
end
--[[
SetControlHidden sets hidden on control
]]--
local function SetControlHidden()
local isActive = _settingsHandler.SavedVariables.IsCustomizedCompassActive
-- Only show if control is active, player is grouped
if (isActive and GetIsUnitGrouped()) then
_control:SetHidden(CurrentHudHiddenState())
else
_control:SetHidden(true)
end
end
--[[
SetControlActive sets isActive on control
]]--
local function SetControlActive()
SetControlHidden()
HideStandardCompass()
local isActive = _settingsHandler.SavedVariables.IsCustomizedCompassActive
if (_isActive ~= isActive) then
_isActive = isActive
if (isActive) then
SetControlMovable()
RestorePosition()
SetControlFont() -- Calls SetControlSize()
SetControlColors(GROUP_LEADER)
CALLBACK_MANAGER:RegisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TAO_UNIT_GROUPED_CHANGED, SetControlHidden)
CALLBACK_MANAGER:RegisterCallback(TAO_UNIT_GROUPED_CHANGED, HideStandardCompass)
CALLBACK_MANAGER:RegisterCallback(TGT_COMPASS_ZOS_COMPASS_CHANGED, HideStandardCompass)
CALLBACK_MANAGER:RegisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:RegisterCallback(TGT_COLOR_SETTINGS_CHANGED, SetControlColors)
CALLBACK_MANAGER:RegisterCallback(TGT_COMPASS_RADIUS_CHANGED, SetControlSize)
CALLBACK_MANAGER:RegisterCallback(TGT_COMPASS_FONT_CHANGED, SetControlFont)
CALLBACK_MANAGER:RegisterCallback(TGT_COMPASS_FLAT_CHANGED, SetControlStyle)
else
CALLBACK_MANAGER:UnregisterCallback(TAO_HUD_HIDDEN_STATE_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TAO_UNIT_GROUPED_CHANGED, SetControlHidden)
CALLBACK_MANAGER:UnregisterCallback(TAO_UNIT_GROUPED_CHANGED, HideStandardCompass)
CALLBACK_MANAGER:UnregisterCallback(TGT_COMPASS_ZOS_COMPASS_CHANGED, HideStandardCompass)
CALLBACK_MANAGER:UnregisterCallback(TGT_MOVABLE_CHANGED, SetControlMovable)
CALLBACK_MANAGER:UnregisterCallback(TGT_COLOR_SETTINGS_CHANGED, SetControlColors)
CALLBACK_MANAGER:UnregisterCallback(TGT_COMPASS_RADIUS_CHANGED, SetControlSize)
CALLBACK_MANAGER:UnregisterCallback(TGT_COMPASS_FONT_CHANGED, SetControlFont)
CALLBACK_MANAGER:UnregisterCallback(TGT_COMPASS_FLAT_CHANGED, SetControlStyle)
end
end
end
--[[
==============
PUBLIC METHODS
==============
]]--
--[[
OnUpdateControl updates position of compass
]]--
function TGT_CustomizedCompass_OnUpdate()
-- If UI visible, the method will be called every frame
UpdateCompassAngle()
end
--[[
TGT_DpsHpsBarList_OnMoveStop saves position
]]--
function TGT_CustomizedCompass_OnMoveStop(control)
_settingsHandler.SavedVariables.Position[GROUP_LEADER].PosX = control:GetLeft()
_settingsHandler.SavedVariables.Position[GROUP_LEADER].PosY = control:GetTop()
end
--[[
Initialize initializes TGT_CustomizedCompass
]]--
function TGT_CustomizedCompass.Initialize()
_logger = TGT_LOGGER
_control:GetNamedChild("North"):SetText(GetString(SI_COMPASS_NORTH_ABBREVIATION))
_control:GetNamedChild("East"):SetText(GetString(SI_COMPASS_EAST_ABBREVIATION))
_control:GetNamedChild("South"):SetText(GetString(SI_COMPASS_SOUTH_ABBREVIATION))
_control:GetNamedChild("West"):SetText(GetString(SI_COMPASS_WEST_ABBREVIATION))
SetControlActive()
CALLBACK_MANAGER:RegisterCallback(TGT_COMPASS_ACTIVE_CHANGED, SetControlActive)
_logger:logTrace("TGT_CustomizedCompass -> Initialized")
end