summaryrefslogtreecommitdiff
path: root/ecs/examples/with_local.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2024-02-21 23:54:37 +0100
committerHampusM <hampus@hampusmat.com>2024-02-22 19:27:52 +0100
commit9f65dba3afd4e8f20881914fc86fa997cb64a13d (patch)
treed760f8f478af6591648ef3f53d4e0cb34ee76908 /ecs/examples/with_local.rs
parentb0ef7f2cf8787c5732e0eb5554161ad75179a4b3 (diff)
feat(ecs): add support for system local components
Diffstat (limited to 'ecs/examples/with_local.rs')
-rw-r--r--ecs/examples/with_local.rs76
1 files changed, 76 insertions, 0 deletions
diff --git a/ecs/examples/with_local.rs b/ecs/examples/with_local.rs
new file mode 100644
index 0000000..d7af0e0
--- /dev/null
+++ b/ecs/examples/with_local.rs
@@ -0,0 +1,76 @@
+use ecs::component::Local;
+use ecs::system::{Into, System};
+use ecs::{Query, World};
+
+struct SomeData
+{
+ num: u64,
+}
+
+struct Name
+{
+ name: String,
+}
+
+struct SayHelloState
+{
+ cnt: usize,
+}
+
+fn say_hello(mut query: Query<(SomeData, String)>, mut state: Local<SayHelloState>)
+{
+ for (data, text) in query.iter_mut() {
+ println!("Hello there. Count {}: {}: {}", state.cnt, text, data.num);
+
+ state.cnt += 1;
+ }
+}
+
+fn say_whats_up(mut query: Query<(SomeData, Name)>, mut state: Local<SayHelloState>)
+{
+ for (data, name) in query.iter_mut() {
+ println!(
+ "Whats up, {}. Number is {}. Count {}",
+ name.name, data.num, state.cnt
+ );
+
+ state.cnt += 1;
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Hash)]
+enum Event
+{
+ Update,
+}
+
+fn main()
+{
+ let mut world = World::<Event>::new();
+
+ world.register_system(
+ Event::Update,
+ say_hello.into_system().initialize(SayHelloState { cnt: 0 }),
+ );
+
+ world.register_system(
+ Event::Update,
+ say_whats_up
+ .into_system()
+ .initialize(SayHelloState { cnt: 0 }),
+ );
+
+ world.create_entity((
+ SomeData { num: 987_654 },
+ "Yoo".to_string(),
+ Name { name: "Bob".to_string() },
+ ));
+
+ world.create_entity((SomeData { num: 345 }, "Haha".to_string()));
+
+ world.emit(&Event::Update);
+
+ println!("Haha");
+
+ world.emit(&Event::Update);
+}