diff options
Diffstat (limited to 'src/tracker_state.cpp')
-rw-r--r-- | src/tracker_state.cpp | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index 66e7751..a4134f9 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp | |||
@@ -584,6 +584,8 @@ void ResetReachabilityRequirements() { | |||
584 | } | 584 | } |
585 | 585 | ||
586 | void RecalculateReachability() { | 586 | void RecalculateReachability() { |
587 | std::lock_guard reachability_guard(GetState().reachability_mutex); | ||
588 | |||
587 | StateCalculator state_calculator({.start = GD_GetRoomByName("Menu")}); | 589 | StateCalculator state_calculator({.start = GD_GetRoomByName("Menu")}); |
588 | state_calculator.Calculate(); | 590 | state_calculator.Calculate(); |
589 | 591 | ||
@@ -616,14 +618,11 @@ void RecalculateReachability() { | |||
616 | std::set<int> reachable_paintings = state_calculator.GetReachablePaintings(); | 618 | std::set<int> reachable_paintings = state_calculator.GetReachablePaintings(); |
617 | std::map<int, std::map<std::string, bool>> door_reports = | 619 | std::map<int, std::map<std::string, bool>> door_reports = |
618 | state_calculator.GetDoorReports(); | 620 | state_calculator.GetDoorReports(); |
619 | 621 | ||
620 | { | 622 | std::swap(GetState().reachability, new_reachability); |
621 | std::lock_guard reachability_guard(GetState().reachability_mutex); | 623 | std::swap(GetState().reachable_doors, new_reachable_doors); |
622 | std::swap(GetState().reachability, new_reachability); | 624 | std::swap(GetState().reachable_paintings, reachable_paintings); |
623 | std::swap(GetState().reachable_doors, new_reachable_doors); | 625 | std::swap(GetState().door_reports, door_reports); |
624 | std::swap(GetState().reachable_paintings, reachable_paintings); | ||
625 | std::swap(GetState().door_reports, door_reports); | ||
626 | } | ||
627 | } | 626 | } |
628 | 627 | ||
629 | bool IsLocationReachable(int location_id) { | 628 | bool IsLocationReachable(int location_id) { |
@@ -651,5 +650,5 @@ bool IsPaintingReachable(int painting_id) { | |||
651 | const std::map<std::string, bool>& GetDoorRequirements(int door_id) { | 650 | const std::map<std::string, bool>& GetDoorRequirements(int door_id) { |
652 | std::lock_guard reachability_guard(GetState().reachability_mutex); | 651 | std::lock_guard reachability_guard(GetState().reachability_mutex); |
653 | 652 | ||
654 | return GetState().door_reports[door_id]; | 653 | return GetState().door_reports.at(door_id); |
655 | } | 654 | } |