diff options
Diffstat (limited to 'src/tracker_state.cpp')
| -rw-r--r-- | src/tracker_state.cpp | 37 |
1 files changed, 35 insertions, 2 deletions
| diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index e02ee14..43f84b4 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp | |||
| @@ -182,13 +182,46 @@ void RecalculateReachability() { | |||
| 182 | 182 | ||
| 183 | bool valid_transition = false; | 183 | bool valid_transition = false; |
| 184 | if (room_exit.door.has_value()) { | 184 | if (room_exit.door.has_value()) { |
| 185 | Decision door_reachable = IsDoorReachable_Helper( | 185 | Decision door_reachable = kMaybe; |
| 186 | *room_exit.door, reachable_rooms, solveable_panels); | 186 | if (room_exit.sunwarp) { |
| 187 | if (AP_GetSunwarpAccess() == kSUNWARP_ACCESS_NORMAL) { | ||
| 188 | door_reachable = kYes; | ||
| 189 | } else if (AP_GetSunwarpAccess() == kSUNWARP_ACCESS_DISABLED) { | ||
| 190 | door_reachable = kNo; | ||
| 191 | } else { | ||
| 192 | door_reachable = IsDoorReachable_Helper( | ||
| 193 | *room_exit.door, reachable_rooms, solveable_panels); | ||
| 194 | } | ||
| 195 | } else { | ||
| 196 | door_reachable = IsDoorReachable_Helper( | ||
| 197 | *room_exit.door, reachable_rooms, solveable_panels); | ||
| 198 | } | ||
| 187 | if (door_reachable == kYes) { | 199 | if (door_reachable == kYes) { |
| 188 | valid_transition = true; | 200 | valid_transition = true; |
| 189 | } else if (door_reachable == kMaybe) { | 201 | } else if (door_reachable == kMaybe) { |
| 190 | new_boundary.push_back(room_exit); | 202 | new_boundary.push_back(room_exit); |
| 191 | } | 203 | } |
| 204 | } else if (room_exit.pilgrimage) { | ||
| 205 | Decision pilgrimage_reachable = kYes; | ||
| 206 | if (AP_GetSunwarpAccess() == kSUNWARP_ACCESS_DISABLED) { | ||
| 207 | pilgrimage_reachable = kNo; | ||
| 208 | } | ||
| 209 | if (pilgrimage_reachable == kYes) { | ||
| 210 | for (int door_id : GD_GetPilgrimageDoors( | ||
| 211 | AP_GetSunwarpAccess() == kSUNWARP_ACCESS_UNLOCK || | ||
| 212 | AP_GetSunwarpAccess() == kSUNWARP_ACCESS_PROGRESSIVE)) { | ||
| 213 | pilgrimage_reachable = IsDoorReachable_Helper( | ||
| 214 | door_id, reachable_rooms, solveable_panels); | ||
| 215 | if (pilgrimage_reachable != kYes) { | ||
| 216 | break; | ||
| 217 | } | ||
| 218 | } | ||
| 219 | } | ||
| 220 | if (pilgrimage_reachable == kYes) { | ||
| 221 | valid_transition = true; | ||
| 222 | } else if (pilgrimage_reachable == kMaybe) { | ||
| 223 | new_boundary.push_back(room_exit); | ||
| 224 | } | ||
| 192 | } else { | 225 | } else { |
| 193 | valid_transition = true; | 226 | valid_transition = true; |
| 194 | } | 227 | } |
