Updated librecomp for config changes

This commit is contained in:
thecozies 2025-09-01 14:35:22 -05:00
parent 65a01adf2c
commit 325b433350
5 changed files with 31 additions and 23 deletions

View file

@ -54,7 +54,7 @@ namespace zelda64 {
// Texture pack enable option. Must be an enum with two options. // 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. // 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);
} }
} }

@ -1 +1 @@
Subproject commit df7e820d8c55e4fcb4616c210cbb2c01b25cd48c Subproject commit f295f49ae3daebef9c91c8e7e62c84f3912e2e1c

View file

@ -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}); texture_pack_action_queue.enqueue(TexturePackEnableAction{mod.manifest.mod_id});
// Check for the texture pack enabled config option. // 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); 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()) { 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)) { 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; uint32_t value;
if (uint32_t* value_ptr = std::get_if<uint32_t>(&value_variant)) { if (uint32_t* value_ptr = std::get_if<uint32_t>(&value_variant)) {
value = *value_ptr; 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. // 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. // 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.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) { 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()); 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; return false;
} }
const recomp::mods::ConfigOptionEnum &option_enum = std::get<recomp::mods::ConfigOptionEnum>(option.variant); const recomp::config::ConfigOptionEnum &option_enum = std::get<recomp::config::ConfigOptionEnum>(option.variant);
if (option_enum.options.size() != 2) { if (option_enum.options.size() != 2) {
if (show_errors) { 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()); 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());

View file

@ -4,6 +4,7 @@
#include "zelda_support.h" #include "zelda_support.h"
#include "zelda_render.h" #include "zelda_render.h"
#include "librecomp/config.hpp"
#include "librecomp/mods.hpp" #include "librecomp/mods.hpp"
#include <string> #include <string>
@ -308,7 +309,7 @@ void ModMenu::mod_selected(uint32_t mod_index) {
if (active_mod_index >= 0) { if (active_mod_index >= 0) {
std::string thumbnail_src = generate_thumbnail_src_for_mod(mod_details[mod_index].mod_id); 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 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 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()); 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; 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)) { if (zelda64::renderer::is_texture_pack_enable_config_option(option, true)) {
const recomp::mods::ConfigOptionEnum &option_enum = std::get<recomp::mods::ConfigOptionEnum>(option.variant); const recomp::config::ConfigOptionEnum &option_enum = std::get<recomp::config::ConfigOptionEnum>(option.variant);
std::vector<std::string> option_names;
config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get<uint32_t>(config_value), option_enum.options, 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<uint32_t>(config_value), option_names,
[this](const std::string &id, uint32_t value) { [this](const std::string &id, uint32_t value) {
mod_enum_option_changed(id, value); mod_enum_option_changed(id, value);
mod_hd_textures_enabled_changed(value); mod_hd_textures_enabled_changed(value);
@ -473,9 +477,9 @@ void ModMenu::mod_configure_requested() {
sub_menu_context.open(); sub_menu_context.open();
config_sub_menu->clear_options(); config_sub_menu->clear_options();
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);
for (const recomp::mods::ConfigOption &option : config_schema.options) { for (const recomp::config::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); recomp::config::ConfigValueVariant config_value = recomp::mods::get_mod_config_value(mod_details[active_mod_index].mod_id, option.id);
if (std::holds_alternative<std::monostate>(config_value)) { if (std::holds_alternative<std::monostate>(config_value)) {
continue; continue;
} }
@ -485,19 +489,23 @@ void ModMenu::mod_configure_requested() {
} }
switch (option.type) { switch (option.type) {
case recomp::mods::ConfigOptionType::Enum: { case recomp::config::ConfigOptionType::Enum: {
const recomp::mods::ConfigOptionEnum &option_enum = std::get<recomp::mods::ConfigOptionEnum>(option.variant); const recomp::config::ConfigOptionEnum &option_enum = std::get<recomp::config::ConfigOptionEnum>(option.variant);
config_sub_menu->add_radio_option(option.id, option.name, option.description, std::get<uint32_t>(config_value), option_enum.options, std::vector<std::string> 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<uint32_t>(config_value), option_names,
[this](const std::string &id, uint32_t value){ mod_enum_option_changed(id, value); }); [this](const std::string &id, uint32_t value){ mod_enum_option_changed(id, value); });
break; break;
} }
case recomp::mods::ConfigOptionType::Number: { case recomp::config::ConfigOptionType::Number: {
const recomp::mods::ConfigOptionNumber &option_number = std::get<recomp::mods::ConfigOptionNumber>(option.variant); const recomp::config::ConfigOptionNumber &option_number = std::get<recomp::config::ConfigOptionNumber>(option.variant);
config_sub_menu->add_slider_option(option.id, option.name, option.description, std::get<double>(config_value), option_number.min, option_number.max, option_number.step, option_number.percent, config_sub_menu->add_slider_option(option.id, option.name, option.description, std::get<double>(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); }); [this](const std::string &id, double value){ mod_number_option_changed(id, value); });
break; 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<std::string>(config_value), config_sub_menu->add_text_option(option.id, option.name, option.description, std::get<std::string>(config_value),
[this](const std::string &id, const std::string &value){ mod_string_option_changed(id, value); }); [this](const std::string &id, const std::string &value){ mod_string_option_changed(id, value); });
break; break;

View file

@ -86,7 +86,7 @@ private:
void mod_selected(uint32_t mod_index); void mod_selected(uint32_t mod_index);
void mod_dragged(uint32_t mod_index, EventDrag drag); void mod_dragged(uint32_t mod_index, EventDrag drag);
void mod_configure_requested(); 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_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_string_option_changed(const std::string &id, const std::string &value);
void mod_number_option_changed(const std::string &id, double value); void mod_number_option_changed(const std::string &id, double value);