summaryrefslogtreecommitdiff
path: root/mm/2s2h/Rando/CheckTracker/CheckTracker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mm/2s2h/Rando/CheckTracker/CheckTracker.cpp')
-rw-r--r--mm/2s2h/Rando/CheckTracker/CheckTracker.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/mm/2s2h/Rando/CheckTracker/CheckTracker.cpp b/mm/2s2h/Rando/CheckTracker/CheckTracker.cpp
new file mode 100644
index 000000000..fcfcc318d
--- /dev/null
+++ b/mm/2s2h/Rando/CheckTracker/CheckTracker.cpp
@@ -0,0 +1,59 @@
+
+#include "CheckTracker.h"
+#include "2s2h/ShipUtils.h"
+
+namespace Rando {
+
+namespace CheckTracker {
+
+void FindReachableRegions(RandoRegionId currentRegion, std::set<RandoRegionId>& reachableRegions) {
+ auto& randoStaticRegion = Rando::StaticData::Regions[currentRegion];
+
+ for (auto& [neighborRegionId, accessLogicFunc] : randoStaticRegion.regions) {
+ // Check if the region is accessible and hasn’t been visited yet
+ if (reachableRegions.count(neighborRegionId) == 0 && accessLogicFunc()) {
+ reachableRegions.insert(neighborRegionId); // Mark region as visited
+ FindReachableRegions(neighborRegionId, reachableRegions); // Recursively visit neighbors
+ }
+ }
+}
+
+void Window::DrawElement() {
+ std::set<RandoRegionId> reachableRegions = { RR_CLOCK_TOWN_SOUTH };
+ FindReachableRegions(RR_CLOCK_TOWN_SOUTH, reachableRegions);
+
+ for (RandoRegionId regionId : reachableRegions) {
+ auto& randoStaticRegion = Rando::StaticData::Regions[regionId];
+ std::vector<RandoCheckId> availableChecks;
+
+ for (auto& [randoCheckId, accessLogicFunc] : randoStaticRegion.checks) {
+ auto& randoStaticCheck = Rando::StaticData::Checks[randoCheckId];
+ auto& randoSaveCheck = RANDO_SAVE_CHECKS[randoCheckId];
+ if (randoSaveCheck.shuffled && !randoSaveCheck.obtained && accessLogicFunc()) {
+ availableChecks.push_back(randoCheckId);
+ }
+ }
+
+ if (availableChecks.size() > 0) {
+ std::string regionName = Ship_GetSceneName(randoStaticRegion.sceneId);
+ if (randoStaticRegion.name != "") {
+ regionName += " - ";
+ regionName += randoStaticRegion.name;
+ }
+ ImGui::SeparatorText(regionName.c_str());
+
+ for (RandoCheckId checkId : availableChecks) {
+ auto& randoStaticCheck = Rando::StaticData::Checks[checkId];
+ ImGui::Text("%s", randoStaticCheck.name);
+ }
+ }
+ }
+}
+
+void SettingsWindow::DrawElement() {
+ ImGui::Text("Check Tracker Settings");
+}
+
+} // namespace CheckTracker
+
+} // namespace Rando