diff --git a/include/zelda_render.h b/include/zelda_render.h index 15397f9..f23013f 100644 --- a/include/zelda_render.h +++ b/include/zelda_render.h @@ -54,7 +54,7 @@ namespace zelda64 { // Texture pack enable option. Must be an enum with two options. // The first option is treated as disabled and the second option is treated as enabled. - bool is_texture_pack_enable_config_option(const recomp::mods::ConfigOption& option, bool show_errors); + bool is_texture_pack_enable_config_option(const recomp::config::ConfigOption& option, bool show_errors); } } diff --git a/lib/N64ModernRuntime b/lib/N64ModernRuntime index df7e820..f295f49 160000 --- a/lib/N64ModernRuntime +++ b/lib/N64ModernRuntime @@ -1 +1 @@ -Subproject commit df7e820d8c55e4fcb4616c210cbb2c01b25cd48c +Subproject commit f295f49ae3daebef9c91c8e7e62c84f3912e2e1c diff --git a/src/main/rt64_render_context.cpp b/src/main/rt64_render_context.cpp index 2eff6f8..416f55f 100644 --- a/src/main/rt64_render_context.cpp +++ b/src/main/rt64_render_context.cpp @@ -467,13 +467,13 @@ void zelda64::renderer::enable_texture_pack(const recomp::mods::ModContext& cont texture_pack_action_queue.enqueue(TexturePackEnableAction{mod.manifest.mod_id}); // Check for the texture pack enabled config option. - const recomp::mods::ConfigSchema& config_schema = context.get_mod_config_schema(mod.manifest.mod_id); + const recomp::config::ConfigSchema& config_schema = context.get_mod_config_schema(mod.manifest.mod_id); auto find_it = config_schema.options_by_id.find(zelda64::renderer::special_option_texture_pack_enabled); if (find_it != config_schema.options_by_id.end()) { - const recomp::mods::ConfigOption& config_option = config_schema.options[find_it->second]; + const recomp::config::ConfigOption& config_option = config_schema.options[find_it->second]; if (is_texture_pack_enable_config_option(config_option, false)) { - recomp::mods::ConfigValueVariant value_variant = context.get_mod_config_value(mod.manifest.mod_id, config_option.id); + recomp::config::ConfigValueVariant value_variant = context.get_mod_config_value(mod.manifest.mod_id, config_option.id); uint32_t value; if (uint32_t* value_ptr = std::get_if(&value_variant)) { value = *value_ptr; @@ -507,16 +507,16 @@ void zelda64::renderer::secondary_disable_texture_pack(const std::string& mod_id // HD texture enable option. Must be an enum with two options. // The first option is treated as disabled and the second option is treated as enabled. -bool zelda64::renderer::is_texture_pack_enable_config_option(const recomp::mods::ConfigOption& option, bool show_errors) { +bool zelda64::renderer::is_texture_pack_enable_config_option(const recomp::config::ConfigOption& option, bool show_errors) { if (option.id == zelda64::renderer::special_option_texture_pack_enabled) { - if (option.type != recomp::mods::ConfigOptionType::Enum) { + if (option.type != recomp::config::ConfigOptionType::Enum) { if (show_errors) { recompui::message_box(("Mod has the special config option id for enabling an HD texture pack (\"" + zelda64::renderer::special_option_texture_pack_enabled + "\"), but the config option is not an enum.").c_str()); } return false; } - const recomp::mods::ConfigOptionEnum &option_enum = std::get(option.variant); + const recomp::config::ConfigOptionEnum &option_enum = std::get(option.variant); if (option_enum.options.size() != 2) { if (show_errors) { recompui::message_box(("Mod has the special config option id for enabling an HD texture pack (\"" + zelda64::renderer::special_option_texture_pack_enabled + "\"), but the config option doesn't have exactly 2 values.").c_str()); diff --git a/src/ui/ui_mod_menu.cpp b/src/ui/ui_mod_menu.cpp index 86068b4..6e181a6 100644 --- a/src/ui/ui_mod_menu.cpp +++ b/src/ui/ui_mod_menu.cpp @@ -4,6 +4,7 @@ #include "zelda_support.h" #include "zelda_render.h" +#include "librecomp/config.hpp" #include "librecomp/mods.hpp" #include @@ -308,7 +309,7 @@ void ModMenu::mod_selected(uint32_t mod_index) { if (active_mod_index >= 0) { std::string thumbnail_src = generate_thumbnail_src_for_mod(mod_details[mod_index].mod_id); - const recomp::mods::ConfigSchema &config_schema = recomp::mods::get_mod_config_schema(mod_details[active_mod_index].mod_id); + const recomp::config::ConfigSchema &config_schema = recomp::mods::get_mod_config_schema(mod_details[active_mod_index].mod_id); bool toggle_checked = is_mod_enabled_or_auto(mod_details[mod_index].mod_id); bool auto_enabled = recomp::mods::is_mod_auto_enabled(mod_details[mod_index].mod_id); bool toggle_enabled = !auto_enabled && (mod_details[mod_index].runtime_toggleable || !ultramodern::is_game_started()); @@ -447,11 +448,14 @@ ContextId get_config_sub_menu_context_id() { return sub_menu_context; } -bool ModMenu::handle_special_config_options(const recomp::mods::ConfigOption& option, const recomp::mods::ConfigValueVariant& config_value) { +bool ModMenu::handle_special_config_options(const recomp::config::ConfigOption& option, const recomp::config::ConfigValueVariant& config_value) { if (zelda64::renderer::is_texture_pack_enable_config_option(option, true)) { - const recomp::mods::ConfigOptionEnum &option_enum = std::get(option.variant); - - config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get(config_value), option_enum.options, + const recomp::config::ConfigOptionEnum &option_enum = std::get(option.variant); + std::vector option_names; + for (const auto &opt : option_enum.options) { + option_names.push_back(opt.name); + } + config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get(config_value), option_names, [this](const std::string &id, uint32_t value) { mod_enum_option_changed(id, value); mod_hd_textures_enabled_changed(value); @@ -473,9 +477,9 @@ void ModMenu::mod_configure_requested() { sub_menu_context.open(); config_sub_menu->clear_options(); - const recomp::mods::ConfigSchema &config_schema = recomp::mods::get_mod_config_schema(mod_details[active_mod_index].mod_id); - for (const recomp::mods::ConfigOption &option : config_schema.options) { - recomp::mods::ConfigValueVariant config_value = recomp::mods::get_mod_config_value(mod_details[active_mod_index].mod_id, option.id); + const recomp::config::ConfigSchema &config_schema = recomp::mods::get_mod_config_schema(mod_details[active_mod_index].mod_id); + for (const recomp::config::ConfigOption &option : config_schema.options) { + recomp::config::ConfigValueVariant config_value = recomp::mods::get_mod_config_value(mod_details[active_mod_index].mod_id, option.id); if (std::holds_alternative(config_value)) { continue; } @@ -485,19 +489,23 @@ void ModMenu::mod_configure_requested() { } switch (option.type) { - case recomp::mods::ConfigOptionType::Enum: { - const recomp::mods::ConfigOptionEnum &option_enum = std::get(option.variant); - config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get(config_value), option_enum.options, + case recomp::config::ConfigOptionType::Enum: { + const recomp::config::ConfigOptionEnum &option_enum = std::get(option.variant); + std::vector option_names; + for (const auto &opt : option_enum.options) { + option_names.push_back(opt.name); + } + config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get(config_value), option_names, [this](const std::string &id, uint32_t value){ mod_enum_option_changed(id, value); }); break; } - case recomp::mods::ConfigOptionType::Number: { - const recomp::mods::ConfigOptionNumber &option_number = std::get(option.variant); + case recomp::config::ConfigOptionType::Number: { + const recomp::config::ConfigOptionNumber &option_number = std::get(option.variant); config_sub_menu->add_slider_option(option.id, option.name, option.description, std::get(config_value), option_number.min, option_number.max, option_number.step, option_number.percent, [this](const std::string &id, double value){ mod_number_option_changed(id, value); }); break; } - case recomp::mods::ConfigOptionType::String: { + case recomp::config::ConfigOptionType::String: { config_sub_menu->add_text_option(option.id, option.name, option.description, std::get(config_value), [this](const std::string &id, const std::string &value){ mod_string_option_changed(id, value); }); break; diff --git a/src/ui/ui_mod_menu.h b/src/ui/ui_mod_menu.h index 90d104c..594feca 100644 --- a/src/ui/ui_mod_menu.h +++ b/src/ui/ui_mod_menu.h @@ -86,7 +86,7 @@ private: void mod_selected(uint32_t mod_index); void mod_dragged(uint32_t mod_index, EventDrag drag); void mod_configure_requested(); - bool handle_special_config_options(const recomp::mods::ConfigOption& option, const recomp::mods::ConfigValueVariant& config_value); + bool handle_special_config_options(const recomp::config::ConfigOption& option, const recomp::config::ConfigValueVariant& config_value); void mod_enum_option_changed(const std::string &id, uint32_t value); void mod_string_option_changed(const std::string &id, const std::string &value); void mod_number_option_changed(const std::string &id, double value);