about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ap_state.cpp22
-rw-r--r--src/tracker_state.cpp4
2 files changed, 24 insertions, 2 deletions
diff --git a/src/ap_state.cpp b/src/ap_state.cpp index fd042b4..1e5621d 100644 --- a/src/ap_state.cpp +++ b/src/ap_state.cpp
@@ -39,6 +39,18 @@ constexpr int CONNECTION_BACKOFF_INTERVAL = 100;
39 39
40namespace { 40namespace {
41 41
42const std::set<long> kNonProgressionItems = {
43 444409, // :)
44 444575, // The Feeling of Being Lost
45 444576, // Wanderlust
46 444577, // Empty White Hallways
47 444410, // Slowness Trap
48 444411, // Iceland Trap
49 444412, // Atbash Trap
50 444413, // Puzzle Skip
51 444680, // Speed Boost
52};
53
42struct APState { 54struct APState {
43 // Initialized on main thread 55 // Initialized on main thread
44 bool initialized = false; 56 bool initialized = false;
@@ -394,6 +406,7 @@ struct APState {
394 406
395 void OnItemsReceived(const std::list<APClient::NetworkItem>& items) { 407 void OnItemsReceived(const std::list<APClient::NetworkItem>& items) {
396 std::vector<ItemState> item_states; 408 std::vector<ItemState> item_states;
409 bool progression_items = false;
397 410
398 { 411 {
399 std::lock_guard state_guard(state_mutex); 412 std::lock_guard state_guard(state_mutex);
@@ -405,6 +418,10 @@ struct APState {
405 TrackerLog(fmt::format("Item: {}", item.item)); 418 TrackerLog(fmt::format("Item: {}", item.item));
406 419
407 index_by_item[item.item] = item.index; 420 index_by_item[item.item] = item.index;
421
422 if (!kNonProgressionItems.count(item.item)) {
423 progression_items = true;
424 }
408 } 425 }
409 426
410 for (const auto& [item_id, item_index] : index_by_item) { 427 for (const auto& [item_id, item_index] : index_by_item) {
@@ -414,7 +431,8 @@ struct APState {
414 } 431 }
415 } 432 }
416 433
417 RefreshTracker(StateUpdate{.items = item_states}); 434 RefreshTracker(StateUpdate{.items = item_states,
435 .progression_items = progression_items});
418 } 436 }
419 437
420 void OnRetrieved(const std::map<std::string, nlohmann::json>& data) { 438 void OnRetrieved(const std::map<std::string, nlohmann::json>& data) {
@@ -639,7 +657,7 @@ struct APState {
639 void RefreshTracker(std::optional<StateUpdate> state_update) { 657 void RefreshTracker(std::optional<StateUpdate> state_update) {
640 TrackerLog("Refreshing display..."); 658 TrackerLog("Refreshing display...");
641 659
642 if (!state_update || !state_update->items.empty() || 660 if (!state_update || state_update->progression_items ||
643 !state_update->paintings.empty()) { 661 !state_update->paintings.empty()) {
644 std::string prev_msg; 662 std::string prev_msg;
645 { 663 {
diff --git a/src/tracker_state.cpp b/src/tracker_state.cpp index 9acf312..40ba6c4 100644 --- a/src/tracker_state.cpp +++ b/src/tracker_state.cpp
@@ -691,6 +691,8 @@ class StateCalculator {
691} // namespace 691} // namespace
692 692
693void ResetReachabilityRequirements() { 693void ResetReachabilityRequirements() {
694 TrackerLog("Resetting tracker state...");
695
694 std::lock_guard reachability_guard(GetState().reachability_mutex); 696 std::lock_guard reachability_guard(GetState().reachability_mutex);
695 GetState().requirements.Reset(); 697 GetState().requirements.Reset();
696 GetState().reachable_doors.clear(); 698 GetState().reachable_doors.clear();
@@ -754,6 +756,8 @@ void ResetReachabilityRequirements() {
754} 756}
755 757
756void RecalculateReachability() { 758void RecalculateReachability() {
759 TrackerLog("Calculating reachability...");
760
757 std::lock_guard reachability_guard(GetState().reachability_mutex); 761 std::lock_guard reachability_guard(GetState().reachability_mutex);
758 762
759 // Receiving items and checking paintings should never remove access to doors 763 // Receiving items and checking paintings should never remove access to doors