//! Component events. use std::fmt::{Debug, Formatter}; use std::marker::PhantomData; use ecs_macros::Component; use crate::component::Component; /// Event emitted when: /// a) A entity with component `ComponentT` is spawned. /// b) A component `ComponentT` is added to a entity. #[derive(Clone, Component)] pub struct Added<ComponentT> where ComponentT: Component, { _pd: PhantomData<ComponentT>, } impl<ComponentT> Debug for Added<ComponentT> where ComponentT: Component, { fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result { formatter .debug_struct("Added") .field("_pd", &self._pd) .finish() } } impl<ComponentT> Default for Added<ComponentT> where ComponentT: Component, { fn default() -> Self { Self { _pd: PhantomData } } } /// Event emitted when: /// a) A `ComponentT` component is removed from a entity. /// b) A entity with component `ComponentT` is despawned. #[derive(Clone, Component)] pub struct Removed<ComponentT> where ComponentT: Component, { _pd: PhantomData<ComponentT>, } impl<ComponentT> Debug for Removed<ComponentT> where ComponentT: Component, { fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result { formatter .debug_struct("Removed") .field("_pd", &self._pd) .finish() } } impl<ComponentT> Default for Removed<ComponentT> where ComponentT: Component, { fn default() -> Self { Self { _pd: PhantomData } } } /// Specifies a kind of component event UID. #[derive(Debug, Clone, Copy)] #[non_exhaustive] pub enum Kind { Removed, }