Minor custom view cleanup
This commit is contained in:
parent
efc10fcb63
commit
8e52e4fa57
1 changed files with 20 additions and 69 deletions
|
@ -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,9 +69,9 @@ 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
|
||||||
|
@ -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,8 +230,8 @@ 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
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue