about summary refs log tree commit diff stats
path: root/src/tracker_state.cpp
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2024-04-16 11:34:49 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2024-04-16 11:34:49 -0400
commit004fb711a86d91985d8e94e1b87089db2ac2cadc (patch)
treecc3f4d384ede6e3f2705d7b98ca8afd3529aa4a1 /src/tracker_state.cpp
parentdc56f752bb33b4e779c5507dea03a6764d08fd0a (diff)
downloadlingo-ap-tracker-004fb711a86d91985d8e94e1b87089db2ac2cadc.tar.gz
lingo-ap-tracker-004fb711a86d91985d8e94e1b87089db2ac2cadc.tar.bz2
lingo-ap-tracker-004fb711a86d91985d8e94e1b87089db2ac2cadc.zip
Support panels mode door shuffle
Diffstat (limited to 'src/tracker_state.cpp')
-rw-r--r--src/tracker_state.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index e02ee14..9d2c6d1 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp
@@ -29,7 +29,7 @@ Decision IsDoorReachable_Helper(int door_id,
29 const std::set<int>& solveable_panels) { 29 const std::set<int>& solveable_panels) {
30 const Door& door_obj = GD_GetDoor(door_id); 30 const Door& door_obj = GD_GetDoor(door_id);
31 31
32 if (AP_GetDoorShuffleMode() == kNO_DOORS || door_obj.skip_item) { 32 if (AP_GetDoorShuffleMode() != kDOORS_MODE || door_obj.skip_item) {
33 if (!reachable_rooms.count(door_obj.room)) { 33 if (!reachable_rooms.count(door_obj.room)) {
34 return kMaybe; 34 return kMaybe;
35 } 35 }
@@ -41,7 +41,7 @@ Decision IsDoorReachable_Helper(int door_id,
41 } 41 }
42 42
43 return kYes; 43 return kYes;
44 } else if (AP_GetDoorShuffleMode() == kSIMPLE_DOORS && 44 } else if (AP_GetDoorShuffleMode() == kDOORS_MODE && AP_AreDoorsGrouped() &&
45 !door_obj.group_name.empty()) { 45 !door_obj.group_name.empty()) {
46 return AP_HasItem(door_obj.group_ap_item_id) ? kYes : kNo; 46 return AP_HasItem(door_obj.group_ap_item_id) ? kYes : kNo;
47 } else { 47 } else {
@@ -136,6 +136,28 @@ Decision IsPanelReachable_Helper(int panel_id,
136 } 136 }
137 } 137 }
138 138
139 if (panel_obj.panel_door != -1 && AP_GetDoorShuffleMode() == kPANELS_MODE) {
140 const PanelDoor& panel_door_obj = GD_GetPanelDoor(panel_obj.panel_door);
141
142 if (AP_AreDoorsGrouped() && panel_door_obj.group_ap_item_id != -1) {
143 return AP_HasItem(panel_door_obj.group_ap_item_id) ? kYes : kNo;
144 } else {
145 bool has_item = AP_HasItem(panel_door_obj.ap_item_id);
146
147 if (!has_item) {
148 for (const ProgressiveRequirement& prog_req :
149 panel_door_obj.progressives) {
150 if (AP_HasItem(prog_req.ap_item_id, prog_req.quantity)) {
151 has_item = true;
152 break;
153 }
154 }
155 }
156
157 return has_item ? kYes : kNo;
158 }
159 }
160
139 return kYes; 161 return kYes;
140} 162}
141 163