diff options
Diffstat (limited to 'ap_state.cpp')
| -rw-r--r-- | ap_state.cpp | 41 |
1 files changed, 40 insertions, 1 deletions
| diff --git a/ap_state.cpp b/ap_state.cpp index 4d7ddb7..9df487f 100644 --- a/ap_state.cpp +++ b/ap_state.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <thread> | 9 | #include <thread> |
| 10 | 10 | ||
| 11 | #include "game_data.h" | 11 | #include "game_data.h" |
| 12 | #include "tracker_state.h" | ||
| 12 | 13 | ||
| 13 | constexpr int AP_MAJOR = 0; | 14 | constexpr int AP_MAJOR = 0; |
| 14 | constexpr int AP_MINOR = 4; | 15 | constexpr int AP_MINOR = 4; |
| @@ -16,6 +17,11 @@ constexpr int AP_REVISION = 0; | |||
| 16 | 17 | ||
| 17 | constexpr int ITEM_HANDLING = 7; // <- all | 18 | constexpr int ITEM_HANDLING = 7; // <- all |
| 18 | 19 | ||
| 20 | NLOHMANN_JSON_SERIALIZE_ENUM(DoorShuffleMode, | ||
| 21 | {{DoorShuffleMode::kNone, "none"}, | ||
| 22 | {DoorShuffleMode::kSimple, "simple"}, | ||
| 23 | {DoorShuffleMode::kComplex, "complex"}}); | ||
| 24 | |||
| 19 | APState::APState() { | 25 | APState::APState() { |
| 20 | std::thread([this]() { | 26 | std::thread([this]() { |
| 21 | for (;;) { | 27 | for (;;) { |
| @@ -92,6 +98,9 @@ void APState::Connect(std::string server, std::string player, | |||
| 92 | apclient_->set_slot_connected_handler([&](const nlohmann::json& slot_data) { | 98 | apclient_->set_slot_connected_handler([&](const nlohmann::json& slot_data) { |
| 93 | tracker_frame_->SetStatusMessage("Connected to Archipelago!"); | 99 | tracker_frame_->SetStatusMessage("Connected to Archipelago!"); |
| 94 | 100 | ||
| 101 | door_shuffle_mode_ = slot_data["shuffle_doors"].get<DoorShuffleMode>(); | ||
| 102 | color_shuffle_ = slot_data["shuffle_colors"].get<bool>(); | ||
| 103 | |||
| 95 | connected = true; | 104 | connected = true; |
| 96 | has_connection_result = true; | 105 | has_connection_result = true; |
| 97 | }); | 106 | }); |
| @@ -169,6 +178,16 @@ void APState::Connect(std::string server, std::string player, | |||
| 169 | } | 178 | } |
| 170 | } | 179 | } |
| 171 | 180 | ||
| 181 | ap_id_by_color_[LingoColor::kBlack] = GetItemId("Black"); | ||
| 182 | ap_id_by_color_[LingoColor::kRed] = GetItemId("Red"); | ||
| 183 | ap_id_by_color_[LingoColor::kBlue] = GetItemId("Blue"); | ||
| 184 | ap_id_by_color_[LingoColor::kYellow] = GetItemId("Yellow"); | ||
| 185 | ap_id_by_color_[LingoColor::kPurple] = GetItemId("Purple"); | ||
| 186 | ap_id_by_color_[LingoColor::kOrange] = GetItemId("Orange"); | ||
| 187 | ap_id_by_color_[LingoColor::kGreen] = GetItemId("Green"); | ||
| 188 | ap_id_by_color_[LingoColor::kBrown] = GetItemId("Brown"); | ||
| 189 | ap_id_by_color_[LingoColor::kGray] = GetItemId("Gray"); | ||
| 190 | |||
| 172 | RefreshTracker(); | 191 | RefreshTracker(); |
| 173 | } else { | 192 | } else { |
| 174 | client_active_ = false; | 193 | client_active_ = false; |
| @@ -185,7 +204,27 @@ bool APState::HasCheckedGameLocation(int area_id, int section_id) const { | |||
| 185 | } | 204 | } |
| 186 | } | 205 | } |
| 187 | 206 | ||
| 188 | void APState::RefreshTracker() { tracker_frame_->UpdateIndicators(); } | 207 | bool APState::HasColorItem(LingoColor color) const { |
| 208 | if (ap_id_by_color_.count(color)) { | ||
| 209 | return inventory_.count(ap_id_by_color_.at(color)); | ||
| 210 | } else { | ||
| 211 | return false; | ||
| 212 | } | ||
| 213 | } | ||
| 214 | |||
| 215 | void APState::RefreshTracker() { | ||
| 216 | GetTrackerState().CalculateState(); | ||
| 217 | tracker_frame_->UpdateIndicators(); | ||
| 218 | } | ||
| 219 | |||
| 220 | int64_t APState::GetItemId(const std::string& item_name) { | ||
| 221 | int64_t ap_id = apclient_->get_item_id(item_name); | ||
| 222 | if (ap_id == APClient::INVALID_NAME_ID) { | ||
| 223 | std::cout << "Could not find AP item ID for " << item_name << std::endl; | ||
| 224 | } | ||
| 225 | |||
| 226 | return ap_id; | ||
| 227 | } | ||
| 189 | 228 | ||
| 190 | APState& GetAPState() { | 229 | APState& GetAPState() { |
| 191 | static APState* instance = new APState(); | 230 | static APState* instance = new APState(); |
