summaryrefslogtreecommitdiff
path: root/engine-ecs/examples/multiple_queries.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-05-21 17:55:20 +0200
committerHampusM <hampus@hampusmat.com>2026-05-21 17:55:20 +0200
commit8022e8998290b067b8aa0cb9cba8ba410826bdab (patch)
tree7171e79ce530e03079046ee8fd12167160c45480 /engine-ecs/examples/multiple_queries.rs
parent412cee02c252f91bcf0b70a3f5cc5fca6d2b4c62 (diff)
chore: rename ecs* crates to engine-ecs*HEADmaster
Diffstat (limited to 'engine-ecs/examples/multiple_queries.rs')
-rw-r--r--engine-ecs/examples/multiple_queries.rs85
1 files changed, 85 insertions, 0 deletions
diff --git a/engine-ecs/examples/multiple_queries.rs b/engine-ecs/examples/multiple_queries.rs
new file mode 100644
index 0000000..1a4aaad
--- /dev/null
+++ b/engine-ecs/examples/multiple_queries.rs
@@ -0,0 +1,85 @@
+use std::fmt::Display;
+
+use engine_ecs::phase::START as START_PHASE;
+use engine_ecs::{Component, Query, World};
+
+#[derive(Component)]
+struct Health
+{
+ health: u32,
+}
+
+#[derive(Component)]
+enum AttackStrength
+{
+ Strong,
+ Weak,
+}
+
+#[derive(Component)]
+struct EnemyName
+{
+ name: String,
+}
+
+impl Display for EnemyName
+{
+ fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result
+ {
+ self.name.fmt(formatter)
+ }
+}
+
+fn do_attacks(
+ attacker_query: Query<(&AttackStrength,)>,
+ enemy_query: Query<(&mut Health, &EnemyName)>,
+)
+{
+ for (attack_strength,) in &attacker_query {
+ for (mut health, enemy_name) in &enemy_query {
+ let damage = match *attack_strength {
+ AttackStrength::Strong => 20,
+ AttackStrength::Weak => 10,
+ };
+
+ if health.health <= damage {
+ println!("Enemy '{}' died", *enemy_name);
+
+ health.health = 0;
+
+ continue;
+ }
+
+ health.health -= damage;
+
+ println!("Enemy '{}' took {damage} damage", *enemy_name);
+ }
+ }
+}
+
+fn main()
+{
+ let mut world = World::new();
+
+ world.register_system(*START_PHASE, do_attacks);
+
+ world.create_entity((
+ Health { health: 100 },
+ EnemyName { name: "Big spider".to_string() },
+ ));
+
+ world.create_entity((
+ Health { health: 30 },
+ EnemyName { name: "Small goblin".to_string() },
+ ));
+
+ world.create_entity((
+ Health { health: 30 },
+ EnemyName { name: "Headcrab".to_string() },
+ ));
+
+ world.create_entity((AttackStrength::Strong,));
+ world.create_entity((AttackStrength::Weak,));
+
+ world.step();
+}