[Custom Views] Updated error handling
This commit is contained in:
parent
150b2c09aa
commit
b981c0e9a3
1 changed files with 39 additions and 40 deletions
|
@ -34,8 +34,6 @@ local ERRORS = {
|
||||||
blocked_transition_wrong_value = "invalid value for 'view_settings.blocked_transitions.%s.%s'; must be 'true'."
|
blocked_transition_wrong_value = "invalid value for 'view_settings.blocked_transitions.%s.%s'; must be 'true'."
|
||||||
},
|
},
|
||||||
REGULAR = {
|
REGULAR = {
|
||||||
view_data_wrong_type = "[Custom Views] (register_view) Loading view data file '%s': returned view data must be " ..
|
|
||||||
"a table, not %s.",
|
|
||||||
view_not_registered = "[Custom Views] Toggling view with keybind: view '%s' wasn't registered for this mod.",
|
view_not_registered = "[Custom Views] Toggling view with keybind: view '%s' wasn't registered for this mod.",
|
||||||
transition_not_registered = "[Custom Views] Toggling view with keybind: transition '%s' wasn't registered for " ..
|
transition_not_registered = "[Custom Views] Toggling view with keybind: transition '%s' wasn't registered for " ..
|
||||||
"'%s' view."
|
"'%s' view."
|
||||||
|
@ -43,8 +41,7 @@ local ERRORS = {
|
||||||
PREFIX = {
|
PREFIX = {
|
||||||
view_initializing = "[Custom Views] Calling 'init_view_function'",
|
view_initializing = "[Custom Views] Calling 'init_view_function'",
|
||||||
view_destroying = "[Custom Views] Destroying view '%s'",
|
view_destroying = "[Custom Views] Destroying view '%s'",
|
||||||
register_view_open_file = "[Custom Views] (register_view) Opening view data file '%s'",
|
register_view_validation = "[Custom Views] (register_view) View data validating '%s'",
|
||||||
register_view_validating = "[Custom Views] (register_view) View data validating '%s'",
|
|
||||||
register_view_injection = "[Custom Views] (register_view) View injection '%s'",
|
register_view_injection = "[Custom Views] (register_view) View injection '%s'",
|
||||||
ingameui_hook_injection = "[Custom Views] View injection '%s'",
|
ingameui_hook_injection = "[Custom Views] View injection '%s'",
|
||||||
handle_transition_fade = "[Custom Views] (handle_transition) executing 'ingame_ui.transition_with_fade' for " ..
|
handle_transition_fade = "[Custom Views] (handle_transition) executing 'ingame_ui.transition_with_fade' for " ..
|
||||||
|
@ -81,21 +78,21 @@ local function inject_view(view_name)
|
||||||
|
|
||||||
-- Check for collisions.
|
-- Check for collisions.
|
||||||
if _ingame_ui.views[view_name] then
|
if _ingame_ui.views[view_name] then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["view_already_exists"], view_name)
|
vmf.throw_error(ERRORS.THROWABLE.view_already_exists, view_name)
|
||||||
end
|
end
|
||||||
for transition_name, _ in pairs(transitions) do
|
for transition_name, _ in pairs(transitions) do
|
||||||
if _ingame_ui_transitions[transition_name] then
|
if _ingame_ui_transitions[transition_name] then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["transition_already_exists"], transition_name)
|
vmf.throw_error(ERRORS.THROWABLE.transition_already_exists, transition_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Initialize and inject view.
|
-- Initialize and inject view.
|
||||||
local success, view = vmf.safe_call(mod, ERRORS.PREFIX["view_initializing"], init_view_function,
|
local success, view = vmf.safe_call(mod, ERRORS.PREFIX.view_initializing, init_view_function,
|
||||||
_ingame_ui.ingame_ui_context)
|
_ingame_ui.ingame_ui_context)
|
||||||
if success then
|
if success then
|
||||||
_ingame_ui.views[view_name] = view
|
_ingame_ui.views[view_name] = view
|
||||||
else
|
else
|
||||||
vmf.throw_error(ERRORS.THROWABLE["view_initializing_failed"], view_name)
|
vmf.throw_error(ERRORS.THROWABLE.view_initializing_failed)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Inject view transitions.
|
-- Inject view transitions.
|
||||||
|
@ -127,7 +124,7 @@ local function remove_injected_views(on_reload)
|
||||||
local view = _ingame_ui.views[view_name]
|
local view = _ingame_ui.views[view_name]
|
||||||
if view then
|
if view then
|
||||||
if type(view.destroy) == "function" then
|
if type(view.destroy) == "function" then
|
||||||
vmf.safe_call_nr(view_data.mod, {ERRORS.PREFIX["view_destroying"], view_name}, view.destroy, view)
|
vmf.safe_call_nr(view_data.mod, {ERRORS.PREFIX.view_destroying, view_name}, view.destroy, view)
|
||||||
end
|
end
|
||||||
_ingame_ui.views[view_name] = nil
|
_ingame_ui.views[view_name] = nil
|
||||||
end
|
end
|
||||||
|
@ -153,13 +150,13 @@ end
|
||||||
local function validate_view_data(view_data)
|
local function validate_view_data(view_data)
|
||||||
-- Basic checks.
|
-- Basic checks.
|
||||||
if type(view_data.view_name) ~= "string" then
|
if type(view_data.view_name) ~= "string" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["view_name_wrong_type"], type(view_data.view_name))
|
vmf.throw_error(ERRORS.THROWABLE.view_name_wrong_type, type(view_data.view_name))
|
||||||
end
|
end
|
||||||
if type(view_data.view_transitions) ~= "table" then
|
if type(view_data.view_transitions) ~= "table" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["view_transitions_wrong_type"], type(view_data.view_transitions))
|
vmf.throw_error(ERRORS.THROWABLE.view_transitions_wrong_type, type(view_data.view_transitions))
|
||||||
end
|
end
|
||||||
if type(view_data.view_settings) ~= "table" then
|
if type(view_data.view_settings) ~= "table" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["view_settings_wrong_type"], type(view_data.view_settings))
|
vmf.throw_error(ERRORS.THROWABLE.view_settings_wrong_type, type(view_data.view_settings))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- VIEW TRANSITIONS
|
-- VIEW TRANSITIONS
|
||||||
|
@ -167,13 +164,13 @@ local function validate_view_data(view_data)
|
||||||
local view_transitions = view_data.view_transitions
|
local view_transitions = view_data.view_transitions
|
||||||
for transition_name, transition_function in pairs(view_transitions) do
|
for transition_name, transition_function in pairs(view_transitions) do
|
||||||
if type(transition_function) ~= "function" then
|
if type(transition_function) ~= "function" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["transition_wrong_type"], transition_name, type(transition_function))
|
vmf.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(_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
|
||||||
vmf.throw_error(ERRORS.THROWABLE["transition_name_taken"], transition_name, another_view_data.mod:get_name(),
|
vmf.throw_error(ERRORS.THROWABLE.transition_name_taken, transition_name, another_view_data.mod:get_name(),
|
||||||
another_view_name)
|
another_view_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -188,46 +185,46 @@ local function validate_view_data(view_data)
|
||||||
|
|
||||||
-- Verify everything.
|
-- Verify everything.
|
||||||
if type(view_settings.init_view_function) ~= "function" then
|
if type(view_settings.init_view_function) ~= "function" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["init_view_function_wrong_type"], type(view_settings.init_view_function))
|
vmf.throw_error(ERRORS.THROWABLE.init_view_function_wrong_type, type(view_settings.init_view_function))
|
||||||
end
|
end
|
||||||
|
|
||||||
local active = view_settings.active
|
local active = view_settings.active
|
||||||
if type(active) ~= "table" then
|
if type(active) ~= "table" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["active_wrong_type"], type(active))
|
vmf.throw_error(ERRORS.THROWABLE.active_wrong_type, type(active))
|
||||||
end
|
end
|
||||||
if active.inn == nil or active.ingame == nil then
|
if active.inn == nil or active.ingame == nil then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["active_missing_element"])
|
vmf.throw_error(ERRORS.THROWABLE.active_missing_element)
|
||||||
end
|
end
|
||||||
for level_name, value in pairs(active) do
|
for level_name, value in pairs(active) do
|
||||||
if level_name ~= "inn" and level_name ~= "ingame" then
|
if level_name ~= "inn" and level_name ~= "ingame" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["active_element_wrong_name"], level_name)
|
vmf.throw_error(ERRORS.THROWABLE.active_element_wrong_name, level_name)
|
||||||
end
|
end
|
||||||
if type(value) ~= "boolean" then
|
if type(value) ~= "boolean" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["active_element_wrong_type"], level_name, type(value))
|
vmf.throw_error(ERRORS.THROWABLE.active_element_wrong_type, level_name, type(value))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local blocked_transitions = view_settings.blocked_transitions
|
local blocked_transitions = view_settings.blocked_transitions
|
||||||
if type(blocked_transitions) ~= "table" then
|
if type(blocked_transitions) ~= "table" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transitions_wrong_type"], type(blocked_transitions))
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transitions_wrong_type, type(blocked_transitions))
|
||||||
end
|
end
|
||||||
if not blocked_transitions.inn or not blocked_transitions.ingame then
|
if not blocked_transitions.inn or not blocked_transitions.ingame then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transitions_missing_element"])
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transitions_missing_element)
|
||||||
end
|
end
|
||||||
for level_name, level_blocked_transitions in pairs(blocked_transitions) do
|
for level_name, level_blocked_transitions in pairs(blocked_transitions) do
|
||||||
if level_name ~= "inn" and level_name ~= "ingame" then
|
if level_name ~= "inn" and level_name ~= "ingame" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transitions_element_wrong_name"], level_name)
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transitions_element_wrong_name, level_name)
|
||||||
end
|
end
|
||||||
if type(level_blocked_transitions) ~= "table" then
|
if type(level_blocked_transitions) ~= "table" then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transitions_element_wrong_type"], level_name,
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transitions_element_wrong_type, level_name,
|
||||||
type(level_blocked_transitions))
|
type(level_blocked_transitions))
|
||||||
end
|
end
|
||||||
for transition_name, value in pairs(level_blocked_transitions) do
|
for transition_name, value in pairs(level_blocked_transitions) do
|
||||||
if not view_transitions[transition_name] then
|
if not view_transitions[transition_name] then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transition_invalid"], transition_name, level_name)
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transition_invalid, transition_name, level_name)
|
||||||
end
|
end
|
||||||
if value ~= true then
|
if value ~= true then
|
||||||
vmf.throw_error(ERRORS.THROWABLE["blocked_transition_wrong_value"], level_name, transition_name)
|
vmf.throw_error(ERRORS.THROWABLE.blocked_transition_wrong_value, level_name, transition_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -268,11 +265,13 @@ function VMFMod:handle_transition(transition_name, ignore_active_menu, fade, tra
|
||||||
)
|
)
|
||||||
then
|
then
|
||||||
if fade then
|
if fade then
|
||||||
vmf.safe_call_nr(self, ERRORS.PREFIX["handle_transition_fade"], _ingame_ui.transition_with_fade, _ingame_ui,
|
vmf.safe_call_nr(self, {ERRORS.PREFIX.handle_transition_fade, transition_name}, _ingame_ui.transition_with_fade,
|
||||||
transition_name, transition_params)
|
_ingame_ui, transition_name,
|
||||||
|
transition_params)
|
||||||
else
|
else
|
||||||
vmf.safe_call_nr(self, ERRORS.PREFIX["handle_transition_no_fade"], _ingame_ui.handle_transition, _ingame_ui,
|
vmf.safe_call_nr(self, {ERRORS.PREFIX.handle_transition_no_fade, transition_name}, _ingame_ui.handle_transition,
|
||||||
transition_name, transition_params)
|
_ingame_ui, transition_name,
|
||||||
|
transition_params)
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -292,7 +291,7 @@ function VMFMod:register_view(view_data)
|
||||||
|
|
||||||
local view_name = view_data.view_name
|
local view_name = view_data.view_name
|
||||||
|
|
||||||
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX["register_view_validating"], view_name}, validate_view_data,
|
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX.register_view_validation, view_name}, validate_view_data,
|
||||||
view_data) then
|
view_data) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -304,7 +303,7 @@ function VMFMod:register_view(view_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _ingame_ui then
|
if _ingame_ui then
|
||||||
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX["register_view_injection"], view_name}, inject_view, view_name) then
|
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX.register_view_injection, view_name}, inject_view, view_name) then
|
||||||
_views_data[view_data.view_name] = nil
|
_views_data[view_data.view_name] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -319,7 +318,7 @@ end
|
||||||
vmf:hook_safe(IngameUI, "init", function(self)
|
vmf:hook_safe(IngameUI, "init", function(self)
|
||||||
_ingame_ui = self
|
_ingame_ui = self
|
||||||
for view_name, _ in pairs(_views_data) do
|
for view_name, _ in pairs(_views_data) do
|
||||||
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX["ingameui_hook_injection"], view_name}, inject_view, view_name) then
|
if not vmf.safe_call_nrc(self, {ERRORS.PREFIX.ingameui_hook_injection, view_name}, inject_view, view_name) then
|
||||||
_views_data[view_name] = nil
|
_views_data[view_name] = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -348,7 +347,7 @@ function vmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_be
|
||||||
if _ingame_ui then
|
if _ingame_ui then
|
||||||
local view_data = _views_data[view_name]
|
local view_data = _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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -360,8 +359,8 @@ function vmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_be
|
||||||
keybind_transition_data.transition_fade,
|
keybind_transition_data.transition_fade,
|
||||||
keybind_transition_data.close_view_transition_params)
|
keybind_transition_data.close_view_transition_params)
|
||||||
else
|
else
|
||||||
mod:error(ERRORS.REGULAR["transition_not_registered"], keybind_transition_data.close_view_transition_name,
|
mod:error(ERRORS.REGULAR.transition_not_registered, keybind_transition_data.close_view_transition_name,
|
||||||
view_name)
|
view_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Can open views only when keybind is pressed.
|
-- Can open views only when keybind is pressed.
|
||||||
|
@ -372,8 +371,8 @@ function vmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_be
|
||||||
keybind_transition_data.transition_fade,
|
keybind_transition_data.transition_fade,
|
||||||
keybind_transition_data.open_view_transition_params)
|
keybind_transition_data.open_view_transition_params)
|
||||||
else
|
else
|
||||||
mod:error(ERRORS.REGULAR["transition_not_registered"], keybind_transition_data.open_view_transition_name,
|
mod:error(ERRORS.REGULAR.transition_not_registered, keybind_transition_data.open_view_transition_name,
|
||||||
view_name)
|
view_name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue