From cf3fc6cbcb9ad00f4b99502344431bef469cec8d Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 18 Feb 2024 09:38:08 -0500 Subject: Make win condition checkable --- src/ap_state.cpp | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'src/ap_state.cpp') diff --git a/src/ap_state.cpp b/src/ap_state.cpp index 5b02ba6..fdc0219 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -15,6 +16,7 @@ #include #include #include +#include #include #include @@ -47,10 +49,11 @@ struct APState { std::string data_storage_prefix; std::list tracked_data_storage_keys; + std::string victory_data_storage_key; std::map inventory; std::set checked_locations; - std::map data_storage; + std::map data_storage; DoorShuffleMode door_shuffle_mode = kNO_DOORS; bool color_shuffle = false; @@ -119,6 +122,7 @@ struct APState { inventory.clear(); checked_locations.clear(); data_storage.clear(); + victory_data_storage_key.clear(); door_shuffle_mode = kNO_DOORS; color_shuffle = false; painting_shuffle = false; @@ -187,6 +191,10 @@ struct APState { data_storage[key] = value.get(); TrackerLog("Data storage " + key + " retrieved as " + (value.get() ? "true" : "false")); + } else if (value.is_number()) { + data_storage[key] = value.get(); + TrackerLog("Data storage " + key + " retrieved as " + + std::to_string(value.get())); } } @@ -198,11 +206,15 @@ struct APState { const nlohmann::json&) { if (value.is_boolean()) { data_storage[key] = value.get(); - TrackerLog("Data storage " + key + " set to " + + TrackerLog("Data storage " + key + " retrieved as " + (value.get() ? "true" : "false")); - - RefreshTracker(); + } else if (value.is_number()) { + data_storage[key] = value.get(); + TrackerLog("Data storage " + key + " retrieved as " + + std::to_string(value.get())); } + + RefreshTracker(); }); apclient->set_slot_connected_handler([this]( @@ -242,6 +254,15 @@ struct APState { corrected_keys.push_back(data_storage_prefix + key); } + { + std::ostringstream vdsks; + vdsks << "_read_client_status_" << apclient->get_team_number() << "_" + << apclient->get_player_number(); + victory_data_storage_key = vdsks.str(); + } + + corrected_keys.push_back(victory_data_storage_key); + apclient->Get(corrected_keys); apclient->SetNotify(corrected_keys); }); @@ -321,7 +342,7 @@ struct APState { bool HasCheckedHuntPanel(int location_id) { std::string key = data_storage_prefix + "Hunt|" + std::to_string(location_id); - return data_storage.count(key) && data_storage.at(key); + return data_storage.count(key) && std::any_cast(data_storage.at(key)); } bool HasItem(int item_id, int quantity) { @@ -330,7 +351,7 @@ struct APState { bool HasAchievement(const std::string& name) { std::string key = data_storage_prefix + "Achievement|" + name; - return data_storage.count(key) && data_storage.at(key); + return data_storage.count(key) && std::any_cast(data_storage.at(key)); } void RefreshTracker() { @@ -349,6 +370,12 @@ struct APState { return ap_id; } + bool HasReachedGoal() { + return data_storage.count(victory_data_storage_key) && + std::any_cast(data_storage.at(victory_data_storage_key)) == + 30; // CLIENT_GOAL + } + void DestroyClient() { client_active = false; apclient->reset(); @@ -417,3 +444,5 @@ bool AP_HasAchievement(const std::string& achievement_name) { } bool AP_HasEarlyColorHallways() { return GetState().early_color_hallways; } + +bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } -- cgit 1.4.1