From 43cbd47900d23801c584def1b7877fdea700c23a Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 7 Jun 2025 22:52:36 +0200 Subject: feat(ecs): make component removals queryable This replaces the old component removed events --- ecs/src/component.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'ecs/src/component.rs') diff --git a/ecs/src/component.rs b/ecs/src/component.rs index 6fb1230..5a8cd0b 100644 --- a/ecs/src/component.rs +++ b/ecs/src/component.rs @@ -2,6 +2,8 @@ use std::any::{type_name, Any}; use std::fmt::Debug; use std::ops::{Deref, DerefMut}; +use ecs_macros::Component; +use hashbrown::HashSet; use seq_macro::seq; use crate::lock::{ @@ -311,3 +313,38 @@ impl Default for PartsBuilder Self { name: "(unspecified)" } } } + +/// Pending component removals for a entity. +#[derive(Debug, Clone, Component)] +pub struct Removals +{ + component_ids: HashSet, +} + +impl Removals +{ + pub fn contains(&self) -> bool + { + self.contains_id(ComponentT::id()) + } + + pub fn contains_id(&self, component_id: Uid) -> bool + { + self.component_ids.contains(&component_id) + } + + pub(crate) fn add_ids(&mut self, ids: impl IntoIterator) + { + self.component_ids.extend(ids) + } +} + +impl FromIterator for Removals +{ + fn from_iter>(iter: T) -> Self + { + Self { + component_ids: iter.into_iter().collect(), + } + } +} -- cgit v1.2.3-18-g5258