about summary refs log tree commit diff stats
path: root/src/ipc_state.cpp
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2024-12-17 16:32:10 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2024-12-17 16:32:10 -0500
commit4fb25ff5efe48ca8f594ce5b5d2839cb244018a9 (patch)
tree39af3f845aa80cf5e199f98ee22efaa43969045e /src/ipc_state.cpp
parentad7c3e616fdc6f13812ec52675d226a19351494a (diff)
downloadlingo-ap-tracker-4fb25ff5efe48ca8f594ce5b5d2839cb244018a9.tar.gz
lingo-ap-tracker-4fb25ff5efe48ca8f594ce5b5d2839cb244018a9.tar.bz2
lingo-ap-tracker-4fb25ff5efe48ca8f594ce5b5d2839cb244018a9.zip
Added solved panels over IPC
Diffstat (limited to 'src/ipc_state.cpp')
-rw-r--r--src/ipc_state.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/src/ipc_state.cpp b/src/ipc_state.cpp index 18f318f..c0bdc9b 100644 --- a/src/ipc_state.cpp +++ b/src/ipc_state.cpp
@@ -9,6 +9,7 @@
9#include <mutex> 9#include <mutex>
10#include <nlohmann/json.hpp> 10#include <nlohmann/json.hpp>
11#include <optional> 11#include <optional>
12#include <set>
12#include <string> 13#include <string>
13#include <thread> 14#include <thread>
14#include <tuple> 15#include <tuple>
@@ -35,6 +36,7 @@ struct IPCState {
35 std::string game_ap_user; 36 std::string game_ap_user;
36 37
37 std::optional<std::tuple<int, int>> player_position; 38 std::optional<std::tuple<int, int>> player_position;
39 std::set<std::string> solved_panels;
38 40
39 int backoff_amount = 0; 41 int backoff_amount = 0;
40 42
@@ -77,6 +79,12 @@ struct IPCState {
77 return player_position; 79 return player_position;
78 } 80 }
79 81
82 const std::set<std::string>& GetSolvedPanels() {
83 std::lock_guard state_guard(state_mutex);
84
85 return solved_panels;
86 }
87
80 private: 88 private:
81 void Thread() { 89 void Thread() {
82 for (;;) { 90 for (;;) {
@@ -137,7 +145,17 @@ struct IPCState {
137 } 145 }
138 } 146 }
139 147
140 void OnConnect() { connected = true; } 148 void OnConnect() {
149 connected = true;
150
151 {
152 std::lock_guard state_guard(state_mutex);
153
154 slot_matches = false;
155 player_position = std::nullopt;
156 solved_panels.clear();
157 }
158 }
141 159
142 void OnClose() { 160 void OnClose() {
143 connected = false; 161 connected = false;
@@ -168,6 +186,14 @@ struct IPCState {
168 std::make_tuple<int, int>(msg["position"]["x"], msg["position"]["z"]); 186 std::make_tuple<int, int>(msg["position"]["x"], msg["position"]["z"]);
169 187
170 tracker_frame->RedrawPosition(); 188 tracker_frame->RedrawPosition();
189 } else if (msg["cmd"] == "SolvePanels") {
190 std::lock_guard state_guard(state_mutex);
191
192 for (std::string panel : msg["panels"]) {
193 solved_panels.insert(std::move(panel));
194 }
195
196 tracker_frame->UpdateIndicators(kUPDATE_ONLY_PANELS);
171 } 197 }
172 } 198 }
173 199
@@ -229,3 +255,7 @@ bool IPC_IsConnected() { return GetState().IsConnected(); }
229std::optional<std::tuple<int, int>> IPC_GetPlayerPosition() { 255std::optional<std::tuple<int, int>> IPC_GetPlayerPosition() {
230 return GetState().GetPlayerPosition(); 256 return GetState().GetPlayerPosition();
231} 257}
258
259const std::set<std::string>& IPC_GetSolvedPanels() {
260 return GetState().GetSolvedPanels();
261}