Change way of defining transitions for view toggling
This commit is contained in:
parent
199236f3cc
commit
89a8146717
6 changed files with 84 additions and 65 deletions
|
@ -223,7 +223,7 @@ local function perform_keybind_action(data, is_pressed)
|
||||||
call_function(data.mod, data.function_name, is_pressed)
|
call_function(data.mod, data.function_name, is_pressed)
|
||||||
return true
|
return true
|
||||||
elseif data.type == "view_toggle" and data.mod:is_enabled() then
|
elseif data.type == "view_toggle" and data.mod:is_enabled() then
|
||||||
vmf.keybind_toggle_view(data.mod, data.view_name, can_perform_action, is_pressed)
|
vmf.keybind_toggle_view(data.mod, data.view_name, data.transition_data, can_perform_action, is_pressed)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -304,7 +304,8 @@ function vmf.generate_keybinds()
|
||||||
shift = modifier_keys["shift"],
|
shift = modifier_keys["shift"],
|
||||||
|
|
||||||
function_name = raw_keybind_data.function_name,
|
function_name = raw_keybind_data.function_name,
|
||||||
view_name = raw_keybind_data.view_name
|
view_name = raw_keybind_data.view_name,
|
||||||
|
transition_data = raw_keybind_data.transition_data
|
||||||
}
|
}
|
||||||
|
|
||||||
_keybinds[primary_key] = _keybinds[primary_key] or {
|
_keybinds[primary_key] = _keybinds[primary_key] or {
|
||||||
|
|
|
@ -324,11 +324,31 @@ local function validate_keybind_data(data)
|
||||||
vmf.throw_error("[widget \"%s\" (keybind)]: 'keybind_type' is set to \"function_call\" so 'function_name' " ..
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'keybind_type' is set to \"function_call\" so 'function_name' " ..
|
||||||
"field is required and must have 'string' type", data.setting_id)
|
"field is required and must have 'string' type", data.setting_id)
|
||||||
end
|
end
|
||||||
if keybind_type == "view_toggle" and type(data.view_name) ~= "string" then
|
if keybind_type == "view_toggle" then
|
||||||
|
if type(data.view_name) ~= "string" then
|
||||||
vmf.throw_error("[widget \"%s\" (keybind)]: 'keybind_type' is set to \"view_toggle\" so 'view_name' " ..
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'keybind_type' is set to \"view_toggle\" so 'view_name' " ..
|
||||||
"field is required and must have 'string' type", data.setting_id)
|
"field is required and must have 'string' type", data.setting_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local transition_data = data.transition_data
|
||||||
|
if type(transition_data) ~= "table" then
|
||||||
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'keybind_type' is set to \"view_toggle\" so 'transition_data' " ..
|
||||||
|
"field is required and must have 'table' type", data.setting_id)
|
||||||
|
end
|
||||||
|
if transition_data.open_view_transition_name and type(transition_data.open_view_transition_name) ~= "string" then
|
||||||
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'transition_data.open_view_transition_name' must have "..
|
||||||
|
"'string' type", data.setting_id)
|
||||||
|
end
|
||||||
|
if transition_data.close_view_transition_name and type(transition_data.close_view_transition_name) ~= "string" then
|
||||||
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'transition_data.close_view_transition_name' must have "..
|
||||||
|
"'string' type", data.setting_id)
|
||||||
|
end
|
||||||
|
if transition_data.transition_fade and type(transition_data.transition_fade) ~= "boolean" then
|
||||||
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'transition_data.transition_fade' must have "..
|
||||||
|
"'boolean' type", data.setting_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local default_value = data.default_value
|
local default_value = data.default_value
|
||||||
if type(default_value) ~= "table" then
|
if type(default_value) ~= "table" then
|
||||||
vmf.throw_error("[widget \"%s\" (keybind)]: 'default_value' field is required and must have 'table' type",
|
vmf.throw_error("[widget \"%s\" (keybind)]: 'default_value' field is required and must have 'table' type",
|
||||||
|
@ -368,6 +388,7 @@ local function initialize_keybind_data(mod, data, localize)
|
||||||
new_data.keybind_type = data.keybind_type
|
new_data.keybind_type = data.keybind_type
|
||||||
new_data.function_name = data.function_name -- required, if (keybind_type == "function_call")
|
new_data.function_name = data.function_name -- required, if (keybind_type == "function_call")
|
||||||
new_data.view_name = data.view_name -- required, if (keybind_type == "view_toggle")
|
new_data.view_name = data.view_name -- required, if (keybind_type == "view_toggle")
|
||||||
|
new_data.transition_data = data.transition_data -- required, if (keybind_type == "view_toggle")
|
||||||
|
|
||||||
validate_keybind_data(new_data)
|
validate_keybind_data(new_data)
|
||||||
|
|
||||||
|
@ -550,7 +571,8 @@ local function initialize_default_settings_and_keybinds(mod, initialized_widgets
|
||||||
type = data.keybind_type,
|
type = data.keybind_type,
|
||||||
keys = mod:get(data.setting_id),
|
keys = mod:get(data.setting_id),
|
||||||
function_name = data.function_name,
|
function_name = data.function_name,
|
||||||
view_name = data.view_name
|
view_name = data.view_name,
|
||||||
|
transition_data = data.transition_data
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,17 +31,14 @@ local ERRORS = {
|
||||||
blocked_transitions_element_wrong_type = "'view_settings.blocked_transitions.%s' must be a table, not %s.",
|
blocked_transitions_element_wrong_type = "'view_settings.blocked_transitions.%s' must be a table, not %s.",
|
||||||
blocked_transition_invalid = "you can't put transition '%s' into 'view_settings.blocked_transitions.%s', " ..
|
blocked_transition_invalid = "you can't put transition '%s' into 'view_settings.blocked_transitions.%s', " ..
|
||||||
"because it's not listed in 'view_transitions'.",
|
"because it's not listed in 'view_transitions'.",
|
||||||
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'."
|
||||||
keybind_transitions_wrong_type = "'view_settings.keybind_transitions' (optional) must be a table, not %s.",
|
|
||||||
open_view_transition_wrong_type = "'view_settings.keybind_transitions.open_view_transition' (optional) must be " ..
|
|
||||||
"a string, not %s.",
|
|
||||||
transition_fade_wrong_type = "'view_settings.keybind_transitions.transition_fade' (optional) must be a boolean, " ..
|
|
||||||
"not %s.",
|
|
||||||
},
|
},
|
||||||
REGULAR = {
|
REGULAR = {
|
||||||
view_data_wrong_type = "[Custom Views] (register_view) Loading view data file '%s': returned view data must be " ..
|
view_data_wrong_type = "[Custom Views] (register_view) Loading view data file '%s': returned view data must be " ..
|
||||||
"a table, not %s.",
|
"a table, not %s.",
|
||||||
view_not_registered = "[Custom Views] Opening 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 " ..
|
||||||
|
"'%s' view."
|
||||||
},
|
},
|
||||||
PREFIX = {
|
PREFIX = {
|
||||||
view_initializing = "[Custom Views] Calling 'init_view_function'",
|
view_initializing = "[Custom Views] Calling 'init_view_function'",
|
||||||
|
@ -184,7 +181,6 @@ local function validate_view_data(view_data)
|
||||||
|
|
||||||
-- Use default values for optional fields if they are not defined.
|
-- Use default values for optional fields if they are not defined.
|
||||||
view_settings.blocked_transitions = view_settings.blocked_transitions or {inn = {}, ingame = {}}
|
view_settings.blocked_transitions = view_settings.blocked_transitions or {inn = {}, ingame = {}}
|
||||||
view_settings.keybind_transitions = view_settings.keybind_transitions or {}
|
|
||||||
|
|
||||||
-- Verify everything.
|
-- Verify everything.
|
||||||
if type(view_settings.init_view_function) ~= "function" then
|
if type(view_settings.init_view_function) ~= "function" then
|
||||||
|
@ -231,21 +227,6 @@ local function validate_view_data(view_data)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local keybind_transitions = view_settings.keybind_transitions
|
|
||||||
if type(keybind_transitions) ~= "table" then
|
|
||||||
vmf.throw_error(ERRORS.THROWABLE["keybind_transitions_wrong_type"], type(keybind_transitions))
|
|
||||||
end
|
|
||||||
if keybind_transitions.open_view_transition and type(keybind_transitions.open_view_transition) ~= "string" then
|
|
||||||
vmf.throw_error(ERRORS.THROWABLE["open_view_transition_wrong_type"], type(keybind_transitions.open_view_transition))
|
|
||||||
end
|
|
||||||
if keybind_transitions.close_view_transition and type(keybind_transitions.close_view_transition) ~= "string" then
|
|
||||||
vmf.throw_error(ERRORS.THROWABLE["close_view_transition_wrong_type"],
|
|
||||||
type(keybind_transitions.close_view_transition))
|
|
||||||
end
|
|
||||||
if keybind_transitions.transition_fade and type(keybind_transitions.transition_fade) ~= "boolean" then
|
|
||||||
vmf.throw_error(ERRORS.THROWABLE["transition_fade_wrong_type"], type(keybind_transitions.transition_fade))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- #####################################################################################################################
|
-- #####################################################################################################################
|
||||||
|
@ -359,27 +340,37 @@ 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 vmf.keybind_toggle_view(mod, view_name, can_be_opened, is_keybind_pressed)
|
function vmf.keybind_toggle_view(mod, view_name, keybind_transition_data, can_be_opened, is_keybind_pressed)
|
||||||
if _ingame_ui then
|
if _ingame_ui then
|
||||||
if not _views_data[view_name] or (_views_data[view_name].mod ~= mod) 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)
|
mod:error(ERRORS.REGULAR["view_not_registered"], view_name)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if is_view_active_for_current_level(view_name) then
|
if is_view_active_for_current_level(view_name) then
|
||||||
local keybind_transitions = _views_data[view_name].view_settings.keybind_transitions
|
|
||||||
if _ingame_ui.current_view == view_name then
|
if _ingame_ui.current_view == view_name then
|
||||||
if keybind_transitions.close_view_transition then
|
if keybind_transition_data.close_view_transition_name then
|
||||||
mod:handle_transition(keybind_transitions.close_view_transition, true,
|
if view_data.view_transitions[keybind_transition_data.close_view_transition_name] then
|
||||||
keybind_transitions.transition_fade,
|
mod:handle_transition(keybind_transition_data.close_view_transition_name, true,
|
||||||
keybind_transitions.close_view_transition_params)
|
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
|
end
|
||||||
-- Can open views only when keybind is pressed.
|
-- Can open views only when keybind is pressed.
|
||||||
elseif can_be_opened and is_keybind_pressed then
|
elseif can_be_opened and is_keybind_pressed then
|
||||||
if keybind_transitions.open_view_transition then
|
if keybind_transition_data.open_view_transition_name then
|
||||||
mod:handle_transition(keybind_transitions.open_view_transition, true,
|
if view_data.view_transitions[keybind_transition_data.open_view_transition_name] then
|
||||||
keybind_transitions.transition_fade,
|
mod:handle_transition(keybind_transition_data.open_view_transition_name, true,
|
||||||
keybind_transitions.open_view_transition_params)
|
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
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,7 +9,7 @@ if VT1 then
|
||||||
-- Disable Mod Options button during mods reloading
|
-- Disable Mod Options button during mods reloading
|
||||||
vmf:hook_safe(IngameView, "update_menu_options", function (self)
|
vmf:hook_safe(IngameView, "update_menu_options", function (self)
|
||||||
for _, button_info in ipairs(self.active_button_data) do
|
for _, button_info in ipairs(self.active_button_data) do
|
||||||
if button_info.transition == "vmf_options_view" then
|
if button_info.transition == "vmf_options_view_open" then
|
||||||
button_info.widget.content.disabled = _button_injection_data.mod_options_button_disabled
|
button_info.widget.content.disabled = _button_injection_data.mod_options_button_disabled
|
||||||
button_info.widget.content.button_hotspot.disabled = _button_injection_data.mod_options_button_disabled
|
button_info.widget.content.button_hotspot.disabled = _button_injection_data.mod_options_button_disabled
|
||||||
end
|
end
|
||||||
|
@ -22,11 +22,11 @@ if VT1 then
|
||||||
vmf:hook(IngameView, "setup_button_layout", function (func, self, layout_data, ...)
|
vmf:hook(IngameView, "setup_button_layout", function (func, self, layout_data, ...)
|
||||||
local mods_options_button = {
|
local mods_options_button = {
|
||||||
display_name = vmf:localize("mods_options"),
|
display_name = vmf:localize("mods_options"),
|
||||||
transition = "vmf_options_view",
|
transition = "vmf_options_view_open",
|
||||||
fade = false
|
fade = false
|
||||||
}
|
}
|
||||||
for i = 1, #layout_data do
|
for i = 1, #layout_data do
|
||||||
if layout_data[i].transition == "options_menu" and layout_data[i + 1].transition ~= "vmf_options_view" then
|
if layout_data[i].transition == "options_menu" and layout_data[i + 1].transition ~= "vmf_options_view_open" then
|
||||||
table.insert(layout_data, i + 1, mods_options_button)
|
table.insert(layout_data, i + 1, mods_options_button)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
@ -35,7 +35,7 @@ if VT1 then
|
||||||
func(self, layout_data, ...)
|
func(self, layout_data, ...)
|
||||||
|
|
||||||
for _, button_info in ipairs(self.active_button_data) do
|
for _, button_info in ipairs(self.active_button_data) do
|
||||||
if button_info.transition == "vmf_options_view" then
|
if button_info.transition == "vmf_options_view_open" then
|
||||||
button_info.widget.style.text.localize = false
|
button_info.widget.style.text.localize = false
|
||||||
button_info.widget.style.text_disabled.localize = false
|
button_info.widget.style.text_disabled.localize = false
|
||||||
button_info.widget.style.text_click.localize = false
|
button_info.widget.style.text_click.localize = false
|
||||||
|
@ -51,7 +51,7 @@ else
|
||||||
|
|
||||||
local function get_mod_options_button_index(layout_logic)
|
local function get_mod_options_button_index(layout_logic)
|
||||||
for button_index, button_data in ipairs(layout_logic.active_button_data) do
|
for button_index, button_data in ipairs(layout_logic.active_button_data) do
|
||||||
if button_data.transition == "vmf_options_view" then
|
if button_data.transition == "vmf_options_view_open" then
|
||||||
return button_index
|
return button_index
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -98,12 +98,12 @@ else
|
||||||
vmf:hook_safe(IngameViewLayoutLogic, "init", function (self)
|
vmf:hook_safe(IngameViewLayoutLogic, "init", function (self)
|
||||||
local mod_options_button = {
|
local mod_options_button = {
|
||||||
display_name = vmf:localize("mods_options"),
|
display_name = vmf:localize("mods_options"),
|
||||||
transition = "vmf_options_view",
|
transition = "vmf_options_view_open",
|
||||||
fade = false
|
fade = false
|
||||||
}
|
}
|
||||||
for _, layout in pairs(self.layout_list) do
|
for _, layout in pairs(self.layout_list) do
|
||||||
for i = 1, #layout do
|
for i = 1, #layout do
|
||||||
if layout[i].transition == "options_menu" and layout[i + 1].transition ~= "vmf_options_view" then
|
if layout[i].transition == "options_menu" and layout[i + 1].transition ~= "vmf_options_view_open" then
|
||||||
table.insert(layout, i + 1, mod_options_button)
|
table.insert(layout, i + 1, mod_options_button)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
|
|
@ -2654,6 +2654,7 @@ local function create_keybind_widget(widget_definition, scenegraph_id)
|
||||||
keybind_type = widget_definition.keybind_type,
|
keybind_type = widget_definition.keybind_type,
|
||||||
function_name = widget_definition.function_name,
|
function_name = widget_definition.function_name,
|
||||||
view_name = widget_definition.view_name,
|
view_name = widget_definition.view_name,
|
||||||
|
transition_data = widget_definition.transition_data,
|
||||||
|
|
||||||
keybind_text = widget_definition.keybind_text,
|
keybind_text = widget_definition.keybind_text,
|
||||||
default_value = widget_definition.default_value,
|
default_value = widget_definition.default_value,
|
||||||
|
@ -3312,7 +3313,8 @@ local function set_new_keybind(keybind_widget_content)
|
||||||
type = keybind_widget_content.keybind_type,
|
type = keybind_widget_content.keybind_type,
|
||||||
keys = keybind_widget_content.keys,
|
keys = keybind_widget_content.keys,
|
||||||
function_name = keybind_widget_content.function_name,
|
function_name = keybind_widget_content.function_name,
|
||||||
view_name = keybind_widget_content.view_name
|
view_name = keybind_widget_content.view_name,
|
||||||
|
transition_data = keybind_widget_content.transition_data
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
@ -4284,16 +4286,15 @@ vmf:register_view({
|
||||||
active = {
|
active = {
|
||||||
inn = true,
|
inn = true,
|
||||||
ingame = true
|
ingame = true
|
||||||
},
|
|
||||||
keybind_transitions = {
|
|
||||||
open_view_transition = "vmf_options_view",
|
|
||||||
close_view_transition = "exit_menu",
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
view_transitions = {
|
view_transitions = {
|
||||||
vmf_options_view = function (self)
|
vmf_options_view_open = function (self)
|
||||||
self.current_view = "vmf_options_view"
|
self.current_view = "vmf_options_view"
|
||||||
self.menu_active = true
|
self.menu_active = true
|
||||||
|
end,
|
||||||
|
vmf_options_view_close = function (self)
|
||||||
|
require("scripts/ui/views/ingame_ui_settings").transitions.exit_menu(self)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -10,7 +10,11 @@ vmf_mod_data.options = {
|
||||||
default_value = {"f4"},
|
default_value = {"f4"},
|
||||||
keybind_trigger = "pressed",
|
keybind_trigger = "pressed",
|
||||||
keybind_type = "view_toggle",
|
keybind_type = "view_toggle",
|
||||||
view_name = "vmf_options_view"
|
view_name = "vmf_options_view",
|
||||||
|
transition_data = {
|
||||||
|
open_view_transition_name = "vmf_options_view_open",
|
||||||
|
close_view_transition_name = "vmf_options_view_close"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
setting_id = "vmf_options_scrolling_speed",
|
setting_id = "vmf_options_scrolling_speed",
|
||||||
|
|
Loading…
Add table
Reference in a new issue