From 07aa59a122cc5e14d2fb2e2c6e3d8f82e4397bde Mon Sep 17 00:00:00 2001 From: HampusM Date: Wed, 14 Aug 2024 20:05:30 +0200 Subject: feat(ecs): add component added event --- ecs/src/event.rs | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'ecs/src/event.rs') diff --git a/ecs/src/event.rs b/ecs/src/event.rs index 93d4545..0caa56f 100644 --- a/ecs/src/event.rs +++ b/ecs/src/event.rs @@ -1,10 +1,21 @@ use std::any::TypeId; use std::fmt::Debug; -use std::hash::Hash; +use std::hash::{DefaultHasher, Hash, Hasher}; use seq_macro::seq; -pub trait Event: Debug + 'static {} +pub mod component; + +pub trait Event: Debug + 'static +{ + /// Returns the ID of this event. + fn id() -> Id + where + Self: Sized, + { + Id::new::(None) + } +} pub mod start; @@ -13,15 +24,27 @@ pub mod start; pub struct Id { inner: TypeId, + extra: Option, } impl Id { - /// Returns the id of a [`Event`]; #[must_use] - pub fn of() -> Self + pub fn new(extra: Option) -> Self + where + EventT: Event, + Extra: Hash, { - Self { inner: TypeId::of::() } + Self { + inner: TypeId::of::(), + extra: extra.map(|extra| { + let mut hasher = DefaultHasher::new(); + + extra.hash(&mut hasher); + + hasher.finish() + }), + } } } @@ -59,7 +82,7 @@ macro_rules! impl_sequence { fn ids() -> Self::Ids { [#( - Id::of::(), + Event~I::id(), )*] } } -- cgit v1.2.3-18-g5258