ESOUI SVN TaosGroupTools

[/] [trunk/] [TaosGroupTools/] [util/] [UiHelper.lua] - Rev 132

Compare with Previous | Blame | View Log

--[[
        Addon: util
        Author: TProg Taonnor
        Created by @Taonnor
]]--

-- Version Control
local VERSION = 3

--[[
        Class definition (Static class)
]]--
-- A table in hole lua workspace must be unique
-- The ui helper is global util table, used in several of my addons
-- The table is created as "static" class without constructor and static helper methods
if (TaosUiHelper == nil or TaosUiHelper.Version == nil or TaosUiHelper.Version < VERSION) then
        TaosUiHelper = {}
        TaosUiHelper.__index = TaosUiHelper
    TaosUiHelper.Version = VERSION

    -- Global Callback Variables
    TUI_HUD_HIDDEN_STATE_CHANGED = "TUI-HudHiddenStateChange" -- Older version, for compability
    TAO_HUD_HIDDEN_STATE_CHANGED = "TAO-HudHiddenStateChange"

        -- isHidden logic for hud scenes
    -- This logic will fire TAO_HUD_HIDDEN_STATE_CHANGED if hud scenes not visible:
    -- hud = true; hudui = true -> isHidden = true
    -- hud = true; hudui = false -> isHidden = false
    -- hud = false; hudui = true -> isHidden = false
    -- hud = false; hudui = false -> isHidden = false
    local _internalHudSceneState = true
    local _internalHudUiSceneState = true
    local _internalHudHiddenState = true
    
    --[[
            ==============
        PUBLIC METHODS
        ==============
    ]]--

    --[[
        CurrentHudHiddenState Gets the hidden state of hud/hudui
    ]]--
    function CurrentHudHiddenState()
        return _internalHudHiddenState
    end

     --[[
        FireCallbacksAsync Fires callbacks async, maximum 2 values
    ]]--
    function FireCallbacksAsync(callbackName, value1, value2)
        -- zo_callLater will use EVENT_MANAGER to fire the callbacks async after 1 ms
        zo_callLater(
            function() 
                CALLBACK_MANAGER:FireCallbacks(callbackName, value1, value2)
            end, 1)
    end
    
     --[[
        GetAdjustedLabelColor Returns dark or light color for labels on base of background color
    ]]--
    function GetAdjustedLabelColor(backgroundColor)
        local isDarken = (backgroundColor.R * 76.245 + backgroundColor.G * 149.685 + backgroundColor.B * 29.07) > 186

        if (isDarken) then
            return { R = 0.1, G = 0.1, B = 0.1, A = 1 }
        else
            return { R = 0.9, G = 0.9, B = 0.9, A = 1 }
        end
    end

    --[[
            ===============
        PRIVATE METHODS
        ===============
    ]]--

    --[[
        UpdateHiddenState updates the hidden state on base of hud/hudui state
    ]]--
    local function UpdateHiddenState()
                local isHidden = _internalHudSceneState and _internalHudUiSceneState
                
        if (isHidden ~= _internalHudHiddenState) then
            _internalHudHiddenState = isHidden
            FireCallbacksAsync(TUI_HUD_HIDDEN_STATE_CHANGED, isHidden)
            FireCallbacksAsync(TAO_HUD_HIDDEN_STATE_CHANGED, isHidden)
        end
    end

    --[[
        HudSceneOnStateChange callback of hud OnStateChange
    ]]--
    local function HudSceneOnStateChange(oldState, newState)
        if (newState == SCENE_HIDING) then
            _internalHudSceneState = true
                        -- make call async to catch both state changes before changing visibility
                        zo_callLater(UpdateHiddenState, 1)
        elseif (newState == SCENE_SHOWING) then
            _internalHudSceneState = false
                        -- make call async to catch both state changes before changing visibility
                        zo_callLater(UpdateHiddenState, 1)
        end
    end

    --[[
        HudUiSceneOnStateChange callback of hudui OnStateChange
    ]]--
    local function HudUiSceneOnStateChange(oldState, newState)
                if (newState == SCENE_HIDING) then
            _internalHudUiSceneState = true
                        -- make call async to catch both state changes before changing visibility
                        zo_callLater(UpdateHiddenState, 1)
        elseif (newState == SCENE_SHOWING) then
            _internalHudUiSceneState = false
                        -- make call async to catch both state changes before changing visibility
                        zo_callLater(UpdateHiddenState, 1)
        end
    end

    --[[
        Register callbacks to scenes
    ]]--
     -- Reticle Scene
    SCENE_MANAGER:GetScene("hud"):RegisterCallback("StateChange", HudSceneOnStateChange)
     -- Mouse Scene
    SCENE_MANAGER:GetScene("hudui"):RegisterCallback("StateChange", HudUiSceneOnStateChange)
    
end

Compare with Previous | Blame