From e07e0318666e9b05b2a78b7de0979d5706cc28b7 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 2 Mar 2024 21:17:14 -0500 Subject: Added sunwarp shuffle --- src/ap_state.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/ap_state.cpp') diff --git a/src/ap_state.cpp b/src/ap_state.cpp index bdd9cb2..1ac6575 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp @@ -67,8 +67,10 @@ struct APState { bool pilgrimage_allows_roof_access = false; bool pilgrimage_allows_paintings = false; SunwarpAccess sunwarp_access = kSUNWARP_ACCESS_NORMAL; + bool sunwarp_shuffle = false; std::map painting_mapping; + std::map sunwarp_mapping; void Connect(std::string server, std::string player, std::string password) { if (!initialized) { @@ -140,6 +142,8 @@ struct APState { pilgrimage_allows_roof_access = false; pilgrimage_allows_paintings = false; sunwarp_access = kSUNWARP_ACCESS_NORMAL; + sunwarp_shuffle = false; + sunwarp_mapping.clear(); connected = false; has_connection_result = false; @@ -251,6 +255,7 @@ struct APState { slot_data.contains("pilgrimage_allows_paintings") && slot_data["pilgrimage_allows_paintings"].get() == 1; sunwarp_access = slot_data["sunwarp_access"].get(); + sunwarp_shuffle = slot_data["shuffle_sunwarps"].get() == 1; if (painting_shuffle && slot_data.contains("painting_entrance_to_exit")) { painting_mapping.clear(); @@ -261,6 +266,18 @@ struct APState { } } + if (sunwarp_shuffle && slot_data.contains("sunwarp_permutation")) { + std::vector inverted_sunwarps; + for (const auto& item : slot_data["sunwarp_permutation"]) { + inverted_sunwarps.push_back(item); + } + + for (int i = 0; i < 6; i++) { + sunwarp_mapping[inverted_sunwarps[i]] = SunwarpMapping{ + .dots = i + 1, .exit_index = inverted_sunwarps[i + 6]}; + } + } + connected = true; has_connection_result = true; @@ -474,4 +491,10 @@ bool AP_DoesPilgrimageAllowPaintings() { SunwarpAccess AP_GetSunwarpAccess() { return GetState().sunwarp_access; } +bool AP_IsSunwarpShuffle() { return GetState().sunwarp_shuffle; } + +const std::map& AP_GetSunwarpMapping() { + return GetState().sunwarp_mapping; +} + bool AP_HasReachedGoal() { return GetState().HasReachedGoal(); } -- cgit 1.4.1