about summary refs log tree commit diff stats
path: root/src/tracker_state.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tracker_state.cpp')
-rw-r--r--src/tracker_state.cpp20
1 files changed, 20 insertions, 0 deletions
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 {
14 14
15struct TrackerState { 15struct TrackerState {
16 std::map<int, bool> reachability; 16 std::map<int, bool> reachability;
17 std::set<int> reachable_doors;
17 std::mutex reachability_mutex; 18 std::mutex reachability_mutex;
18}; 19};
19 20
@@ -156,6 +157,11 @@ class StateCalculator {
156 flood_boundary = new_boundary; 157 flood_boundary = new_boundary;
157 panel_boundary = new_panel_boundary; 158 panel_boundary = new_panel_boundary;
158 } 159 }
160
161 // Now that we know the full reachable area, let's make sure all doors are evaluated.
162 for (const Door& door : GD_GetDoors()) {
163 int discard = IsDoorReachable(door.id);
164 }
159 } 165 }
160 166
161 const std::set<int>& GetReachableRooms() const { return reachable_rooms_; } 167 const std::set<int>& GetReachableRooms() const { return reachable_rooms_; }
@@ -422,9 +428,17 @@ void RecalculateReachability() {
422 } 428 }
423 } 429 }
424 430
431 std::set<int> new_reachable_doors;
432 for (const auto& [door_id, decision] : state_calculator.GetDoorDecisions()) {
433 if (decision == kYes) {
434 new_reachable_doors.insert(door_id);
435 }
436 }
437
425 { 438 {
426 std::lock_guard reachability_guard(GetState().reachability_mutex); 439 std::lock_guard reachability_guard(GetState().reachability_mutex);
427 std::swap(GetState().reachability, new_reachability); 440 std::swap(GetState().reachability, new_reachability);
441 std::swap(GetState().reachable_doors, new_reachable_doors);
428 } 442 }
429} 443}
430 444
@@ -437,3 +451,9 @@ bool IsLocationReachable(int location_id) {
437 return false; 451 return false;
438 } 452 }
439} 453}
454
455bool IsDoorOpen(int door_id) {
456 std::lock_guard reachability_guard(GetState().reachability_mutex);
457
458 return GetState().reachable_doors.count(door_id);
459}