[Options] Move legacy code to separate file
This commit is contained in:
parent
a0f61e9295
commit
adf3b56e31
5 changed files with 186 additions and 195 deletions
3
vmf/scripts/mods/vmf/modules/core/options.lua
Normal file
3
vmf/scripts/mods/vmf/modules/core/options.lua
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
local vmf = get_mod("VMF")
|
||||||
|
|
||||||
|
vmf.options_widgets_definition = {}
|
175
vmf/scripts/mods/vmf/modules/legacy/options.lua
Normal file
175
vmf/scripts/mods/vmf/modules/legacy/options.lua
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
local vmf = get_mod("VMF")
|
||||||
|
|
||||||
|
|
||||||
|
-- @TODO: Copypasted it from vmf_options_view for now. Decide what to do with this
|
||||||
|
local function build_keybind_string(keys)
|
||||||
|
local keybind_string = ""
|
||||||
|
for i, key in ipairs(keys) do
|
||||||
|
if i == 1 then
|
||||||
|
keybind_string = keybind_string .. vmf.readable_key_names[key]
|
||||||
|
else
|
||||||
|
keybind_string = keybind_string .. " + " .. vmf.readable_key_names[key]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return keybind_string
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- ####################################################################################################################
|
||||||
|
-- ##### VMFMod #######################################################################################################
|
||||||
|
-- ####################################################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
vmf.initialize_options_legacy = function (mod, widgets_definition)
|
||||||
|
|
||||||
|
local mod_settings_list_widgets_definitions = {}
|
||||||
|
|
||||||
|
local new_widget_definition
|
||||||
|
local new_widget_index
|
||||||
|
|
||||||
|
local options_menu_favorite_mods = vmf:get("options_menu_favorite_mods")
|
||||||
|
local options_menu_collapsed_widgets = vmf:get("options_menu_collapsed_widgets")
|
||||||
|
local mod_collapsed_widgets = nil
|
||||||
|
if options_menu_collapsed_widgets then
|
||||||
|
mod_collapsed_widgets = options_menu_collapsed_widgets[mod:get_name()]
|
||||||
|
end
|
||||||
|
|
||||||
|
-- defining header widget
|
||||||
|
|
||||||
|
new_widget_index = 1
|
||||||
|
|
||||||
|
new_widget_definition = {}
|
||||||
|
|
||||||
|
new_widget_definition.widget_type = "header"
|
||||||
|
new_widget_definition.widget_index = new_widget_index
|
||||||
|
new_widget_definition.mod_name = mod:get_name()
|
||||||
|
new_widget_definition.readable_mod_name = mod:get_readable_name()
|
||||||
|
new_widget_definition.tooltip = mod:get_description()
|
||||||
|
new_widget_definition.default = true
|
||||||
|
new_widget_definition.is_mod_toggable = mod:get_internal_data("is_togglable") and
|
||||||
|
not mod:get_internal_data("is_mutator")
|
||||||
|
|
||||||
|
if mod_collapsed_widgets then
|
||||||
|
new_widget_definition.is_widget_collapsed = mod_collapsed_widgets[mod:get_name()]
|
||||||
|
end
|
||||||
|
|
||||||
|
if options_menu_favorite_mods then
|
||||||
|
for _, current_mod_name in pairs(options_menu_favorite_mods) do
|
||||||
|
if current_mod_name == mod:get_name() then
|
||||||
|
new_widget_definition.is_favorited = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(mod_settings_list_widgets_definitions, new_widget_definition)
|
||||||
|
|
||||||
|
-- defining its subwidgets
|
||||||
|
|
||||||
|
if widgets_definition then
|
||||||
|
|
||||||
|
local level = 1
|
||||||
|
local parent_number = new_widget_index
|
||||||
|
local parent_widget = {["widget_type"] = "header", ["sub_widgets"] = widgets_definition}
|
||||||
|
local current_widget = widgets_definition[1]
|
||||||
|
local current_widget_index = 1
|
||||||
|
|
||||||
|
local parent_number_stack = {}
|
||||||
|
local parent_widget_stack = {}
|
||||||
|
local current_widget_index_stack = {}
|
||||||
|
|
||||||
|
while new_widget_index <= 256 do
|
||||||
|
|
||||||
|
-- if 'nil', we reached the end of the current level widgets list and need to go up
|
||||||
|
if current_widget then
|
||||||
|
|
||||||
|
new_widget_index = new_widget_index + 1
|
||||||
|
|
||||||
|
new_widget_definition = {}
|
||||||
|
|
||||||
|
new_widget_definition.widget_type = current_widget.widget_type -- all
|
||||||
|
new_widget_definition.widget_index = new_widget_index -- all [gen]
|
||||||
|
new_widget_definition.widget_level = level -- all [gen]
|
||||||
|
new_widget_definition.mod_name = mod:get_name() -- all [gen]
|
||||||
|
new_widget_definition.setting_name = current_widget.setting_name -- all
|
||||||
|
new_widget_definition.text = current_widget.text -- all
|
||||||
|
new_widget_definition.tooltip = current_widget.tooltip and (current_widget.text .. "\n" ..
|
||||||
|
current_widget.tooltip) -- all [optional]
|
||||||
|
new_widget_definition.unit_text = current_widget.unit_text -- numeric [optional]
|
||||||
|
new_widget_definition.range = current_widget.range -- numeric
|
||||||
|
new_widget_definition.decimals_number = current_widget.decimals_number -- numeric [optional]
|
||||||
|
new_widget_definition.options = current_widget.options -- dropdown
|
||||||
|
new_widget_definition.default_value = current_widget.default_value -- all
|
||||||
|
new_widget_definition.action = current_widget.action -- keybind [optional?]
|
||||||
|
new_widget_definition.show_widget_condition = current_widget.show_widget_condition -- all
|
||||||
|
new_widget_definition.parent_widget_number = parent_number -- all [gen]
|
||||||
|
|
||||||
|
if mod_collapsed_widgets then
|
||||||
|
new_widget_definition.is_widget_collapsed = mod_collapsed_widgets[current_widget.setting_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
if type(mod:get(current_widget.setting_name)) == "nil" then
|
||||||
|
mod:set(current_widget.setting_name, current_widget.default_value)
|
||||||
|
end
|
||||||
|
|
||||||
|
if current_widget.widget_type == "keybind" then
|
||||||
|
local keybind = mod:get(current_widget.setting_name)
|
||||||
|
new_widget_definition.keybind_text = build_keybind_string(keybind)
|
||||||
|
if current_widget.action then
|
||||||
|
mod:keybind(current_widget.setting_name, current_widget.action, keybind)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(mod_settings_list_widgets_definitions, new_widget_definition)
|
||||||
|
end
|
||||||
|
|
||||||
|
if current_widget and (
|
||||||
|
current_widget.widget_type == "header" or
|
||||||
|
current_widget.widget_type == "group" or
|
||||||
|
current_widget.widget_type == "checkbox" or
|
||||||
|
current_widget.widget_type == "dropdown"
|
||||||
|
) and current_widget.sub_widgets then
|
||||||
|
|
||||||
|
-- going down to the first subwidget
|
||||||
|
|
||||||
|
level = level + 1
|
||||||
|
|
||||||
|
table.insert(parent_number_stack, parent_number)
|
||||||
|
parent_number = new_widget_index
|
||||||
|
|
||||||
|
table.insert(parent_widget_stack, parent_widget)
|
||||||
|
parent_widget = current_widget
|
||||||
|
|
||||||
|
table.insert(current_widget_index_stack, current_widget_index)
|
||||||
|
current_widget_index = 1
|
||||||
|
current_widget = current_widget.sub_widgets[1]
|
||||||
|
|
||||||
|
else
|
||||||
|
current_widget_index = current_widget_index + 1
|
||||||
|
if parent_widget.sub_widgets[current_widget_index] then
|
||||||
|
-- going to the next widget
|
||||||
|
current_widget = parent_widget.sub_widgets[current_widget_index]
|
||||||
|
else
|
||||||
|
|
||||||
|
-- going up to the widget next to the parent one
|
||||||
|
level = level - 1
|
||||||
|
parent_number = table.remove(parent_number_stack)
|
||||||
|
parent_widget = table.remove(parent_widget_stack)
|
||||||
|
current_widget_index = table.remove(current_widget_index_stack)
|
||||||
|
if not current_widget_index then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
current_widget_index = current_widget_index + 1
|
||||||
|
-- widget next to parent one, or 'nil', if there are no more widgets on this level
|
||||||
|
current_widget = parent_widget.sub_widgets[current_widget_index]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if new_widget_index == 257 then
|
||||||
|
mod:error("(vmf_options_view) The limit of 256 options widgets was reached. You can't add any more widgets.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(vmf.options_widgets_definition, mod_settings_list_widgets_definitions)
|
||||||
|
end
|
|
@ -2754,8 +2754,6 @@ end
|
||||||
--╚██████╗███████╗██║ ██║███████║███████║
|
--╚██████╗███████╗██║ ██║███████║███████║
|
||||||
-- ╚═════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝
|
-- ╚═════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝
|
||||||
|
|
||||||
local SETTINGS_LIST_WIDGETS_DEFINITIONS = {} -- numerical sorting [ipairs]
|
|
||||||
|
|
||||||
local _DEFAULT_SCROLL_STEP = 40
|
local _DEFAULT_SCROLL_STEP = 40
|
||||||
local _SCROLL_STEP
|
local _SCROLL_STEP
|
||||||
|
|
||||||
|
@ -2785,7 +2783,7 @@ VMFOptionsView.init = function (self, ingame_ui_context)
|
||||||
self.definitions.scenegraph = scenegraph_definition
|
self.definitions.scenegraph = scenegraph_definition
|
||||||
self.definitions.scenegraph_2nd_layer = {}
|
self.definitions.scenegraph_2nd_layer = {}
|
||||||
self.definitions.menu_widgets = menu_widgets_definition
|
self.definitions.menu_widgets = menu_widgets_definition
|
||||||
self.definitions.settings_list_widgets = SETTINGS_LIST_WIDGETS_DEFINITIONS
|
self.definitions.settings_list_widgets = vmf.options_widgets_definition
|
||||||
|
|
||||||
-- get necessary things for the rendering
|
-- get necessary things for the rendering
|
||||||
self.ui_renderer = ingame_ui_context.ui_renderer
|
self.ui_renderer = ingame_ui_context.ui_renderer
|
||||||
|
@ -4269,196 +4267,6 @@ end
|
||||||
|
|
||||||
vmf.load_vmf_options_view_settings()
|
vmf.load_vmf_options_view_settings()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- ####################################################################################################################
|
|
||||||
-- ##### VMFMod #######################################################################################################
|
|
||||||
-- ####################################################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
vmf.create_options = function (mod, widgets_definition)
|
|
||||||
|
|
||||||
local mod_settings_list_widgets_definitions = {}
|
|
||||||
|
|
||||||
local new_widget_definition
|
|
||||||
local new_widget_index
|
|
||||||
|
|
||||||
local options_menu_favorite_mods = vmf:get("options_menu_favorite_mods")
|
|
||||||
local options_menu_collapsed_widgets = vmf:get("options_menu_collapsed_widgets")
|
|
||||||
local mod_collapsed_widgets = nil
|
|
||||||
if options_menu_collapsed_widgets then
|
|
||||||
mod_collapsed_widgets = options_menu_collapsed_widgets[mod:get_name()]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- defining header widget
|
|
||||||
|
|
||||||
new_widget_index = 1
|
|
||||||
|
|
||||||
new_widget_definition = {}
|
|
||||||
|
|
||||||
new_widget_definition.widget_type = "header"
|
|
||||||
new_widget_definition.widget_index = new_widget_index
|
|
||||||
new_widget_definition.mod_name = mod:get_name()
|
|
||||||
new_widget_definition.readable_mod_name = mod:get_readable_name()
|
|
||||||
new_widget_definition.tooltip = mod:get_description()
|
|
||||||
new_widget_definition.default = true
|
|
||||||
new_widget_definition.is_mod_toggable = mod:get_internal_data("is_togglable") and not mod:get_internal_data("is_mutator")
|
|
||||||
|
|
||||||
if mod_collapsed_widgets then
|
|
||||||
new_widget_definition.is_widget_collapsed = mod_collapsed_widgets[mod:get_name()]
|
|
||||||
end
|
|
||||||
|
|
||||||
if options_menu_favorite_mods then
|
|
||||||
for _, current_mod_name in pairs(options_menu_favorite_mods) do
|
|
||||||
if current_mod_name == mod:get_name() then
|
|
||||||
new_widget_definition.is_favorited = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(mod_settings_list_widgets_definitions, new_widget_definition)
|
|
||||||
|
|
||||||
-- defining its subwidgets
|
|
||||||
|
|
||||||
if widgets_definition then
|
|
||||||
|
|
||||||
local level = 1
|
|
||||||
local parent_number = new_widget_index
|
|
||||||
local parent_widget = {["widget_type"] = "header", ["sub_widgets"] = widgets_definition}
|
|
||||||
local current_widget = widgets_definition[1]
|
|
||||||
local current_widget_index = 1
|
|
||||||
|
|
||||||
local parent_number_stack = {}
|
|
||||||
local parent_widget_stack = {}
|
|
||||||
local current_widget_index_stack = {}
|
|
||||||
|
|
||||||
while new_widget_index <= 256 do
|
|
||||||
|
|
||||||
-- if 'nil', we reached the end of the current level widgets list and need to go up
|
|
||||||
if current_widget then
|
|
||||||
|
|
||||||
new_widget_index = new_widget_index + 1
|
|
||||||
|
|
||||||
new_widget_definition = {}
|
|
||||||
|
|
||||||
new_widget_definition.widget_type = current_widget.widget_type -- all
|
|
||||||
new_widget_definition.widget_index = new_widget_index -- all [gen]
|
|
||||||
new_widget_definition.widget_level = level -- all [gen]
|
|
||||||
new_widget_definition.mod_name = mod:get_name() -- all [gen]
|
|
||||||
new_widget_definition.setting_name = current_widget.setting_name -- all
|
|
||||||
new_widget_definition.text = current_widget.text -- all
|
|
||||||
new_widget_definition.tooltip = current_widget.tooltip and (current_widget.text .. "\n" ..
|
|
||||||
current_widget.tooltip) -- all [optional]
|
|
||||||
new_widget_definition.unit_text = current_widget.unit_text -- numeric [optional]
|
|
||||||
new_widget_definition.range = current_widget.range -- numeric
|
|
||||||
new_widget_definition.decimals_number = current_widget.decimals_number -- numeric [optional]
|
|
||||||
new_widget_definition.options = current_widget.options -- dropdown
|
|
||||||
new_widget_definition.default_value = current_widget.default_value -- all
|
|
||||||
new_widget_definition.action = current_widget.action -- keybind [optional?]
|
|
||||||
new_widget_definition.show_widget_condition = current_widget.show_widget_condition -- all
|
|
||||||
new_widget_definition.parent_widget_number = parent_number -- all [gen]
|
|
||||||
|
|
||||||
if mod_collapsed_widgets then
|
|
||||||
new_widget_definition.is_widget_collapsed = mod_collapsed_widgets[current_widget.setting_name]
|
|
||||||
end
|
|
||||||
|
|
||||||
if type(mod:get(current_widget.setting_name)) == "nil" then
|
|
||||||
mod:set(current_widget.setting_name, current_widget.default_value)
|
|
||||||
end
|
|
||||||
|
|
||||||
if current_widget.widget_type == "keybind" then
|
|
||||||
local keybind = mod:get(current_widget.setting_name)
|
|
||||||
new_widget_definition.keybind_text = build_keybind_string(keybind)
|
|
||||||
if current_widget.action then
|
|
||||||
mod:keybind(current_widget.setting_name, current_widget.action, keybind)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(mod_settings_list_widgets_definitions, new_widget_definition)
|
|
||||||
end
|
|
||||||
|
|
||||||
if current_widget and (
|
|
||||||
current_widget.widget_type == "header" or
|
|
||||||
current_widget.widget_type == "group" or
|
|
||||||
current_widget.widget_type == "checkbox" or
|
|
||||||
current_widget.widget_type == "dropdown"
|
|
||||||
) and current_widget.sub_widgets then
|
|
||||||
|
|
||||||
-- going down to the first subwidget
|
|
||||||
|
|
||||||
level = level + 1
|
|
||||||
|
|
||||||
table.insert(parent_number_stack, parent_number)
|
|
||||||
parent_number = new_widget_index
|
|
||||||
|
|
||||||
table.insert(parent_widget_stack, parent_widget)
|
|
||||||
parent_widget = current_widget
|
|
||||||
|
|
||||||
table.insert(current_widget_index_stack, current_widget_index)
|
|
||||||
current_widget_index = 1
|
|
||||||
current_widget = current_widget.sub_widgets[1]
|
|
||||||
|
|
||||||
else
|
|
||||||
current_widget_index = current_widget_index + 1
|
|
||||||
|
|
||||||
if parent_widget.sub_widgets[current_widget_index] then
|
|
||||||
-- going to the next widget
|
|
||||||
current_widget = parent_widget.sub_widgets[current_widget_index]
|
|
||||||
else
|
|
||||||
|
|
||||||
-- going up to the widget next to the parent one
|
|
||||||
|
|
||||||
level = level - 1
|
|
||||||
|
|
||||||
parent_number = table.remove(parent_number_stack)
|
|
||||||
|
|
||||||
parent_widget = table.remove(parent_widget_stack)
|
|
||||||
|
|
||||||
current_widget_index = table.remove(current_widget_index_stack)
|
|
||||||
|
|
||||||
if not current_widget_index then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
|
|
||||||
current_widget_index = current_widget_index + 1
|
|
||||||
|
|
||||||
-- widget next to parent one, or 'nil', if there are no more widgets on this level
|
|
||||||
current_widget = parent_widget.sub_widgets[current_widget_index]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if new_widget_index == 257 then
|
|
||||||
mod:error("(vmf_options_view) The limit of 256 options widgets was reached. You can't add any more widgets.")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
table.insert(SETTINGS_LIST_WIDGETS_DEFINITIONS, mod_settings_list_widgets_definitions)
|
|
||||||
end
|
|
||||||
|
|
||||||
if type(vmf:get("options_menu_favorite_mods")) ~= "table" then
|
if type(vmf:get("options_menu_favorite_mods")) ~= "table" then
|
||||||
vmf:set("options_menu_favorite_mods", {})
|
vmf:set("options_menu_favorite_mods", {})
|
||||||
end
|
end
|
||||||
|
|
|
@ -120,8 +120,11 @@ function vmf.initialize_mod_data(mod, mod_data)
|
||||||
vmf.register_mod_as_mutator(mod, mod_data.mutator_settings)
|
vmf.register_mod_as_mutator(mod, mod_data.mutator_settings)
|
||||||
end
|
end
|
||||||
|
|
||||||
if mod_data.options_widgets or (mod_data.is_togglable and not mod_data.is_mutator) then
|
if mod_data.options then
|
||||||
vmf.create_options(mod, mod_data.options_widgets)
|
vmf.initialize_options(mod, mod_data.options_widgets)
|
||||||
|
-- @TODO: move the 2nd block to the upper statement
|
||||||
|
elseif mod_data.options_widgets or (mod_data.is_togglable and not mod_data.is_mutator) then
|
||||||
|
vmf.initialize_options_legacy(mod, mod_data.options_widgets)
|
||||||
end
|
end
|
||||||
|
|
||||||
if type(mod_data.custom_gui_textures) == "table" then
|
if type(mod_data.custom_gui_textures) == "table" then
|
||||||
|
|
|
@ -26,6 +26,8 @@ function vmf_mod_object:init()
|
||||||
dofile("scripts/mods/vmf/modules/core/keybindings")
|
dofile("scripts/mods/vmf/modules/core/keybindings")
|
||||||
dofile("scripts/mods/vmf/modules/core/chat")
|
dofile("scripts/mods/vmf/modules/core/chat")
|
||||||
dofile("scripts/mods/vmf/modules/core/localization")
|
dofile("scripts/mods/vmf/modules/core/localization")
|
||||||
|
dofile("scripts/mods/vmf/modules/core/options")
|
||||||
|
dofile("scripts/mods/vmf/modules/legacy/options")
|
||||||
dofile("scripts/mods/vmf/modules/core/network")
|
dofile("scripts/mods/vmf/modules/core/network")
|
||||||
dofile("scripts/mods/vmf/modules/core/commands")
|
dofile("scripts/mods/vmf/modules/core/commands")
|
||||||
dofile("scripts/mods/vmf/modules/gui/custom_textures")
|
dofile("scripts/mods/vmf/modules/gui/custom_textures")
|
||||||
|
|
Loading…
Add table
Reference in a new issue