diff options
Diffstat (limited to 'engine-ecs/examples/event_loop.rs')
| -rw-r--r-- | engine-ecs/examples/event_loop.rs | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/engine-ecs/examples/event_loop.rs b/engine-ecs/examples/event_loop.rs new file mode 100644 index 0000000..62d0876 --- /dev/null +++ b/engine-ecs/examples/event_loop.rs @@ -0,0 +1,120 @@ +use engine_ecs::actions::Actions; +use engine_ecs::pair::{ChildOf, Pair}; +use engine_ecs::phase::{Phase, UPDATE as UPDATE_PHASE}; +use engine_ecs::{declare_entity, Component, Query, World}; + +#[derive(Component)] +struct Wool +{ + remaining: u32, +} + +#[derive(Component)] +struct Health +{ + health: u32, +} + +#[derive(Component)] +struct Name +{ + name: &'static str, +} + +fn sheer(query: Query<(&mut Wool, &Name)>) +{ + for (mut wool, name) in &query { + if wool.remaining == 0 { + println!("{} Has no wool left", name.name); + + continue; + } + + // Sheer the whool + wool.remaining -= 5; + + println!("Sheered 5 wool from {}", name.name); + } +} + +fn feed(query: Query<(&mut Health, &Name)>) +{ + for (mut health, name) in &query { + health.health += 1; + + println!("Feeded {} which gained 1 health", name.name); + } +} + +fn age(query: Query<(&mut Health, &Name)>, mut actions: Actions) +{ + for (mut health, name) in &query { + if health.health <= 2 { + health.health = 0; + + println!("{} passed away", name.name); + + actions.stop(); + + continue; + } + + health.health -= 2; + + println!("{} aged and lost 2 health", name.name); + } +} + +declare_entity!( + SHEER_PHASE, + ( + Phase, + Pair::builder() + .relation::<ChildOf>() + .target_id(*UPDATE_PHASE) + .build() + ) +); + +declare_entity!( + FEED_PHASE, + ( + Phase, + Pair::builder() + .relation::<ChildOf>() + .target_id(*SHEER_PHASE) + .build() + ) +); + +declare_entity!( + AGE_PHASE, + ( + Phase, + Pair::builder() + .relation::<ChildOf>() + .target_id(*FEED_PHASE) + .build() + ) +); + +fn main() +{ + let mut world = World::new(); + + world.create_declared_entity(&SHEER_PHASE); + world.create_declared_entity(&FEED_PHASE); + world.create_declared_entity(&AGE_PHASE); + + world.register_system(*SHEER_PHASE, sheer); + world.register_system(*FEED_PHASE, feed); + world.register_system(*AGE_PHASE, age); + + world.create_entity(( + Wool { remaining: 30 }, + Health { health: 3 }, + Name { name: "Bessy" }, + )); + + world.start_loop(); +} |
