ESOUI SVN TaosGroupTools

[/] [trunk/] [TaosGroupTools/] [ui/] [groupleader/] [CustomizedCompass.lua] - Rev 132

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

Compare with Previous | Blame