summaryrefslogtreecommitdiff
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
parent9d8c73dd2671131929967214433dae5479e95b5b (diff)
chore(ecs): remove Event trait id method & take events by value
-rw-r--r--ecs/examples/event_loop.rs32
-rw-r--r--ecs/examples/multiple_queries.rs14
-rw-r--r--ecs/examples/simple.rs14
-rw-r--r--ecs/examples/with_local.rs18
-rw-r--r--ecs/examples/with_single.rs26
-rw-r--r--ecs/src/event.rs5
-rw-r--r--ecs/src/lib.rs19
7 files changed, 42 insertions, 86 deletions
diff --git a/ecs/examples/event_loop.rs b/ecs/examples/event_loop.rs
index b6a10e3..8d8d84f 100644
--- a/ecs/examples/event_loop.rs
+++ b/ecs/examples/event_loop.rs
@@ -1,5 +1,5 @@
use ecs::actions::Actions;
-use ecs::event::{Event, Id as EventId};
+use ecs::event::Event;
use ecs::{Component, Query, World};
#[derive(Component)]
@@ -67,43 +67,25 @@ fn age(query: Query<(Health, Name)>, mut actions: Actions)
#[derive(Debug)]
struct EventA;
-impl Event for EventA
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for EventA {}
#[derive(Debug)]
struct EventB;
-impl Event for EventB
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for EventB {}
#[derive(Debug)]
struct EventC;
-impl Event for EventC
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for EventC {}
fn main()
{
let mut world = World::new();
- world.register_system(&EventA, sheer);
- world.register_system(&EventB, feed);
- world.register_system(&EventC, age);
+ world.register_system(EventA, sheer);
+ world.register_system(EventB, feed);
+ world.register_system(EventC, age);
world.create_entity((
Wool { remaining: 30 },
diff --git a/ecs/examples/multiple_queries.rs b/ecs/examples/multiple_queries.rs
index e914cc6..ab442be 100644
--- a/ecs/examples/multiple_queries.rs
+++ b/ecs/examples/multiple_queries.rs
@@ -1,6 +1,6 @@
use std::fmt::Display;
-use ecs::event::{Event, Id as EventId};
+use ecs::event::Event;
use ecs::{Component, Query, World};
#[derive(Component)]
@@ -60,19 +60,13 @@ fn do_attacks(
#[derive(Debug, PartialEq, Eq, Hash)]
struct Start;
-impl Event for Start
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for Start {}
fn main()
{
let mut world = World::new();
- world.register_system(&Start, do_attacks);
+ world.register_system(Start, do_attacks);
world.create_entity((
Health { health: 100 },
@@ -92,5 +86,5 @@ fn main()
world.create_entity((AttackStrength::Strong,));
world.create_entity((AttackStrength::Weak,));
- world.emit(&Start);
+ world.emit(Start);
}
diff --git a/ecs/examples/simple.rs b/ecs/examples/simple.rs
index 9983c4a..6949308 100644
--- a/ecs/examples/simple.rs
+++ b/ecs/examples/simple.rs
@@ -1,4 +1,4 @@
-use ecs::event::{Event, Id as EventId};
+use ecs::event::Event;
use ecs::{Component, Query, World};
#[derive(Component)]
@@ -23,19 +23,13 @@ fn say_hello(query: Query<(SomeData, Greeting)>)
#[derive(Debug)]
struct Start;
-impl Event for Start
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for Start {}
fn main()
{
let mut world = World::new();
- world.register_system(&Start, say_hello);
+ world.register_system(Start, say_hello);
world.create_entity((
SomeData { num: 987_654 },
@@ -49,5 +43,5 @@ fn main()
Greeting { greeting: "Good evening".to_string() },
));
- world.emit(&Start);
+ world.emit(Start);
}
diff --git a/ecs/examples/with_local.rs b/ecs/examples/with_local.rs
index eb5de28..5890b90 100644
--- a/ecs/examples/with_local.rs
+++ b/ecs/examples/with_local.rs
@@ -1,5 +1,5 @@
use ecs::component::local::Local;
-use ecs::event::{Event, Id as EventId};
+use ecs::event::Event;
use ecs::system::{Into, System};
use ecs::{Component, Query, World};
@@ -45,27 +45,21 @@ fn say_whats_up(query: Query<(SomeData, Name)>, mut state: Local<SayHelloState>)
#[derive(Debug)]
struct Update;
-impl Event for Update
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for Update {}
fn main()
{
let mut world = World::new();
world.register_system(
- &Update,
+ Update,
say_hello
.into_system()
.initialize((SayHelloState { cnt: 0 },)),
);
world.register_system(
- &Update,
+ Update,
say_whats_up
.into_system()
.initialize((SayHelloState { cnt: 0 },)),
@@ -75,9 +69,9 @@ fn main()
world.create_entity((SomeData { num: 345 },));
- world.emit(&Update);
+ world.emit(Update);
println!("Haha");
- world.emit(&Update);
+ world.emit(Update);
}
diff --git a/ecs/examples/with_single.rs b/ecs/examples/with_single.rs
index 25b73d1..d222f76 100644
--- a/ecs/examples/with_single.rs
+++ b/ecs/examples/with_single.rs
@@ -1,5 +1,5 @@
use ecs::component::single::Single;
-use ecs::event::{Event, Id as EventId};
+use ecs::event::Event;
use ecs::{Component, Query, World};
#[derive(Component)]
@@ -33,31 +33,19 @@ fn print_total_ammo_count(ammo_counter: Single<AmmoCounter>)
#[derive(Debug)]
struct EventA;
-impl Event for EventA
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for EventA {}
#[derive(Debug)]
struct EventB;
-impl Event for EventB
-{
- fn id(&self) -> EventId
- {
- EventId::of::<Self>()
- }
-}
+impl Event for EventB {}
fn main()
{
let mut world = World::new();
- world.register_system(&EventA, count_ammo);
- world.register_system(&EventB, print_total_ammo_count);
+ world.register_system(EventA, count_ammo);
+ world.register_system(EventB, print_total_ammo_count);
world.create_entity((Ammo { ammo_left: 4 },));
world.create_entity((Ammo { ammo_left: 7 },));
@@ -65,7 +53,7 @@ fn main()
world.add_single_component(AmmoCounter::default()).unwrap();
- world.emit(&EventA);
+ world.emit(EventA);
- world.emit(&EventB);
+ world.emit(EventB);
}
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>