From c9a21a387634e8fdd13110906ebe786f055c446d Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 3 Aug 2023 11:34:57 -0400 Subject: LEVEL 2 and required_panel support --- src/tracker_state.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/tracker_state.cpp') diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index 37a7da8..b0e7ccc 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp @@ -45,6 +45,25 @@ bool IsPanelReachable_Helper(int panel_id, return (achievements_accessible >= AP_GetMasteryRequirement()); } + if (panel_obj.name == "LEVEL 2" && AP_GetVictoryCondition() == kLEVEL_2) { + int counting_panels_accessible = 0; + + for (int reachable_room : reachable_rooms) { + const Room& room = GD_GetRoom(reachable_room); + + for (int roomed_panel_id : room.panels) { + const Panel& roomed_panel = GD_GetPanel(roomed_panel_id); + + if (!roomed_panel.non_counting && + IsPanelReachable_Helper(roomed_panel_id, reachable_rooms)) { + counting_panels_accessible++; + } + } + } + + return (counting_panels_accessible >= AP_GetLevel2Requirement()); + } + for (int room_id : panel_obj.required_rooms) { if (!reachable_rooms.count(room_id)) { return false; @@ -57,6 +76,12 @@ bool IsPanelReachable_Helper(int panel_id, } } + for (int panel_id : panel_obj.required_panels) { + if (!IsPanelReachable_Helper(panel_id, reachable_rooms)) { + return false; + } + } + if (AP_IsColorShuffle()) { for (LingoColor color : panel_obj.colors) { if (!AP_HasColorItem(color)) { -- cgit 1.4.1