From ea16cff14ff4faf5782da8ff684a6ec412b7b6ac Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 12 May 2024 17:48:02 -0400 Subject: Started making subway map --- src/tracker_state.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/tracker_state.cpp') diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index 640a159..5588c7f 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp @@ -14,6 +14,7 @@ namespace { struct TrackerState { std::map reachability; + std::set reachable_doors; std::mutex reachability_mutex; }; @@ -156,6 +157,11 @@ class StateCalculator { flood_boundary = new_boundary; panel_boundary = new_panel_boundary; } + + // Now that we know the full reachable area, let's make sure all doors are evaluated. + for (const Door& door : GD_GetDoors()) { + int discard = IsDoorReachable(door.id); + } } const std::set& GetReachableRooms() const { return reachable_rooms_; } @@ -422,9 +428,17 @@ void RecalculateReachability() { } } + std::set new_reachable_doors; + for (const auto& [door_id, decision] : state_calculator.GetDoorDecisions()) { + if (decision == kYes) { + new_reachable_doors.insert(door_id); + } + } + { std::lock_guard reachability_guard(GetState().reachability_mutex); std::swap(GetState().reachability, new_reachability); + std::swap(GetState().reachable_doors, new_reachable_doors); } } @@ -437,3 +451,9 @@ bool IsLocationReachable(int location_id) { return false; } } + +bool IsDoorOpen(int door_id) { + std::lock_guard reachability_guard(GetState().reachability_mutex); + + return GetState().reachable_doors.count(door_id); +} -- cgit 1.4.1