summaryrefslogtreecommitdiff
path: root/ecs/src
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-04-10 19:51:46 +0200
committerHampusM <hampus@hampusmat.com>2024-04-10 19:51:46 +0200
commitc70e06c6d879208eb2822f6207ea7b29d47c2087 (patch)
tree06b5b7ae8fbf69d6041fff1c576d7610ff6fba6a /ecs/src
parent9d8c73dd2671131929967214433dae5479e95b5b (diff)
chore(ecs): remove Event trait id method & take events by value
Diffstat (limited to 'ecs/src')
-rw-r--r--ecs/src/event.rs5
-rw-r--r--ecs/src/lib.rs19
2 files changed, 14 insertions, 10 deletions
diff --git a/ecs/src/event.rs b/ecs/src/event.rs
index 9545318..6a4c3a8 100644
--- a/ecs/src/event.rs
+++ b/ecs/src/event.rs
@@ -4,10 +4,7 @@ use std::hash::Hash;
use seq_macro::seq;
-pub trait Event: Debug + 'static
-{
- fn id(&self) -> Id;
-}
+pub trait Event: Debug + 'static {}
/// The ID of a [`Event`].
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs
index ce1a7d1..c93781d 100644
--- a/ecs/src/lib.rs
+++ b/ecs/src/lib.rs
@@ -103,19 +103,22 @@ impl World
self.data.single_component_storage.insert(single_component)
}
- pub fn register_system<'this, SystemImpl>(
+ pub fn register_system<'this, EventT, SystemImpl>(
&'this mut self,
- event: &impl Event,
+ event: EventT,
system: impl System<'this, SystemImpl>,
- )
+ ) where
+ EventT: Event,
{
self.systems.push(system.into_type_erased());
self.data
.events
- .entry(event.id())
+ .entry(EventId::of::<EventT>())
.or_default()
.push(self.systems.len() - 1);
+
+ drop(event);
}
/// Emits a event, running all systems listening to the event for each compatible
@@ -123,9 +126,13 @@ impl World
///
/// # Panics
/// Will panic if a system has dissapeared.
- pub fn emit(&self, event: &impl Event)
+ pub fn emit<EventT>(&self, event: EventT)
+ where
+ EventT: Event,
{
- self.emit_event_by_id(event.id());
+ self.emit_event_by_id(EventId::of::<EventT>());
+
+ drop(event);
}
pub fn query<Comps>(&self) -> Query<Comps>