Preset Manager (#5459)
* Add presets sidebar, proof of concept row-based listing. * Complete and unify section check/x drawing. * Add error state to InputString, and corresponding members and builders to InputOptions. Implement saving and loading of preset files. * Implement `Config::SetBlock()`. Implement Apply. Implement Delete. Some json structure changes. * Apply `CVarClear()` calls in CVar-prefixed widget functions. * Comment out satellite preset pickers for now. * clang * Fix ButtonOptions initializer list. * I hate clang... * Loop new preset checkbox creation. Restore auto-resizing to new preset popup. Remove errant BeginDisabled in randomizer (merge artifact?). * Add BlockInfo struct to make array with all info for each block. Setup loops for all other same-ish situations (applying presets, setting up columns, etc) based on blockInfo. * Save tracker windows info for later restoration. Lay the groundwork for said restoration. * Complete tracker window restoration on preset application. * Fix RadioButtonsOptions builder parameter type. Add race lockout to new and apply buttons. * Revert application of CVarClear on UIWidgets widgets (need to preserve manually-set default states). * Remove enhancements satellite picker. Swap randomizer satellite picker to use the manager presets, only displays presets with randomizer section included. Move built-in presets to the asset archive, and remove delete button on them. Remove PresetEntries.cpp. * Fix locations and tricks tabs not updating live when applying preset with new system. * Apply RandoGenerating lockout to rando preset Apply button. * Fix new presets not being properly filtered in satellite selectors. * Fix currently selected presets getting deleted still being selected in satellite selectors. * Change BigPoeTargetCount in preset files to 1.
This commit is contained in:
@@ -4,11 +4,9 @@
|
||||
#include <soh/OTRGlobals.h>
|
||||
#include <soh/Enhancements/cosmetics/authenticGfxPatches.h>
|
||||
#include <soh/Enhancements/enemyrandomizer.h>
|
||||
#include <soh/Enhancements/Presets/Presets.h>
|
||||
#include <soh/Enhancements/TimeDisplay/TimeDisplay.h>
|
||||
|
||||
static std::string comboboxTooltip = "";
|
||||
static int32_t enhancementPresetSelected = ENHANCEMENT_PRESET_DEFAULT;
|
||||
bool isBetaQuestEnabled = false;
|
||||
static std::unordered_map<int32_t, const char*> bunnyHoodEffectMap = {
|
||||
{ BUNNY_HOOD_VANILLA, "Vanilla" },
|
||||
@@ -34,51 +32,8 @@ void SohMenu::AddMenuEnhancements() {
|
||||
// Add Enhancements Menu
|
||||
AddMenuEntry("Enhancements", CVAR_SETTING("Menu.EnhancementsSidebarSection"));
|
||||
|
||||
// Enhancements
|
||||
WidgetPath path = { "Enhancements", "Presets", SECTION_COLUMN_1 };
|
||||
AddSidebarEntry("Enhancements", path.sidebarName, 3);
|
||||
|
||||
const PresetTypeDefinition presetTypeDef = presetTypes.at(PRESET_TYPE_ENHANCEMENTS);
|
||||
for (auto iter = presetTypeDef.presets.begin(); iter != presetTypeDef.presets.end(); ++iter) {
|
||||
if (iter->first != 0)
|
||||
comboboxTooltip += "\n\n";
|
||||
comboboxTooltip += std::string(iter->second.label) + " - " + std::string(iter->second.description);
|
||||
}
|
||||
AddWidget(path, "Enhancement Presets", WIDGET_SEPARATOR_TEXT);
|
||||
AddWidget(path, "Select Preset", WIDGET_COMBOBOX)
|
||||
.ValuePointer(&enhancementPresetSelected)
|
||||
.Callback([](WidgetInfo& info) {
|
||||
const std::string presetTypeCvar =
|
||||
CVAR_GENERAL("SelectedPresets.") + std::to_string(PRESET_TYPE_ENHANCEMENTS);
|
||||
CVarSetInteger(presetTypeCvar.c_str(), *std::get<int32_t*>(info.valuePointer));
|
||||
})
|
||||
.Options(ComboboxOptions()
|
||||
.ComboMap(enhancementPresetList)
|
||||
.DefaultIndex(ENHANCEMENT_PRESET_DEFAULT)
|
||||
.Tooltip(comboboxTooltip.c_str()));
|
||||
AddWidget(path, "Apply Preset##Enhancemnts", WIDGET_BUTTON)
|
||||
.Options(ButtonOptions().Size(UIWidgets::Sizes::Inline))
|
||||
.Callback([](WidgetInfo& info) {
|
||||
const std::string presetTypeCvar =
|
||||
CVAR_GENERAL("SelectedPresets.") + std::to_string(PRESET_TYPE_ENHANCEMENTS);
|
||||
const PresetTypeDefinition presetTypeDef = presetTypes.at(PRESET_TYPE_ENHANCEMENTS);
|
||||
uint16_t selectedPresetId = CVarGetInteger(presetTypeCvar.c_str(), 0);
|
||||
if (selectedPresetId >= presetTypeDef.presets.size()) {
|
||||
selectedPresetId = 0;
|
||||
}
|
||||
const PresetDefinition selectedPresetDef = presetTypeDef.presets.at(selectedPresetId);
|
||||
for (const char* block : presetTypeDef.blocksToClear) {
|
||||
CVarClearBlock(block);
|
||||
}
|
||||
if (selectedPresetId != 0) {
|
||||
applyPreset(selectedPresetDef.entries);
|
||||
}
|
||||
CVarSetInteger(presetTypeCvar.c_str(), selectedPresetId);
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
});
|
||||
|
||||
// Quality of Life
|
||||
path.sidebarName = "Quality of Life";
|
||||
WidgetPath path = { "Enhancements", "Quality of Life", SECTION_COLUMN_1 };
|
||||
AddSidebarEntry("Enhancements", path.sidebarName, 3);
|
||||
path.column = SECTION_COLUMN_1;
|
||||
|
||||
@@ -289,16 +244,16 @@ void SohMenu::AddMenuEnhancements() {
|
||||
.SameLine(true)
|
||||
.Options(ButtonOptions().Size(Sizes::Inline))
|
||||
.Callback([](WidgetInfo& info) {
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.QuickBossDeaths"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), false);
|
||||
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), false);
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Entrances"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.QuickBossDeaths"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.OnePoint"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipOwlInteractions"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"));
|
||||
CVarClear(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"));
|
||||
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user