diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | ap_state.cpp | 40 | ||||
-rw-r--r-- | ap_state.h | 2 | ||||
-rw-r--r-- | game_data.cpp | 7 | ||||
-rw-r--r-- | game_data.h | 1 |
6 files changed, 37 insertions, 21 deletions
diff --git a/.gitignore b/.gitignore index d008edb..a7cadc7 100644 --- a/.gitignore +++ b/.gitignore | |||
@@ -2,3 +2,4 @@ build/ | |||
2 | builds/ | 2 | builds/ |
3 | assets/LL1.yaml | 3 | assets/LL1.yaml |
4 | .DS_Store | 4 | .DS_Store |
5 | .vs | ||
diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d9a111..fea5d7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
@@ -3,6 +3,11 @@ project (lingo_ap_tracker) | |||
3 | 3 | ||
4 | set(CMAKE_BUILD_TYPE Debug) | 4 | set(CMAKE_BUILD_TYPE Debug) |
5 | 5 | ||
6 | if (MSVC) | ||
7 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") | ||
8 | set(CMAKE_WIN32_EXECUTABLE true) | ||
9 | endif(MSVC) | ||
10 | |||
6 | find_package(wxWidgets CONFIG REQUIRED) | 11 | find_package(wxWidgets CONFIG REQUIRED) |
7 | find_package(OpenSSL REQUIRED) | 12 | find_package(OpenSSL REQUIRED) |
8 | find_package(yaml-cpp REQUIRED) | 13 | find_package(yaml-cpp REQUIRED) |
@@ -36,6 +41,6 @@ add_executable(lingo_ap_tracker | |||
36 | eye_indicator.cpp | 41 | eye_indicator.cpp |
37 | tracker_state.cpp | 42 | tracker_state.cpp |
38 | ) | 43 | ) |
39 | set_property(TARGET lingo_ap_tracker PROPERTY CXX_STANDARD 17) | 44 | set_property(TARGET lingo_ap_tracker PROPERTY CXX_STANDARD 20) |
40 | set_property(TARGET lingo_ap_tracker PROPERTY CXX_STANDARD_REQUIRED ON) | 45 | set_property(TARGET lingo_ap_tracker PROPERTY CXX_STANDARD_REQUIRED ON) |
41 | target_link_libraries(lingo_ap_tracker PRIVATE OpenSSL::SSL OpenSSL::Crypto wx::core wx::base yaml-cpp) | 46 | target_link_libraries(lingo_ap_tracker PRIVATE OpenSSL::SSL OpenSSL::Crypto wx::core wx::base yaml-cpp) |
diff --git a/ap_state.cpp b/ap_state.cpp index 910feb7..2c8ba0a 100644 --- a/ap_state.cpp +++ b/ap_state.cpp | |||
@@ -1,8 +1,12 @@ | |||
1 | #include "ap_state.h" | 1 | #include "ap_state.h" |
2 | 2 | ||
3 | #include <hkutil/string.h> | 3 | #define HAS_STD_FILESYSTEM |
4 | #define _WEBSOCKETPP_CPP11_STRICT_ | ||
5 | #pragma comment(lib, "crypt32") | ||
4 | 6 | ||
7 | #include <apclient.hpp> | ||
5 | #include <apuuid.hpp> | 8 | #include <apuuid.hpp> |
9 | #include <hkutil/string.h> | ||
6 | #include <chrono> | 10 | #include <chrono> |
7 | #include <exception> | 11 | #include <exception> |
8 | #include <list> | 12 | #include <list> |
@@ -17,13 +21,15 @@ constexpr int AP_REVISION = 0; | |||
17 | 21 | ||
18 | constexpr int ITEM_HANDLING = 7; // <- all | 22 | constexpr int ITEM_HANDLING = 7; // <- all |
19 | 23 | ||
24 | static APClient* apclient = nullptr; | ||
25 | |||
20 | APState::APState() { | 26 | APState::APState() { |
21 | std::thread([this]() { | 27 | std::thread([this]() { |
22 | for (;;) { | 28 | for (;;) { |
23 | { | 29 | { |
24 | std::lock_guard client_guard(client_mutex_); | 30 | std::lock_guard client_guard(client_mutex_); |
25 | if (apclient_) { | 31 | if (apclient) { |
26 | apclient_->poll(); | 32 | apclient->poll(); |
27 | } | 33 | } |
28 | } | 34 | } |
29 | 35 | ||
@@ -39,11 +45,13 @@ void APState::Connect(std::string server, std::string player, | |||
39 | { | 45 | { |
40 | std::lock_guard client_guard(client_mutex_); | 46 | std::lock_guard client_guard(client_mutex_); |
41 | 47 | ||
42 | if (apclient_) { | 48 | if (apclient) { |
43 | apclient_->reset(); | 49 | apclient->reset(); |
50 | delete apclient; | ||
51 | apclient = nullptr; | ||
44 | } | 52 | } |
45 | 53 | ||
46 | apclient_ = std::make_unique<APClient>(ap_get_uuid(""), "Lingo", server); | 54 | apclient = new APClient(ap_get_uuid(""), "Lingo", server); |
47 | } | 55 | } |
48 | 56 | ||
49 | inventory_.clear(); | 57 | inventory_.clear(); |
@@ -52,15 +60,15 @@ void APState::Connect(std::string server, std::string player, | |||
52 | bool connected = false; | 60 | bool connected = false; |
53 | bool has_connection_result = false; | 61 | bool has_connection_result = false; |
54 | 62 | ||
55 | apclient_->set_room_info_handler([&]() { | 63 | apclient->set_room_info_handler([&]() { |
56 | tracker_frame_->SetStatusMessage( | 64 | tracker_frame_->SetStatusMessage( |
57 | "Connected to Archipelago server. Authenticating..."); | 65 | "Connected to Archipelago server. Authenticating..."); |
58 | 66 | ||
59 | apclient_->ConnectSlot(player, password, ITEM_HANDLING, {"Tracker"}, | 67 | apclient->ConnectSlot(player, password, ITEM_HANDLING, {"Tracker"}, |
60 | {AP_MAJOR, AP_MINOR, AP_REVISION}); | 68 | {AP_MAJOR, AP_MINOR, AP_REVISION}); |
61 | }); | 69 | }); |
62 | 70 | ||
63 | apclient_->set_location_checked_handler( | 71 | apclient->set_location_checked_handler( |
64 | [&](const std::list<int64_t>& locations) { | 72 | [&](const std::list<int64_t>& locations) { |
65 | for (const int64_t location_id : locations) { | 73 | for (const int64_t location_id : locations) { |
66 | checked_locations_.insert(location_id); | 74 | checked_locations_.insert(location_id); |
@@ -70,15 +78,15 @@ void APState::Connect(std::string server, std::string player, | |||
70 | RefreshTracker(); | 78 | RefreshTracker(); |
71 | }); | 79 | }); |
72 | 80 | ||
73 | apclient_->set_slot_disconnected_handler([&]() { | 81 | apclient->set_slot_disconnected_handler([&]() { |
74 | tracker_frame_->SetStatusMessage("Disconnected from Archipelago."); | 82 | tracker_frame_->SetStatusMessage("Disconnected from Archipelago."); |
75 | }); | 83 | }); |
76 | 84 | ||
77 | apclient_->set_socket_disconnected_handler([&]() { | 85 | apclient->set_socket_disconnected_handler([&]() { |
78 | tracker_frame_->SetStatusMessage("Disconnected from Archipelago."); | 86 | tracker_frame_->SetStatusMessage("Disconnected from Archipelago."); |
79 | }); | 87 | }); |
80 | 88 | ||
81 | apclient_->set_items_received_handler( | 89 | apclient->set_items_received_handler( |
82 | [&](const std::list<APClient::NetworkItem>& items) { | 90 | [&](const std::list<APClient::NetworkItem>& items) { |
83 | for (const APClient::NetworkItem& item : items) { | 91 | for (const APClient::NetworkItem& item : items) { |
84 | // TODO: Progressive items. | 92 | // TODO: Progressive items. |
@@ -90,7 +98,7 @@ void APState::Connect(std::string server, std::string player, | |||
90 | RefreshTracker(); | 98 | RefreshTracker(); |
91 | }); | 99 | }); |
92 | 100 | ||
93 | apclient_->set_slot_connected_handler([&](const nlohmann::json& slot_data) { | 101 | apclient->set_slot_connected_handler([&](const nlohmann::json& slot_data) { |
94 | tracker_frame_->SetStatusMessage("Connected to Archipelago!"); | 102 | tracker_frame_->SetStatusMessage("Connected to Archipelago!"); |
95 | 103 | ||
96 | door_shuffle_mode_ = slot_data["shuffle_doors"].get<DoorShuffleMode>(); | 104 | door_shuffle_mode_ = slot_data["shuffle_doors"].get<DoorShuffleMode>(); |
@@ -100,7 +108,7 @@ void APState::Connect(std::string server, std::string player, | |||
100 | has_connection_result = true; | 108 | has_connection_result = true; |
101 | }); | 109 | }); |
102 | 110 | ||
103 | apclient_->set_slot_refused_handler( | 111 | apclient->set_slot_refused_handler( |
104 | [&](const std::list<std::string>& errors) { | 112 | [&](const std::list<std::string>& errors) { |
105 | connected = false; | 113 | connected = false; |
106 | has_connection_result = true; | 114 | has_connection_result = true; |
@@ -163,7 +171,7 @@ void APState::Connect(std::string server, std::string player, | |||
163 | section_id++) { | 171 | section_id++) { |
164 | const Location& location = map_area.locations.at(section_id); | 172 | const Location& location = map_area.locations.at(section_id); |
165 | 173 | ||
166 | int64_t ap_id = apclient_->get_location_id(location.ap_location_name); | 174 | int64_t ap_id = apclient->get_location_id(location.ap_location_name); |
167 | if (ap_id == APClient::INVALID_NAME_ID) { | 175 | if (ap_id == APClient::INVALID_NAME_ID) { |
168 | std::cout << "Could not find AP location ID for " | 176 | std::cout << "Could not find AP location ID for " |
169 | << location.ap_location_name << std::endl; | 177 | << location.ap_location_name << std::endl; |
@@ -232,7 +240,7 @@ void APState::RefreshTracker() { | |||
232 | } | 240 | } |
233 | 241 | ||
234 | int64_t APState::GetItemId(const std::string& item_name) { | 242 | int64_t APState::GetItemId(const std::string& item_name) { |
235 | int64_t ap_id = apclient_->get_item_id(item_name); | 243 | int64_t ap_id = apclient->get_item_id(item_name); |
236 | if (ap_id == APClient::INVALID_NAME_ID) { | 244 | if (ap_id == APClient::INVALID_NAME_ID) { |
237 | std::cout << "Could not find AP item ID for " << item_name << std::endl; | 245 | std::cout << "Could not find AP item ID for " << item_name << std::endl; |
238 | } | 246 | } |
diff --git a/ap_state.h b/ap_state.h index d815f93..5ed7574 100644 --- a/ap_state.h +++ b/ap_state.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef AP_STATE_H_664A4180 | 1 | #ifndef AP_STATE_H_664A4180 |
2 | #define AP_STATE_H_664A4180 | 2 | #define AP_STATE_H_664A4180 |
3 | 3 | ||
4 | #include <apclient.hpp> | ||
5 | #include <memory> | 4 | #include <memory> |
6 | #include <mutex> | 5 | #include <mutex> |
7 | #include <set> | 6 | #include <set> |
@@ -40,7 +39,6 @@ class APState { | |||
40 | 39 | ||
41 | TrackerFrame* tracker_frame_; | 40 | TrackerFrame* tracker_frame_; |
42 | 41 | ||
43 | std::unique_ptr<APClient> apclient_; | ||
44 | bool client_active_ = false; | 42 | bool client_active_ = false; |
45 | std::mutex client_mutex_; | 43 | std::mutex client_mutex_; |
46 | 44 | ||
diff --git a/game_data.cpp b/game_data.cpp index b1504de..80ffd97 100644 --- a/game_data.cpp +++ b/game_data.cpp | |||
@@ -308,7 +308,10 @@ int GameData::AddOrGetDoor(std::string room, std::string door) { | |||
308 | 308 | ||
309 | if (!door_by_id_.count(full_name)) { | 309 | if (!door_by_id_.count(full_name)) { |
310 | door_by_id_[full_name] = doors_.size(); | 310 | door_by_id_[full_name] = doors_.size(); |
311 | doors_.push_back({.name = door, .room = AddOrGetRoom(room)}); | 311 | doors_.push_back({ |
312 | .room = AddOrGetRoom(room), | ||
313 | .name = door | ||
314 | }); | ||
312 | } | 315 | } |
313 | 316 | ||
314 | return door_by_id_[full_name]; | 317 | return door_by_id_[full_name]; |
@@ -321,7 +324,7 @@ int GameData::AddOrGetPanel(std::string room, std::string panel) { | |||
321 | int panel_id = panels_.size(); | 324 | int panel_id = panels_.size(); |
322 | panel_by_id_[full_name] = panel_id; | 325 | panel_by_id_[full_name] = panel_id; |
323 | panels_.push_back( | 326 | panels_.push_back( |
324 | {.id = panel_id, .name = panel, .room = AddOrGetRoom(room)}); | 327 | {.id = panel_id, .room = AddOrGetRoom(room), .name = panel}); |
325 | } | 328 | } |
326 | 329 | ||
327 | return panel_by_id_[full_name]; | 330 | return panel_by_id_[full_name]; |
diff --git a/game_data.h b/game_data.h index 3c50b68..6ee277b 100644 --- a/game_data.h +++ b/game_data.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define GAME_DATA_H_9C42AC51 | 2 | #define GAME_DATA_H_9C42AC51 |
3 | 3 | ||
4 | #include <map> | 4 | #include <map> |
5 | #include <optional> | ||
5 | #include <string> | 6 | #include <string> |
6 | #include <vector> | 7 | #include <vector> |
7 | 8 | ||