Compare with Previous | Blame | View Log
--[[ Addon: util Author: TProg Taonnor Created by @Taonnor ]]-- --[[ 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) then TaosUiHelper = {} TaosUiHelper.__index = TaosUiHelper -- Global Callback Variables TUI_HUD_HIDDEN_STATE_CHANGED = "TUI-HudHiddenStateChange" -- isHidden logic for hud scenes -- This logic will fire TUI_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 --[[ CurrentHudHiddenState Gets the hidden state of hud/hudui ]]-- function CurrentHudHiddenState() return internalHudHiddenState end --[[ 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 CALLBACK_MANAGER:FireCallbacks(TUI_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