From e044558a93855b338ce25eabf8fbcb8122599a92 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Wed, 10 Dec 2025 19:32:32 -0500 Subject: [PATCH] fix duplicate heads collecting turns out we did not consider the ActiveHeads just duplicates in the backpack --- crates/shared/src/backpack/mod.rs | 11 +++++++---- crates/shared/src/heads/mod.rs | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/crates/shared/src/backpack/mod.rs b/crates/shared/src/backpack/mod.rs index 084966b..0054020 100644 --- a/crates/shared/src/backpack/mod.rs +++ b/crates/shared/src/backpack/mod.rs @@ -4,7 +4,10 @@ use crate::{ protocol::PlaySound, }; use crate::{ - cash::CashCollectEvent, global_observer, head_drop::HeadCollected, heads::HeadState, + cash::CashCollectEvent, + global_observer, + head_drop::HeadCollected, + heads::{ActiveHeads, HeadState}, heads_database::HeadsDatabase, }; use bevy::prelude::*; @@ -155,14 +158,14 @@ fn sync_backpack_ui(backpack: &Backpack, state: &mut BackpackUiState, time: f32) fn on_head_collect( trigger: On, mut cmds: Commands, - mut backpack: Query<&mut Backpack>, + mut query: Query<(&mut Backpack, &ActiveHeads)>, heads_db: Res, ) -> Result { let HeadCollected { head, entity } = *trigger.event(); - let mut backpack = backpack.get_mut(entity)?; + let (mut backpack, active_heads) = query.get_mut(entity)?; - if backpack.contains(head) { + if backpack.contains(head) || active_heads.contains(head) { cmds.trigger(CashCollectEvent); } else { backpack.insert(head, heads_db.as_ref()); diff --git a/crates/shared/src/heads/mod.rs b/crates/shared/src/heads/mod.rs index 40b5bd4..8bc71b8 100644 --- a/crates/shared/src/heads/mod.rs +++ b/crates/shared/src/heads/mod.rs @@ -171,6 +171,10 @@ impl ActiveHeads { None } + + pub fn contains(&self, head: usize) -> bool { + self.heads.iter().any(|h| h.is_some_and(|h| h.head == head)) + } } #[derive(Event)]