diff --git a/soh/soh/Enhancements/Presets/Presets.cpp b/soh/soh/Enhancements/Presets/Presets.cpp index b84cb95ca..43dbec3ef 100644 --- a/soh/soh/Enhancements/Presets/Presets.cpp +++ b/soh/soh/Enhancements/Presets/Presets.cpp @@ -437,7 +437,9 @@ void PresetsCustomWidget(WidgetInfo& info) { void RegisterPresetsWidgets() { SohGui::mSohMenu->AddSidebarEntry("Settings", "Presets", 1); WidgetPath path = { "Settings", "Presets", SECTION_COLUMN_1 }; - SohGui::mSohMenu->AddWidget(path, "PresetsWidget", WIDGET_CUSTOM).CustomFunction(PresetsCustomWidget); + SohGui::mSohMenu->AddWidget(path, "PresetsWidget", WIDGET_CUSTOM) + .CustomFunction(PresetsCustomWidget) + .HideInSearch(true); presetFolder = Ship::Context::GetInstance()->GetPathRelativeToAppDirectory("presets"); std::fill_n(saveSection, PRESET_SECTION_MAX, true); LoadPresets(); diff --git a/soh/soh/Enhancements/audio/AudioEditor.cpp b/soh/soh/Enhancements/audio/AudioEditor.cpp index 6660bee7d..b965f35bc 100644 --- a/soh/soh/Enhancements/audio/AudioEditor.cpp +++ b/soh/soh/Enhancements/audio/AudioEditor.cpp @@ -11,7 +11,7 @@ #include "soh/OTRGlobals.h" #include "soh/cvar_prefixes.h" #include -#include "soh/SohGui/UIWidgets.hpp" +#include "soh/SohGui/SohMenu.h" #include "soh/SohGui/SohGui.hpp" #include "AudioCollection.h" #include "soh/Enhancements/game-interactor/GameInteractor.h" @@ -25,6 +25,22 @@ Vec3f pos = { 0.0f, 0.0f, 0.0f }; f32 freqScale = 1.0f; s8 reverbAdd = 0; +using namespace UIWidgets; + +static WidgetInfo lowHpAlarm; +static WidgetInfo naviCall; +static WidgetInfo enemyProx; +static WidgetInfo leadingMusic; +static WidgetInfo displaySeqName; +static WidgetInfo ovlDuration; +static WidgetInfo voicePitch; +static WidgetInfo randoMusicOnSceneChange; +static WidgetInfo lowerOctaves; + +namespace SohGui { +extern std::shared_ptr mSohMenu; +} + // Authentic sequence counts // used to ensure we have enough to shuffle #define SEQ_COUNT_BGM_WORLD 30 @@ -518,69 +534,21 @@ void AudioEditor::DrawElement() { ImGui::TableNextRow(); ImGui::TableNextColumn(); if (ImGui::BeginChild("SfxOptions", ImVec2(0, -8))) { - UIWidgets::CVarCheckbox( - "Mute Low HP Alarm", CVAR_AUDIO("LowHpAlarm"), - UIWidgets::CheckboxOptions().Color(THEME_COLOR).Tooltip("Disable the low HP beeping sound.")); - UIWidgets::CVarCheckbox("Disable Navi Call Audio", CVAR_AUDIO("DisableNaviCallAudio"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Disables the voice audio when Navi calls you.")); - UIWidgets::CVarCheckbox( - "Disable Enemy Proximity Music", CVAR_AUDIO("EnemyBGMDisable"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Disables the music change when getting close to enemies. Useful for hearing " - "your custom music for each scene more often.")); - UIWidgets::CVarCheckbox( - "Disable Leading Music in Lost Woods", CVAR_AUDIO("LostWoodsConsistentVolume"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Disables the volume shifting in the Lost Woods. Useful for hearing " - "your custom music in the Lost Woods if you don't need the navigation assitance " - "the volume changing provides. If toggling this while in the Lost Woods, reload " - "the area for the effect to kick in.")); - UIWidgets::CVarCheckbox( - "Display Sequence Name on Overlay", CVAR_AUDIO("SeqNameOverlay"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Displays the name of the current sequence in the corner of the screen whenever a new " - "sequence " - "is loaded to the main sequence player (does not apply to fanfares or enemy BGM).")); - UIWidgets::CVarSliderInt("Overlay Duration: %d seconds", CVAR_AUDIO("SeqNameOverlayDuration"), - UIWidgets::IntSliderOptions() - .Min(1) - .Max(10) - .DefaultValue(5) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); - UIWidgets::CVarSliderFloat("Link's voice pitch multiplier", CVAR_AUDIO("LinkVoiceFreqMultiplier"), - UIWidgets::FloatSliderOptions() - .IsPercentage() - .Min(0.4f) - .Max(2.5f) - .DefaultValue(1.0f) - .Size(ImVec2(300.0f, 0.0f)) - .Color(THEME_COLOR)); + SohGui::mSohMenu->MenuDrawItem(lowHpAlarm, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(naviCall, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(enemyProx, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(leadingMusic, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(displaySeqName, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(ovlDuration, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(voicePitch, ImGui::GetContentRegionAvail().x, THEME_COLOR); ImGui::SameLine(); ImGui::SetCursorPosY(ImGui::GetCursorPos().y + 40.f); if (UIWidgets::Button("Reset##linkVoiceFreqMultiplier", UIWidgets::ButtonOptions().Size(ImVec2(80, 36)).Padding(ImVec2(5.0f, 0.0f)))) { CVarSetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0f); } - UIWidgets::CVarCheckbox( - "Randomize All Music and Sound Effects on New Scene", CVAR_AUDIO("RandomizeAllOnNewScene"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip( - "Enables randomizing all unlocked music and sound effects when you enter a new scene.")); - UIWidgets::CVarCheckbox( - "Lower Octaves of Unplayable High Notes", CVAR_AUDIO("ExperimentalOctaveDrop"), - UIWidgets::CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Some custom sequences may have notes that are too high for the game's audio " - "engine to play. Enabling this checkbox will cause these notes to drop a " - "couple of octaves so they can still harmonize with the other notes of the " - "sequence.")); + SohGui::mSohMenu->MenuDrawItem(randoMusicOnSceneChange, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(lowerOctaves, ImGui::GetContentRegionAvail().x, THEME_COLOR); } ImGui::EndChild(); ImGui::EndTable(); @@ -834,3 +802,77 @@ void AudioEditor_UnlockAll() { Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } + +void RegisterAudioWidgets() { + lowHpAlarm = { .name = "Mute Low HP Alarm", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + lowHpAlarm.CVar(CVAR_AUDIO("LowHpAlarm")) + .Options(CheckboxOptions().Color(THEME_COLOR).Tooltip("Disable the low HP beeping sound.")); + SohGui::mSohMenu->AddSearchWidget({ lowHpAlarm, "Enhancements", "Audio Editor", "Audio Options" }); + + naviCall = { .name = "Disable Navi Call Audio", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + naviCall.CVar(CVAR_AUDIO("DisableNaviCallAudio")) + .Options(CheckboxOptions().Color(THEME_COLOR).Tooltip("Disables the voice audio when Navi calls you.")); + SohGui::mSohMenu->AddSearchWidget({ naviCall, "Enhancements", "Audio Editor", "Audio Options" }); + + enemyProx = { .name = "Disable Enemy Proximity Music", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + enemyProx.CVar(CVAR_AUDIO("EnemyBGMDisable")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Disables the music change when getting close to enemies. Useful for hearing " + "your custom music for each scene more often.")); + + leadingMusic = { .name = "Disable Leading Music in Lost Woods", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + leadingMusic.CVar(CVAR_AUDIO("LostWoodsConsistentVolume")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Disables the volume shifting in the Lost Woods. Useful for hearing " + "your custom music in the Lost Woods if you don't need the navigation assitance " + "the volume changing provides. If toggling this while in the Lost Woods, reload " + "the area for the effect to kick in.")); + SohGui::mSohMenu->AddSearchWidget({ leadingMusic, "Enhancements", "Audio Editor", "Audio Options" }); + + displaySeqName = { .name = "Display Sequence Name on Overlay", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + displaySeqName.CVar(CVAR_AUDIO("SeqNameOverlay")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Displays the name of the current sequence in the corner of the screen whenever a new " + "sequence " + "is loaded to the main sequence player (does not apply to fanfares or enemy BGM).")); + SohGui::mSohMenu->AddSearchWidget({ displaySeqName, "Enhancements", "Audio Editor", "Audio Options" }); + + ovlDuration = { .name = "Overlay Duration: %d seconds", .type = WidgetType::WIDGET_CVAR_SLIDER_INT }; + ovlDuration.CVar(CVAR_AUDIO("SeqNameOverlayDuration")) + .Options(IntSliderOptions().Color(THEME_COLOR).Min(1).Max(10).DefaultValue(5).Size(ImVec2(300.0f, 0.0f))); + SohGui::mSohMenu->AddSearchWidget({ ovlDuration, "Enhancements", "Audio Editor", "Audio Options" }); + + voicePitch = { .name = "Link's Voice Pitch Multiplier", .type = WidgetType::WIDGET_CVAR_SLIDER_FLOAT }; + voicePitch.CVar(CVAR_AUDIO("LinkVoiceFreqMultiplier")) + .Options(FloatSliderOptions() + .Color(THEME_COLOR) + .IsPercentage() + .Min(0.4f) + .Max(2.5f) + .DefaultValue(1.0f) + .Size(ImVec2(300.0f, 0.0f))); + SohGui::mSohMenu->AddSearchWidget({ voicePitch, "Enhancements", "Audio Editor", "Audio Options" }); + + randoMusicOnSceneChange = { .name = "Randomize All Music and Sound Effects on New Scene", + .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + randoMusicOnSceneChange.CVar(CVAR_AUDIO("RandomizeAllOnNewScene")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Enables randomizing all unlocked music and sound effects when you enter a new scene.")); + SohGui::mSohMenu->AddSearchWidget({ randoMusicOnSceneChange, "Enhancements", "Audio Editor", "Audio Options" }); + + lowerOctaves = { .name = "Lower Octaves of Unplayable High Notes", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + lowerOctaves.CVar(CVAR_AUDIO("ExperimentalOctaveDrop")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Some custom sequences may have notes that are too high for the game's audio " + "engine to play. Enabling this checkbox will cause these notes to drop a " + "couple of octaves so they can still harmonize with the other notes of the " + "sequence.")); + SohGui::mSohMenu->AddSearchWidget({ lowerOctaves, "Enhancements", "Audio Editor", "Audio Options" }); +} + +static RegisterMenuInitFunc initAudioWidgets(RegisterAudioWidgets); diff --git a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp index 41a31f8be..e50a4a8c7 100644 --- a/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp +++ b/soh/soh/Enhancements/controls/SohInputEditorWindow.cpp @@ -1,7 +1,7 @@ #include "SohInputEditorWindow.h" #include #include "soh/OTRGlobals.h" -#include "soh/SohGui/UIWidgets.hpp" +#include "soh/SohGui/SohMenu.h" #include "soh/SohGui/SohGui.hpp" #include "z64.h" #include "soh/cvar_prefixes.h" @@ -13,6 +13,17 @@ using namespace UIWidgets; +static WidgetInfo freeLook; +static WidgetInfo mouseControl; +static WidgetInfo rightStickOcarina; +static WidgetInfo dpadOcarina; +static WidgetInfo dpadPause; +static WidgetInfo dpadText; + +namespace SohGui { +extern std::shared_ptr mSohMenu; +} + SohInputEditorWindow::~SohInputEditorWindow() { } @@ -1321,8 +1332,8 @@ void SohInputEditorWindow::DrawOcarinaControlPanel() { ImGui::SetCursorPos(ImVec2(cursor.x, cursor.y + 5)); CheckboxOptions checkOpt = CheckboxOptions().Color(THEME_COLOR); - CVarCheckbox("Dpad Ocarina Playback", CVAR_SETTING("CustomOcarina.Dpad"), checkOpt); - CVarCheckbox("Right Stick Ocarina Playback", CVAR_SETTING("CustomOcarina.RightStick"), checkOpt); + SohGui::mSohMenu->MenuDrawItem(dpadOcarina, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(rightStickOcarina, ImGui::GetContentRegionAvail().x, THEME_COLOR); CVarCheckbox("Customize Ocarina Controls", CVAR_SETTING("CustomOcarina.Enabled"), checkOpt); if (!CVarGetInteger(CVAR_SETTING("CustomOcarina.Enabled"), 0)) { @@ -1354,12 +1365,8 @@ void SohInputEditorWindow::DrawOcarinaControlPanel() { void SohInputEditorWindow::DrawCameraControlPanel() { ImVec2 cursor = ImGui::GetCursorPos(); ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); - CVarCheckbox( - "Enable Mouse Controls", CVAR_SETTING("EnableMouse"), - CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Allows for using the mouse to control the camera (must enable Free Look), " - "aim with the shield, and perform quickspin attacks (quickly rotate the mouse then press B)")); + SohGui::mSohMenu->MenuDrawItem(mouseControl, ImGui::GetContentRegionAvail().x, THEME_COLOR); + Ship::GuiWindow::BeginGroupPanel("Aiming/First-Person Camera", ImGui::GetContentRegionAvail()); CVarCheckbox("Right Stick Aiming", CVAR_SETTING("Controls.RightStickAim"), CheckboxOptions() @@ -1427,14 +1434,7 @@ void SohInputEditorWindow::DrawCameraControlPanel() { ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); Ship::GuiWindow::BeginGroupPanel("Third-Person Camera", ImGui::GetContentRegionAvail()); - CVarCheckbox( - "Free Look", CVAR_SETTING("FreeLook.Enabled"), - CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Enables free look camera control\nNote: You must remap C buttons off of the right stick in the " - "controller config menu, and map the camera stick to the right stick.\n" - "Doesn't work in areas were the game locks the camera.\n" - "Scene reload may be necessary to enable.")); + SohGui::mSohMenu->MenuDrawItem(freeLook, ImGui::GetContentRegionAvail().x, THEME_COLOR); CVarCheckbox("Invert Camera X Axis", CVAR_SETTING("FreeLook.InvertXAxis"), CheckboxOptions().Color(THEME_COLOR).Tooltip("Inverts the Camera X Axis in:\n-Free look")); CVarCheckbox( @@ -1467,16 +1467,8 @@ void SohInputEditorWindow::DrawDpadControlPanel() { ImVec2 cursor = ImGui::GetCursorPos(); ImGui::SetCursorPos(ImVec2(cursor.x + 5, cursor.y + 5)); Ship::GuiWindow::BeginGroupPanel("D-Pad Options", ImGui::GetContentRegionAvail()); - CVarCheckbox("D-pad Support on Pause Screen", CVAR_SETTING("DPadOnPause"), - CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Navigate Pause with the D-pad\nIf used with \"D-pad as Equip Items\", you must hold " - "C-Up to equip instead of navigate")); - CVarCheckbox("D-pad Support in Text Boxes", CVAR_SETTING("DpadInText"), - CheckboxOptions() - .Color(THEME_COLOR) - .Tooltip("Navigate choices in text boxes, shop item selection, and the file select / name entry " - "screens with the D-pad")); + SohGui::mSohMenu->MenuDrawItem(dpadPause, ImGui::GetContentRegionAvail().x, THEME_COLOR); + SohGui::mSohMenu->MenuDrawItem(dpadText, ImGui::GetContentRegionAvail().x, THEME_COLOR); if (!CVarGetInteger(CVAR_SETTING("DPadOnPause"), 0) && !CVarGetInteger(CVAR_SETTING("DpadInText"), 0)) { ImGui::BeginDisabled(); @@ -1902,3 +1894,52 @@ void SohInputEditorWindow::DrawElement() { ImGui::PopStyleColor(3); ImGui::PopFont(); } + +void RegisterInputWidgets() { + dpadOcarina = { .name = "Dpad Ocarina Playback", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + dpadOcarina.CVar(CVAR_SETTING("CustomOcarina.Dpad")).Options(CheckboxOptions().Color(THEME_COLOR)); + SohGui::mSohMenu->AddSearchWidget({ dpadOcarina, "Settings", "Controls", "Ocarina Controls", "" }); + + freeLook = { .name = "Free Look", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + freeLook.CVar(CVAR_SETTING("FreeLook.Enabled")) + .Options( + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip( + "Enables free look camera control\nNote: You must remap C buttons off of the right stick in the " + "controller config menu, and map the camera stick to the right stick.\n" + "Doesn't work in areas were the game locks the camera.\n" + "Scene reload may be necessary to enable.")); + SohGui::mSohMenu->AddSearchWidget({ freeLook, "Settings", "Controls", "Camera Controls" }); + + mouseControl = { .name = "Enable Mouse Controls", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + mouseControl.CVar(CVAR_SETTING("EnableMouse")) + .Options( + CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Allows for using the mouse to control the camera (must enable Free Look), " + "aim with the shield, and perform quickspin attacks (quickly rotate the mouse then press B)")); + SohGui::mSohMenu->AddSearchWidget({ mouseControl, "Settings", "Controls", "Camera Controls" }); + + rightStickOcarina = { .name = "Right Stick Ocarina Playback", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + rightStickOcarina.CVar(CVAR_SETTING("CustomOcarina.RightStick")).Options(CheckboxOptions().Color(THEME_COLOR)); + SohGui::mSohMenu->AddSearchWidget({ rightStickOcarina, "Settings", "Controls", "Ocarina Controls" }); + + dpadPause = { .name = "D-pad Support on Pause Screen", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + dpadPause.CVar(CVAR_SETTING("DPadOnPause")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Navigate Pause with the D-pad\nIf used with \"D-pad as Equip Items\", you must hold " + "C-Up to equip instead of navigate")); + SohGui::mSohMenu->AddSearchWidget({ dpadPause, "Settings", "Controls", "Dpad Controls" }); + + dpadText = { .name = "D-pad Support in Text Boxes", .type = WidgetType::WIDGET_CVAR_CHECKBOX }; + dpadText.CVar(CVAR_SETTING("DpadInText")) + .Options(CheckboxOptions() + .Color(THEME_COLOR) + .Tooltip("Navigate choices in text boxes, shop item selection, and the file select / name entry " + "screens with the D-pad")); + SohGui::mSohMenu->AddSearchWidget({ dpadText, "Settings", "Controls", "Dpad Controls" }); +} + +static RegisterMenuInitFunc initInputWidgets(RegisterInputWidgets); diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index d6334b6a0..030f2c41a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -2089,7 +2089,7 @@ void CheckTrackerSettingsWindow::DrawElement() { ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x); - UIWidgets::CVarColorPicker("BG Color", CVAR_TRACKER_CHECK("BgColor"), Color_Bg_Default, true, + UIWidgets::CVarColorPicker("Background Color", CVAR_TRACKER_CHECK("BgColor"), Color_Bg_Default, true, UIWidgets::ColorPickerResetButton | UIWidgets::ColorPickerRandomButton, THEME_COLOR); ImGui::PopItemWidth(); @@ -2103,7 +2103,7 @@ void CheckTrackerSettingsWindow::DrawElement() { if (CVarGetInteger(CVAR_TRACKER_CHECK("WindowType"), TRACKER_WINDOW_WINDOW) == TRACKER_WINDOW_FLOATING) { UIWidgets::CVarCheckbox("Enable Dragging", CVAR_TRACKER_CHECK("Draggable"), UIWidgets::CheckboxOptions().Color(THEME_COLOR)); - UIWidgets::CVarCheckbox("Only enable while paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"), + UIWidgets::CVarCheckbox("Only Enable While Paused", CVAR_TRACKER_CHECK("ShowOnlyPaused"), UIWidgets::CheckboxOptions().Color(THEME_COLOR)); UIWidgets::CVarCombobox("Display Mode", CVAR_TRACKER_CHECK("DisplayType"), displayType, UIWidgets::ComboboxOptions() @@ -2135,7 +2135,7 @@ void CheckTrackerSettingsWindow::DrawElement() { .Color(THEME_COLOR)); ImGui::EndDisabled(); if (UIWidgets::CVarCheckbox( - "Hide unshuffled shop item checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), + "Hide Unshuffled Shop Item Checks", CVAR_TRACKER_CHECK("HideUnshuffledShopChecks"), UIWidgets::CheckboxOptions() .Tooltip("If enabled, will prevent the tracker from displaying slots with non-shop-item shuffles.") .Color(THEME_COLOR))) { @@ -2143,7 +2143,7 @@ void CheckTrackerSettingsWindow::DrawElement() { UpdateFilters(); } if (UIWidgets::CVarCheckbox( - "Always show gold skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), + "Always Show Gold Skulltulas", CVAR_TRACKER_CHECK("AlwaysShowGSLocs"), UIWidgets::CheckboxOptions() .Tooltip("If enabled, will show GS locations in the tracker regardless of tokensanity settings.") .Color(THEME_COLOR))) { diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 04bc783d9..ed08a64ea 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -1781,7 +1781,7 @@ void ItemTrackerSettingsWindow::DrawElement() { if (CVarCheckbox("Enable Dragging", CVAR_TRACKER_ITEM("Draggable"), CheckboxOptions().Color(THEME_COLOR))) { shouldUpdateVectors = true; } - if (CVarCheckbox("Only enable while paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"), + if (CVarCheckbox("Only Enable While Paused", CVAR_TRACKER_ITEM("ShowOnlyPaused"), CheckboxOptions().Color(THEME_COLOR))) { shouldUpdateVectors = true; } diff --git a/soh/soh/SohGui/Menu.cpp b/soh/soh/SohGui/Menu.cpp index 5a609a935..a0d105da9 100644 --- a/soh/soh/SohGui/Menu.cpp +++ b/soh/soh/SohGui/Menu.cpp @@ -24,11 +24,20 @@ namespace SohGui { extern std::shared_ptr mModalWindow; } +std::vector extraSearches = {}; +std::vector extraSearchWidgets = {}; + namespace Ship { std::string disabledTempTooltip; const char* disabledTooltip; bool disabledValue = false; +bool navigateToWidget = false; +const char* navigateMainEntry = ""; +const char* navigateSidebar = ""; +std::string navigateWidgetName = ""; +bool highlightWidget = false; + bool operator==(Color_RGB8 const& l, Color_RGB8 const& r) noexcept { return l.r == r.r && l.g == r.g && l.b == r.b; } @@ -186,7 +195,12 @@ bool ModernMenuHeaderEntry(std::string label) { uint32_t Menu::DrawSearchResults(std::string& menuSearchText) { int searchCount = 0; - if (ImGui::BeginChild("Search Results")) { + std::transform(menuSearchText.begin(), menuSearchText.end(), menuSearchText.begin(), ::tolower); + menuSearchText.erase(std::remove(menuSearchText.begin(), menuSearchText.end(), ' '), menuSearchText.end()); + ImGui::SetNextWindowSizeConstraints({ ImGui::GetContentRegionAvail().x / 2, 0 }, + { ImGui::GetContentRegionAvail().x / 2, ImGui::GetContentRegionAvail().y }); + if (ImGui::BeginChild("Search Results Col 1", { ImGui::GetContentRegionAvail().x / 2, 0 }, + ImGuiChildFlags_AutoResizeY, ImGuiWindowFlags_NoTitleBar)) { for (auto& menuLabel : menuOrder) { auto& menuEntry = menuEntries.at(menuLabel); for (auto& sidebarLabel : menuEntry.sidebarOrder) { @@ -195,18 +209,15 @@ uint32_t Menu::DrawSearchResults(std::string& menuSearchText) { auto& column = sidebar.columnWidgets.at(i); for (auto& info : column) { if (info.type == WIDGET_SEARCH || info.type == WIDGET_SEPARATOR || - info.type == WIDGET_SEPARATOR_TEXT || info.isHidden) { + info.type == WIDGET_SEPARATOR_TEXT || info.isHidden || info.hideInSearch) { continue; } const char* tooltip = info.options->tooltip; std::string widgetStr = std::string(info.name) + std::string(tooltip != NULL ? tooltip : ""); - std::transform(menuSearchText.begin(), menuSearchText.end(), menuSearchText.begin(), ::tolower); - menuSearchText.erase(std::remove(menuSearchText.begin(), menuSearchText.end(), ' '), - menuSearchText.end()); std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower); widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end()); if (widgetStr.find(menuSearchText) != std::string::npos) { - MenuDrawItem(info, 90 / sidebar.columnCount, menuThemeIndex); + MenuDrawItem(info, 400, menuThemeIndex); ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray)); std::string origin = fmt::format(" ({} -> {}, Col {})", menuEntry.label, sidebarLabel, i + 1); @@ -218,6 +229,60 @@ uint32_t Menu::DrawSearchResults(std::string& menuSearchText) { } } } + ImGui::EndChild(); + } + ImGui::SameLine(); + ImGui::SetNextWindowSizeConstraints({ ImGui::GetContentRegionAvail().x, 0 }, + { ImGui::GetContentRegionAvail().x, ImGui::GetContentRegionAvail().y }); + if (ImGui::BeginChild("Search Results Col 2", { ImGui::GetContentRegionAvail().x, 0 }, ImGuiChildFlags_AutoResizeY, + ImGuiWindowFlags_NoTitleBar)) { + for (auto& entry : extraSearchWidgets) { + if (entry.info.type == WIDGET_SEARCH || entry.info.type == WIDGET_SEPARATOR || + entry.info.type == WIDGET_SEPARATOR_TEXT || entry.info.isHidden || entry.info.hideInSearch) { + continue; + } + std::string widgetStr = + entry.info.name + entry.info.options->tooltip + entry.extraTerms + entry.sidebarName; + std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower); + widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end()); + if (widgetStr.find(menuSearchText) != std::string::npos) { + MenuDrawItem(entry.info, 400, menuThemeIndex); + ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray)); + std::string origin = fmt::format(" ({} -> {}, {})", entry.menuName, entry.sidebarName, entry.location); + ImGui::Text("%s", origin.c_str()); + ImGui::PopStyleColor(); + searchCount++; + } + } + for (auto& entry : extraSearches) { + std::string widgetStr = entry.widgetName + entry.extraTerms + entry.sidebarName; + std::transform(widgetStr.begin(), widgetStr.end(), widgetStr.begin(), ::tolower); + widgetStr.erase(std::remove(widgetStr.begin(), widgetStr.end(), ' '), widgetStr.end()); + if (widgetStr.find(menuSearchText) != std::string::npos) { + std::string origin = fmt::format(" ({} -> {}, {})", entry.menuName, entry.sidebarName, entry.location); + ImVec2 textSize = ImGui::CalcTextSize(origin.c_str()); + ImVec2 pos = ImGui::GetCurrentWindow()->DC.CursorPos; + ImRect bb = { pos, { pos.x + textSize.x, pos.y + (textSize.y * 2) + ImGui::GetStyle().ItemSpacing.y } }; + const ImGuiID igid = + ImGui::GetCurrentWindow()->GetID(std::string(entry.widgetName + "##" + entry.sidebarName).c_str()); + ImGui::ItemSize(bb, ImGui::GetStyle().FramePadding.y); + ImGui::ItemAdd(bb, igid); + if (ImGui::ButtonBehavior(bb, igid, NULL, NULL)) { + navigateToWidget = true; + navigateMainEntry = entry.menuName.c_str(); + navigateSidebar = entry.sidebarName.c_str(); + navigateWidgetName = entry.widgetName; + break; + } + ImGui::GetCurrentWindow()->DC.CursorPos = pos; + ImGui::Text("%s", entry.widgetName.c_str()); + ImGui::PushStyleColor(ImGuiCol_Text, UIWidgets::ColorValues.at(UIWidgets::Colors::Gray)); + ImGui::Text("%s", origin.c_str()); + ImGui::PopStyleColor(); + searchCount++; + } + } + ImGui::EndChild(); } return searchCount; } @@ -227,6 +292,14 @@ void Menu::AddMenuEntry(std::string entryName, const char* entryCvar) { menuOrder.push_back(entryName); } +void Menu::AddSearchEntry(SearchEntry entry) { + extraSearches.push_back(entry); +} + +void Menu::AddSearchWidget(SearchWidget widget) { + extraSearchWidgets.push_back(widget); +} + std::unordered_map& Menu::GetDisabledMap() { return disabledMap; } @@ -473,7 +546,6 @@ void Menu::MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors me return; } DrawSearchResults(menuSearchText); - ImGui::EndChild(); } break; default: break; @@ -500,6 +572,19 @@ void Menu::DrawElement() { for (auto& [reason, info] : disabledMap) { info.active = info.evaluation(info); } + const char* headerCvar = CVAR_SETTING("Menu.ActiveHeader"); + + if (navigateToWidget) { + if (menuEntries.contains(navigateMainEntry) && + menuEntries.at(navigateMainEntry).sidebars.contains(navigateSidebar)) { + menuSearch.Clear(); + CVarSetString(headerCvar, navigateMainEntry); + const char* sidebarCvar = menuEntries.at(navigateMainEntry).sidebarCvar; + CVarSetString(sidebarCvar, navigateSidebar); + highlightWidget = true; + } + navigateToWidget = false; + } raceDisableActive = CVarGetInteger(CVAR_SETTING("DisableChanges"), 0); @@ -567,7 +652,6 @@ void Menu::DrawElement() { ImGui::PushFont(OTRGlobals::Instance->fontStandardLargest); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 8.0f)); - const char* headerCvar = CVAR_SETTING("Menu.ActiveHeader"); std::string headerIndex = CVarGetString(headerCvar, "Settings"); ImVec2 pos = window->DC.CursorPos; float centerX = pos.x + windowWidth / 2 - (style.ItemSpacing.x * (menuEntries.size() + 1)); @@ -797,12 +881,6 @@ void Menu::DrawElement() { ImGuiWindowFlags_NoTitleBar); } if (headerSearch && menuSearchText.length() > 0) { - uint32_t searchCount = DrawSearchResults(menuSearchText); - if (searchCount == 0) { - ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ImGui::CalcTextSize("No results found").x) / 2); - ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f); - ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 0.4f), "No results found"); - } ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ImGui::CalcTextSize("Clear Search").x) / 2 - 10.0f); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f); UIWidgets::ButtonOptions clearBtnOpts = {}; @@ -810,8 +888,12 @@ void Menu::DrawElement() { if (UIWidgets::Button("Clear Search", clearBtnOpts)) { menuSearch.Clear(); } - - ImGui::EndChild(); + uint32_t searchCount = DrawSearchResults(menuSearchText); + if (searchCount == 0) { + ImGui::SetCursorPosX((ImGui::GetWindowWidth() - ImGui::CalcTextSize("No results found").x) / 2); + ImGui::SetCursorPosY(ImGui::GetCursorPosY() + 10.0f); + ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 0.4f), "No results found"); + } } else { std::string menuLabel = menuEntries.at(headerIndex).label; if (MenuInit::GetUpdateFuncs().contains(menuLabel)) { diff --git a/soh/soh/SohGui/Menu.h b/soh/soh/SohGui/Menu.h index a7facffd1..8a88272af 100644 --- a/soh/soh/SohGui/Menu.h +++ b/soh/soh/SohGui/Menu.h @@ -26,6 +26,8 @@ class Menu : public GuiWindow { void MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors menuThemeIndex); void AddMenuEntry(std::string entryName, const char* entryCvar); + void AddSearchEntry(SearchEntry entry); + void AddSearchWidget(SearchWidget widget); std::unordered_map& GetDisabledMap(); protected: diff --git a/soh/soh/SohGui/MenuTypes.h b/soh/soh/SohGui/MenuTypes.h index e96d015ef..e86f475f9 100644 --- a/soh/soh/SohGui/MenuTypes.h +++ b/soh/soh/SohGui/MenuTypes.h @@ -111,11 +111,13 @@ struct WidgetInfo { bool isHidden = false; bool sameLine = false; bool raceDisable = true; + bool hideInSearch = false; WidgetInfo& CVar(const char* cVar_) { cVar = cVar_; return *this; } + WidgetInfo& Options(OptionsVariant options_) { switch (type) { case WIDGET_AUDIO_BACKEND: @@ -155,48 +157,63 @@ struct WidgetInfo { } return *this; } + + WidgetInfo& Options(std::shared_ptr options_) { + options = options_; + return *this; + } + + WidgetInfo& Callback(WidgetFunc callback_) { + callback = callback_; + return *this; + } + + WidgetInfo& PreFunc(WidgetFunc preFunc_) { + preFunc = preFunc_; + return *this; + } + + WidgetInfo& PostFunc(WidgetFunc postFunc_) { + postFunc = postFunc_; + return *this; + } + + WidgetInfo& WindowName(const char* windowName_) { + windowName = windowName_; + return *this; + } + + WidgetInfo& ValuePointer(std::variant valuePointer_) { + valuePointer = valuePointer_; + return *this; + } + + WidgetInfo& SameLine(bool sameLine_) { + sameLine = sameLine_; + return *this; + } + + WidgetInfo& CustomFunction(WidgetFunc customFunction_) { + customFunction = customFunction_; + return *this; + } + + WidgetInfo& RaceDisable(bool disable) { + raceDisable = disable; + return *this; + } + + WidgetInfo& HideInSearch(bool hide) { + hideInSearch = hide; + return *this; + } + void ResetDisables() { isHidden = false; options->disabled = false; options->disabledTooltip = ""; activeDisables.clear(); } - WidgetInfo& Options(std::shared_ptr options_) { - options = options_; - return *this; - } - WidgetInfo& Callback(WidgetFunc callback_) { - callback = callback_; - return *this; - } - WidgetInfo& PreFunc(WidgetFunc preFunc_) { - preFunc = preFunc_; - return *this; - } - WidgetInfo& PostFunc(WidgetFunc postFunc_) { - postFunc = postFunc_; - return *this; - } - WidgetInfo& WindowName(const char* windowName_) { - windowName = windowName_; - return *this; - } - WidgetInfo& ValuePointer(std::variant valuePointer_) { - valuePointer = valuePointer_; - return *this; - } - WidgetInfo& SameLine(bool sameLine_) { - sameLine = sameLine_; - return *this; - } - WidgetInfo& CustomFunction(WidgetFunc customFunction_) { - customFunction = customFunction_; - return *this; - } - WidgetInfo& RaceDisable(bool disable) { - raceDisable = disable; - return *this; - } }; struct WidgetPath { @@ -269,6 +286,24 @@ struct MenuInit { } }; +struct SearchEntry { + // First four required + std::string widgetName; + std::string menuName; + std::string sidebarName; + std::string location; + std::string extraTerms = ""; +}; + +struct SearchWidget { + // First four required + WidgetInfo& info; + std::string menuName; + std::string sidebarName; + std::string location; + std::string extraTerms = ""; +}; + struct RegisterMenuInitFunc { RegisterMenuInitFunc(std::function initFunc) { auto& menuInitFuncs = MenuInit::GetInitFuncs(); diff --git a/soh/soh/SohGui/SohMenuDevTools.cpp b/soh/soh/SohGui/SohMenuDevTools.cpp index 2a0fcd62a..f9e113b55 100644 --- a/soh/soh/SohGui/SohMenuDevTools.cpp +++ b/soh/soh/SohGui/SohMenuDevTools.cpp @@ -124,6 +124,7 @@ void SohMenu::AddMenuDevTools() { .CVar(CVAR_WINDOW("SohStats")) .RaceDisable(false) .WindowName("Stats##Soh") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Stats Window.")); // Console @@ -132,6 +133,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Console", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("SohConsole")) .WindowName("Console##SoH") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Console Window.")); // Save Editor @@ -140,6 +142,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Save Editor", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("SaveEditor")) .WindowName("Save Editor") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Save Editor Window.")); // Hook Debugger @@ -148,6 +151,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Hook Debugger", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("HookDebugger")) .WindowName("Hook Debugger") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Hook Debugger Window.")); // Collision Viewer @@ -156,6 +160,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Collision Viewer", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("CollisionViewer")) .WindowName("Collision Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Collision Viewer Window.")); // Actor Viewer @@ -164,6 +169,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Actor Viewer", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("ActorViewer")) .WindowName("Actor Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Actor Viewer Window.")); // Display List Viewer @@ -172,6 +178,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Display List Viewer", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("DisplayListViewer")) .WindowName("Display List Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Display List Viewer Window.")); // Value Viewer @@ -180,6 +187,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Value Viewer", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("ValueViewer")) .WindowName("Value Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Value Viewer Window.")); // Message Viewer @@ -188,6 +196,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Message Viewer", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("MessageViewer")) .WindowName("Message Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Message Viewer Window.")); // Gfx Debugger @@ -196,6 +205,7 @@ void SohMenu::AddMenuDevTools() { AddWidget(path, "Popout Gfx Debugger", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("SohGfxDebugger")) .WindowName("GfxDebugger##SoH") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Gfx Debugger Window.")); } diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index 488aeb720..4137214fe 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -1831,6 +1831,7 @@ void SohMenu::AddMenuEnhancements() { .CVar(CVAR_WINDOW("CosmeticsEditor")) .RaceDisable(false) .WindowName("Cosmetics Editor") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Cosmetics Editor Window.")); // Audio Editor @@ -1840,6 +1841,7 @@ void SohMenu::AddMenuEnhancements() { .CVar(CVAR_WINDOW("AudioEditor")) .RaceDisable(false) .WindowName("Audio Editor") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Audio Editor Window.")); // Gameplay Stats @@ -1849,6 +1851,7 @@ void SohMenu::AddMenuEnhancements() { .CVar(CVAR_WINDOW("GameplayStats")) .RaceDisable(false) .WindowName("Gameplay Stats") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Gameplay Stats Window.")); // Time Splits @@ -1858,6 +1861,7 @@ void SohMenu::AddMenuEnhancements() { .CVar(CVAR_WINDOW("TimeSplits")) .RaceDisable(false) .WindowName("Time Splits") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Time Splits Window.")); // Timers diff --git a/soh/soh/SohGui/SohMenuRandomizer.cpp b/soh/soh/SohGui/SohMenuRandomizer.cpp index 47e651408..31a8a7cbe 100644 --- a/soh/soh/SohGui/SohMenuRandomizer.cpp +++ b/soh/soh/SohGui/SohMenuRandomizer.cpp @@ -22,6 +22,7 @@ void SohMenu::AddMenuRandomizer() { AddWidget(path, "Popout Randomizer Settings Window", WIDGET_WINDOW_BUTTON) .CVar(CVAR_WINDOW("RandomizerSettings")) .WindowName("Randomizer Settings") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Randomizer Settings Window.")); // Enhancements @@ -104,6 +105,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("PlandomizerEditor")) .RaceDisable(false) .WindowName("Plandomizer Editor") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Randomizer Settings Window.")); // Item Tracker @@ -115,6 +117,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("ItemTracker")) .RaceDisable(false) .WindowName("Item Tracker") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Toggles the Item Tracker.").EmbedWindow(false)); AddWidget(path, "Item Tracker Settings", WIDGET_SEPARATOR_TEXT); @@ -122,6 +125,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("ItemTrackerSettings")) .RaceDisable(false) .WindowName("Item Tracker Settings") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Item Tracker Settings Window.")); // Entrance Tracker @@ -133,6 +137,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("EntranceTracker")) .RaceDisable(false) .WindowName("Entrance Tracker") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Toggles the Entrance Tracker.").EmbedWindow(false)); AddWidget(path, "Entrance Tracker Settings", WIDGET_SEPARATOR_TEXT); @@ -140,6 +145,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("EntranceTrackerSettings")) .RaceDisable(false) .WindowName("Entrance Tracker Settings") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Entrance Tracker Settings Window.")); // Check Tracker @@ -151,6 +157,7 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("CheckTracker")) .RaceDisable(false) .WindowName("Check Tracker") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Toggles the Check Tracker.").EmbedWindow(false)); AddWidget(path, "Check Tracker Settings", WIDGET_SEPARATOR_TEXT); @@ -158,7 +165,47 @@ void SohMenu::AddMenuRandomizer() { .CVar(CVAR_WINDOW("CheckTrackerSettings")) .RaceDisable(false) .WindowName("Check Tracker Settings") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Check Tracker Settings Window.")); + + AddSearchEntry({ "Background Color", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Window Type", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Enable Dragging", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Only Enable While Paused", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Ammo/Capacity Tracking", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Key Count Tracking", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Triforce Piece Count Tracking", "Randomizer", "Item Tracker", "General Settings" }); + AddSearchEntry({ "Dungeon Items", "Randomizer", "Item Tracker", "General Settings", "keys maps compasses icon" }); + AddSearchEntry({ "Greg", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Triforce Pieces", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Boss Souls", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Ocarina Buttons", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Overworld Keys", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Fishing Pole", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Personal Notes", "Randomizer", "Item Tracker", "General Settings", "icon" }); + AddSearchEntry({ "Show Hookshot Identifiers", "Randomizer", "Item Tracker", "General Settings", "longshot icon" }); + + AddSearchEntry({ "Sort By", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Auto Scroll", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Highlight Previous", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Highlight Available", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Hide Undiscovered", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Hide Reverse", "Randomizer", "Entrance Tracker", "(Col 1)" }); + AddSearchEntry({ "Group By", "Randomizer", "Entrance Tracker", "(Col 2)" }); + AddSearchEntry({ "Show Source", "Randomizer", "Entrance Tracker", "(Col 2)", "spoil" }); + AddSearchEntry({ "Show Destination", "Randomizer", "Entrance Tracker", "(Col 2)", "spoil" }); + + AddSearchEntry({ "Background Color", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Window Type", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Vanilla/MQ Dungeon Spoilers", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Hide Unshuffled Shop Item Checks", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Always Show Gold Skulltulas", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Show Logic", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Display Check Availability", "Randomizer", "Check Tracker", "General Settings" }); + AddSearchEntry({ "Area Complete", "Randomizer", "Check Tracker", "Section Settings", "hide" }); + AddSearchEntry({ "Skipped", "Randomizer", "Check Tracker", "Section Settings", "hide" }); + AddSearchEntry({ "Scummed", "Randomizer", "Check Tracker", "Section Settings", "hide" }); + AddSearchEntry({ "Saved", "Randomizer", "Check Tracker", "Section Settings", "hide" }); } } // namespace SohGui diff --git a/soh/soh/SohGui/SohMenuSettings.cpp b/soh/soh/SohGui/SohMenuSettings.cpp index 2472e325b..768370b85 100644 --- a/soh/soh/SohGui/SohMenuSettings.cpp +++ b/soh/soh/SohGui/SohMenuSettings.cpp @@ -433,6 +433,7 @@ void SohMenu::AddMenuSettings() { .CVar(CVAR_WINDOW("ControllerConfiguration")) .RaceDisable(false) .WindowName("Configure Controller") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Bindings Window.")); // Input Viewer @@ -443,6 +444,7 @@ void SohMenu::AddMenuSettings() { .CVar(CVAR_WINDOW("InputViewer")) .RaceDisable(false) .WindowName("Input Viewer") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Toggles the Input Viewer.").EmbedWindow(false)); AddWidget(path, "Input Viewer Settings", WIDGET_SEPARATOR_TEXT); @@ -450,6 +452,7 @@ void SohMenu::AddMenuSettings() { .CVar(CVAR_WINDOW("InputViewerSettings")) .RaceDisable(false) .WindowName("Input Viewer Settings") + .HideInSearch(true) .Options(WindowButtonOptions().Tooltip("Enables the separate Input Viewer Settings Window.")); // Notifications