diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index e87e08229..c25aca93a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2169,7 +2169,7 @@ void RandomizerSettingsWindow::DrawElement() { {RA_GANONS_CASTLE, true} }; - static std::unordered_map showTag { + static std::map showTag { {Rando::Tricks::Tag::NOVICE,true}, {Rando::Tricks::Tag::INTERMEDIATE,true}, {Rando::Tricks::Tag::ADVANCED,true}, @@ -2236,22 +2236,14 @@ void RandomizerSettingsWindow::DrawElement() { window->DC.CurrLineTextBaseOffset = 0.0f; if (ImGui::Button("Collapse All##disabled")) { - for (int i = 0; i < RT_MAX; i++) { - auto option = mSettings->GetTrickOption(static_cast(i)); - if (!option.IsHidden() && !enabledTricks.count(static_cast(i)) && - !option.IsGlitch()) { - areaTreeDisabled[option.GetArea()] = false; - } + for (int i = 0; i < RA_MAX; i++) { + areaTreeDisabled[static_cast(i)] = false; } } ImGui::SameLine(); if (ImGui::Button("Open All##disabled")) { - for (int i = 0; i < RT_MAX; i++) { - auto option = mSettings->GetTrickOption(static_cast(i)); - if (option.IsHidden() && !enabledTricks.count(static_cast(i)) && - !option.IsGlitch()) { - areaTreeDisabled[option.GetArea()] = false; - } + for (int i = 0; i < RA_MAX; i++) { + areaTreeDisabled[static_cast(i)] = true; } } ImGui::SameLine(); @@ -2288,15 +2280,15 @@ void RandomizerSettingsWindow::DrawElement() { } } if (hasTricks) { - ImGui::TreeNodeSetOpen(ImGui::GetID(Rando::Tricks::GetRTAreaName(area).c_str()), areaTreeDisabled[area]); + ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetRTAreaName(area) + "##disabled").c_str()), areaTreeDisabled[area]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); - if (ImGui::TreeNode(Rando::Tricks::GetRTAreaName(area).c_str())) { + if (ImGui::TreeNode((Rando::Tricks::GetRTAreaName(area) + "##disabled").c_str())) { for (auto rt : trickIds) { auto option = mSettings->GetTrickOption(rt); if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) && !enabledTricks.count(rt) && Rando::Tricks::CheckRTTags(showTag, option.GetTags()) && !option.IsGlitch()) { - ImGui::TreeNodeSetOpen(ImGui::GetID(Rando::Tricks::GetRTAreaName(option.GetArea()).c_str()), areaTreeDisabled[option.GetArea()]); + ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetRTAreaName(option.GetArea()) + "##disabled").c_str()), areaTreeDisabled[option.GetArea()]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) { enabledTricks.insert(rt); @@ -2329,23 +2321,16 @@ void RandomizerSettingsWindow::DrawElement() { ImGui::TableNextColumn(); window->DC.CurrLineTextBaseOffset = 0.0f; + if (ImGui::Button("Collapse All##enabled")) { - for (int i = 0; i < RT_MAX; i++) { - auto option = mSettings->GetTrickOption(static_cast(i)); - if (!option.IsHidden() && enabledTricks.count(static_cast(i)) && - !option.IsGlitch()) { - areaTreeDisabled[option.GetArea()] = false; - } + for (int i = 0; i < RA_MAX; i++) { + areaTreeEnabled[static_cast(i)] = false; } } ImGui::SameLine(); if (ImGui::Button("Open All##enabled")) { - for (int i = 0; i < RT_MAX; i++) { - auto option = mSettings->GetTrickOption(static_cast(i)); - if (option.IsHidden() && enabledTricks.count(static_cast(i)) && - !option.IsGlitch()) { - areaTreeDisabled[option.GetArea()] = false; - } + for (int i = 0; i < RA_MAX; i++) { + areaTreeEnabled[static_cast(i)] = true; } } ImGui::SameLine(); @@ -2356,7 +2341,7 @@ void RandomizerSettingsWindow::DrawElement() { trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] && Rando::Tricks::CheckRTTags(showTag, option.GetTags())) { - enabledTricks.insert(static_cast(i)); + enabledTricks.erase(static_cast(i)); } } std::string enabledTrickString = ""; @@ -2364,7 +2349,11 @@ void RandomizerSettingsWindow::DrawElement() { enabledTrickString += std::to_string(enabledTrickIt); enabledTrickString += ","; } - CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks")); + if (enabledTricks.size() == 0) { + CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks")); + } else { + CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); + } Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); } @@ -2382,18 +2371,18 @@ void RandomizerSettingsWindow::DrawElement() { } } if (hasTricks) { - ImGui::TreeNodeSetOpen(ImGui::GetID(Rando::Tricks::GetRTAreaName(area).c_str()), areaTreeDisabled[area]); + ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetRTAreaName(area) + "##enabled").c_str()), areaTreeEnabled[area]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); - if (ImGui::TreeNode(Rando::Tricks::GetRTAreaName(area).c_str())) { + if (ImGui::TreeNode((Rando::Tricks::GetRTAreaName(area) + "##enabled").c_str())) { for (auto rt : trickIds) { auto option = mSettings->GetTrickOption(rt); if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) && enabledTricks.count(rt) && Rando::Tricks::CheckRTTags(showTag, option.GetTags()) && !option.IsGlitch()) { - ImGui::TreeNodeSetOpen(ImGui::GetID(Rando::Tricks::GetRTAreaName(option.GetArea()).c_str()), areaTreeDisabled[option.GetArea()]); + ImGui::TreeNodeSetOpen(ImGui::GetID((Rando::Tricks::GetRTAreaName(option.GetArea()) + "##enabled").c_str()), areaTreeEnabled[option.GetArea()]); ImGui::SetNextItemOpen(true, ImGuiCond_Once); if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) { - enabledTricks.insert(rt); + enabledTricks.erase(rt); std::string enabledTrickString = ""; for (auto enabledTrickIt : enabledTricks) { enabledTrickString += std::to_string(enabledTrickIt); diff --git a/soh/soh/Enhancements/randomizer/tricks.cpp b/soh/soh/Enhancements/randomizer/tricks.cpp index 8172f2a55..4828dde7b 100644 --- a/soh/soh/Enhancements/randomizer/tricks.cpp +++ b/soh/soh/Enhancements/randomizer/tricks.cpp @@ -6,7 +6,7 @@ namespace Rando { return rtAreaNames.at(area); } - bool Tricks::CheckRTTags(const std::unordered_map &showTag, const std::set &rtTags) { + bool Tricks::CheckRTTags(const std::map &showTag, const std::set &rtTags) { if (rtTags.empty()) { return false; } diff --git a/soh/soh/Enhancements/randomizer/tricks.h b/soh/soh/Enhancements/randomizer/tricks.h index c473d5e3b..77d3a0b23 100644 --- a/soh/soh/Enhancements/randomizer/tricks.h +++ b/soh/soh/Enhancements/randomizer/tricks.h @@ -7,6 +7,7 @@ #include "randomizerTypes.h" #include +#include #include @@ -25,7 +26,7 @@ namespace Rando { }; static const std::string& GetRTAreaName(RandomizerArea area); - static bool CheckRTTags(const std::unordered_map &showTag, const std::set &rtTags); + static bool CheckRTTags(const std::map &showTag, const std::set &rtTags); static std::string GetRTTagName(Tag tag); static ImVec4 GetRTTagColor(Tag tag); static void DrawTagChips(const std::set &rtTags);