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