diff --git a/mods/randomizer/src/ui/rando_config.cpp b/mods/randomizer/src/ui/rando_config.cpp index 689b1a872b..fabfb28497 100644 --- a/mods/randomizer/src/ui/rando_config.cpp +++ b/mods/randomizer/src/ui/rando_config.cpp @@ -138,9 +138,30 @@ void add_select_setting(UiElementHandle pane, const char* key, UiElementHandle* help_rml += fmt::format("
{}: {}", info->GetOptions()[i], info->GetDescriptions()[i]); } - // temp dummies - auto getFn = [](ModContext*, void*, UiControlValue*) {}; - auto setFn = [](ModContext*, void*, const UiControlValue*) {}; + auto getFn = [](ModContext*, void* user_data, UiControlValue* out_value) { + auto setting = FindSetting(static_cast(user_data)); + const auto& options = setting->GetInfo()->GetOptions(); + + for (size_t i = 0; i < options.size(); ++i) { + if (options[i] == setting->GetCurrentOption()) { + out_value->int_value = i; + return; + } + } + + // default + out_value->int_value = 0; + }; + + auto setFn = [](ModContext*, void* user_data, const UiControlValue* value) { + auto setting = FindSetting(static_cast(user_data)); + const auto& options = setting->GetInfo()->GetOptions(); + + if (value->int_value >= 0 && value->int_value < options.size()) { + setting->SetCurrentOption(options[value->int_value]); + SaveRandomizerConfig(); + } + }; UiControlDesc desc = UI_CONTROL_DESC_INIT; desc.kind = UI_CONTROL_SELECT; @@ -149,6 +170,7 @@ void add_select_setting(UiElementHandle pane, const char* key, UiElementHandle* desc.binding = UI_BINDING_CALLBACKS; desc.get = getFn; desc.set = setFn; + desc.user_data = (void*)key; desc.options = optionsList.data(); desc.option_count = optionsList.size(); session::svc_mng.ui->pane_add_control(session::svc_mng.mod_ctx, pane, &desc, out_handle); @@ -164,9 +186,30 @@ void add_select_number_setting(UiElementHandle pane, const char* key, UiElementH optionsList.push_back(info->GetOptions()[i].c_str()); } - // temp dummies - auto getFn = [](ModContext*, void*, UiControlValue*) {}; - auto setFn = [](ModContext*, void*, const UiControlValue*) {}; + auto getFn = [](ModContext*, void* user_data, UiControlValue* out_value) { + auto setting = FindSetting(static_cast(user_data)); + const auto& options = setting->GetInfo()->GetOptions(); + + for (size_t i = 0; i < options.size(); ++i) { + if (options[i] == setting->GetCurrentOption()) { + out_value->int_value = i; + return; + } + } + + // default + out_value->int_value = 0; + }; + + auto setFn = [](ModContext*, void* user_data, const UiControlValue* value) { + auto setting = FindSetting(static_cast(user_data)); + const auto& options = setting->GetInfo()->GetOptions(); + + if (value->int_value >= 0 && value->int_value < options.size()) { + setting->SetCurrentOption(options[value->int_value]); + SaveRandomizerConfig(); + } + }; UiControlDesc desc = UI_CONTROL_DESC_INIT; desc.kind = UI_CONTROL_SELECT; @@ -175,6 +218,7 @@ void add_select_number_setting(UiElementHandle pane, const char* key, UiElementH desc.binding = UI_BINDING_CALLBACKS; desc.get = getFn; desc.set = setFn; + desc.user_data = (void*)key; desc.options = optionsList.data(); desc.option_count = optionsList.size(); session::svc_mng.ui->pane_add_control(session::svc_mng.mod_ctx, pane, &desc, out_handle); @@ -187,43 +231,67 @@ ModResult buildSeedManagementTab(ModContext* ctx, UiWindowHandle, UiElementHandl add_button(leftPane, "Generate Seed", "Generate a Randomizer seed using the current configuration options, and the supplied seed string.", - [](ModContext*, void*) {}); + [](ModContext*, void*) { + if (TryCreateRandomSeed()) { + mods::log::info("Created new Seed for generator."); + } + GenerateRandomizerSeed(); + }); add_string_input(leftPane, "Seed String", "Current value of the seed used by the randomizer for generation. Leave blank for a random value.", 32, - [](ModContext*, void*, UiControlValue*) {}, - [](ModContext*, void*, const UiControlValue*) {}); + [](ModContext*, void*, UiControlValue* out_value) { + out_value->string_value = GetRandomizerConfig().GetSeed().c_str(); + }, + [](ModContext*, void*, const UiControlValue* value) { + GetRandomizerConfig().SetSeed(value->string_value); + SaveRandomizerConfig(); + }); add_button(leftPane, "Delete Seeds", - " ", - [](ModContext*, void*) {}); + "Delete any seed not currently being used.", + [](ModContext*, void*) { + // TODO + }); add_section(leftPane, "Permalink"); - add_button(leftPane, - "Copy Permalink", - "Copy your current settings permalink to share with others.", - [](ModContext*, void*) {}); + { + std::string help_rml = "Copy your current settings permalink to share with others."; + help_rml += fmt::format("
Current Permalink: {}", GetRandomizerConfig().GetPermalink()); + add_button(leftPane, + "Copy Permalink", + help_rml.c_str(), + [](ModContext*, void*) { + // TODO: need SDL clipboard access + }); + } add_button(leftPane, "Paste Permalink", "Paste in a permalink from your clipboard. This will overwrite your current settings.", - [](ModContext*, void*) {}); + [](ModContext*, void*) { + // TODO: need SDL clipboard access + }); add_section(leftPane, "Presets"); add_button(leftPane, "Save Current Settings as Preset", "Save the current settings to your list of presets.", - [](ModContext*, void*) {}); + [](ModContext*, void*) { + // TODO + }); add_button(leftPane, "Load Preset", "Choose an existing preset to load from.", - [](ModContext*, void*) {}); + [](ModContext*, void*) { + // TODO + }); return MOD_OK; } @@ -239,7 +307,10 @@ ModResult buildSeedOptionsTab(ModContext* ctx, UiWindowHandle, UiElementHandle l add_button(leftPane, "Reset Settings to Default", "Reset all settings to their default values. This will also clear starting items and excluded locations.", - [](ModContext*, void*) {}); + [](ModContext*, void*) { + GetRandomizerConfig().ResetSettingsToDefault(); + SaveRandomizerConfig(); + }); add_section(leftPane, "Logic Settings"); add_select_setting(leftPane, "Logic Rules");