diff options
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r-- | ecs/src/lib.rs | 19 |
1 files changed, 13 insertions, 6 deletions
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> |