Minor custom view cleanup

This commit is contained in:
Aussiemon 2023-01-06 12:29:17 -07:00
parent efc10fcb63
commit 8e52e4fa57

View file

@ -1,9 +1,10 @@
local dmf = get_mod("DMF") local dmf = get_mod("DMF")
local _custom_view_data = dmf:persistent_table("custom_view_data") local _custom_view_persistent_data = dmf:persistent_table("custom_view_data")
local _custom_views_data = {}
local _ingame_ui local _ingame_ui
local _views_data = {}
local _loaded_views = {} local _loaded_views = {}
local ERRORS = { local ERRORS = {
@ -68,10 +69,10 @@ local function inject_view(view_name)
return return
end end
local view_settings = _views_data[view_name].view_settings local view_settings = _custom_views_data[view_name].view_settings
local mod = _custom_views_data[view_name].mod
local mod = _views_data[view_name].mod local init_view_function = view_settings.init_view_function
local init_view_function = view_settings.init_view_function
-- Check for collisions. @TODO: Check for collisions by mod -- Check for collisions. @TODO: Check for collisions by mod
--if _ingame_ui._view_list[view_name] then --if _ingame_ui._view_list[view_name] then
@ -108,13 +109,13 @@ local function remove_injected_views(on_reload)
-- These elements should be removed only on_reload, because, otherwise, they will be deleted automatically. -- These elements should be removed only on_reload, because, otherwise, they will be deleted automatically.
if on_reload then if on_reload then
for view_name, _ in pairs(_views_data) do for view_name, _ in pairs(_custom_views_data) do
-- Remove injected views. -- Remove injected views.
_ingame_ui._view_list[view_name] = nil _ingame_ui._view_list[view_name] = nil
end end
end end
--for _, view_data in pairs(_views_data) do --for _, view_data in pairs(_custom_views_data) do
-- Remove injected transitions. -- Remove injected transitions.
-- for transition_name, _ in pairs(view_data.view_transitions) do -- for transition_name, _ in pairs(view_data.view_transitions) do
-- _ingame_ui_transitions[transition_name] = nil -- _ingame_ui_transitions[transition_name] = nil
@ -149,7 +150,7 @@ local function validate_view_data(view_data)
if type(transition_function) ~= "function" then if type(transition_function) ~= "function" then
dmf.throw_error(ERRORS.THROWABLE.transition_wrong_type, transition_name, type(transition_function)) dmf.throw_error(ERRORS.THROWABLE.transition_wrong_type, transition_name, type(transition_function))
end end
for another_view_name, another_view_data in pairs(_views_data) do for another_view_name, another_view_data in pairs(_custom_views_data) do
for another_transition_name, _ in pairs(another_view_data.view_transitions) do for another_transition_name, _ in pairs(another_view_data.view_transitions) do
if transition_name == another_transition_name then if transition_name == another_transition_name then
dmf.throw_error(ERRORS.THROWABLE.transition_name_taken, transition_name, another_view_data.mod:get_name(), dmf.throw_error(ERRORS.THROWABLE.transition_name_taken, transition_name, another_view_data.mod:get_name(),
@ -219,20 +220,6 @@ local function validate_view_data(view_data)
end end
end end
-- Checks:
-- * View registered
-- * View has settings
-- * View is either loaded or configured to load on call
-- View settings only apply when the app has switched to the view loader.
local function check_load_status(view_name)
local view_settings = _views_data[view_name] and _views_data[view_name].view_settings
return view_settings and _loaded_views[view_name] or
(_custom_view_data.loader_initialized and
(view_settings.load_always or
view_settings.is_hub and view_settings.load_in_hub))
end
-- Checks: -- Checks:
-- * View registered -- * View registered
@ -243,9 +230,9 @@ local function can_open_view(view_name)
if _ingame_ui then if _ingame_ui then
if if
_views_data[view_name] and _custom_views_data[view_name] and
_custom_view_data.loader_initialized and _custom_view_persistent_data.loader_initialized and
not Managers.ui:view_active(view_name) and not Managers.ui:view_active(view_name) and
not Managers.ui:is_view_closing(view_name) not Managers.ui:is_view_closing(view_name)
then then
return true return true
@ -295,7 +282,7 @@ function DMFMod:register_view(view_data)
return return
end end
_views_data[view_name] = { _custom_views_data[view_name] = {
mod = self, mod = self,
view_settings = view_data.view_settings, view_settings = view_data.view_settings,
view_transitions = view_data.view_transitions, view_transitions = view_data.view_transitions,
@ -304,7 +291,7 @@ function DMFMod:register_view(view_data)
if _ingame_ui then if _ingame_ui then
if not dmf.safe_call_nrc(self, {ERRORS.PREFIX.register_view_injection, view_name}, inject_view, view_name) then if not dmf.safe_call_nrc(self, {ERRORS.PREFIX.register_view_injection, view_name}, inject_view, view_name) then
_views_data[view_data.view_name] = nil _custom_views_data[view_data.view_name] = nil
end end
end end
@ -318,19 +305,19 @@ end
-- Track the creation of the view loader -- Track the creation of the view loader
dmf:hook_safe(ViewLoader, "init", function() dmf:hook_safe(ViewLoader, "init", function()
_custom_view_data.loader_initialized = true _custom_view_persistent_data.loader_initialized = true
end) end)
-- Track the deletion of the view loader -- Track the deletion of the view loader
dmf:hook_safe(ViewLoader, "destroy", function() dmf:hook_safe(ViewLoader, "destroy", function()
_custom_view_data.loader_initialized = false _custom_view_persistent_data.loader_initialized = false
end) end)
-- Track the loading of views, set the loader flag if class selection is reached -- Track the loading of views, set the loader flag if class selection is reached
dmf:hook_safe(UIManager, "load_view", function(self, view_name) dmf:hook_safe(UIManager, "load_view", function(self, view_name)
if view_name == "class_selection_view" then if view_name == "class_selection_view" then
_custom_view_data.loader_initialized = true _custom_view_persistent_data.loader_initialized = true
end end
_loaded_views[view_name] = true _loaded_views[view_name] = true
end) end)
@ -344,9 +331,9 @@ end)
-- Store the view handler for later use and inject views -- Store the view handler for later use and inject views
dmf:hook_safe(UIViewHandler, "init", function(self) dmf:hook_safe(UIViewHandler, "init", function(self)
_ingame_ui = self _ingame_ui = self
for view_name, _ in pairs(_views_data) do for view_name, _ in pairs(_custom_views_data) do
if not dmf.safe_call_nrc(self, {ERRORS.PREFIX.ingameui_hook_injection, view_name}, inject_view, view_name) then if not dmf.safe_call_nrc(self, {ERRORS.PREFIX.ingameui_hook_injection, view_name}, inject_view, view_name) then
_views_data[view_name] = nil _custom_views_data[view_name] = nil
end end
end end
end) end)
@ -365,47 +352,11 @@ end
-- Opens/closes a view if all conditions are met. Since keybinds module can't do UI-related checks, all the cheks are -- Opens/closes a view if all conditions are met. Since keybinds module can't do UI-related checks, all the cheks are
-- done in this function. This function is called every time some view-toggling keybind is pressed. -- done in this function. This function is called every time some view-toggling keybind is pressed.
function dmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_perform_action, is_keybind_pressed) function dmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_perform_action, is_keybind_pressed)
--[[
if _ingame_ui then
local view_data = _views_data[view_name]
if not view_data or (view_data.mod ~= mod) then
mod:error(ERRORS.REGULAR.view_not_registered, view_name)
return
end
if is_view_active_for_current_level(view_name) then
if _ingame_ui.current_view == view_name then
if keybind_transition_data.close_view_transition_name and not Managers.chat:chat_is_focused() then
if view_data.view_transitions[keybind_transition_data.close_view_transition_name] then
mod:handle_transition(keybind_transition_data.close_view_transition_name, true,
keybind_transition_data.transition_fade,
keybind_transition_data.close_view_transition_params)
else
mod:error(ERRORS.REGULAR.transition_not_registered, keybind_transition_data.close_view_transition_name,
view_name)
end
end
-- Can open views only when keybind is pressed.
elseif can_perform_action and is_keybind_pressed then
if keybind_transition_data.open_view_transition_name then
if view_data.view_transitions[keybind_transition_data.open_view_transition_name] then
mod:handle_transition(keybind_transition_data.open_view_transition_name, true,
keybind_transition_data.transition_fade,
keybind_transition_data.open_view_transition_params)
else
mod:error(ERRORS.REGULAR.transition_not_registered, keybind_transition_data.open_view_transition_name,
view_name)
end
end
end
end
end
--]]
if _ingame_ui then if _ingame_ui then
-- Check that the view is registered -- Check that the view is registered
local view_data = _views_data[view_name] local view_data = _custom_views_data[view_name]
if not view_data or (view_data.mod ~= mod) then if not view_data or (view_data.mod ~= mod) then
mod:error(ERRORS.REGULAR.view_not_registered, view_name) mod:error(ERRORS.REGULAR.view_not_registered, view_name)
return return