thallium_ecs/
lib.rs

1#![doc = include_str!("../README.md")]
2
3mod app;
4mod commands;
5mod component;
6mod component_container;
7mod entities;
8mod query;
9mod query_parameters;
10mod resource;
11mod system;
12mod system_parameters;
13mod system_set;
14mod resource_container;
15
16pub use app::App;
17pub use commands::Commands;
18pub use component::Component;
19pub use entities::{Entities, Entity};
20pub use query::{Query, Ref, RefMut};
21pub use query_parameters::QueryParameter;
22pub use resource::{Res, ResMut, Resource};
23pub use system::{IntoSystem, System, SystemFunction};
24pub use system_parameters::SystemParameter;
25pub use system_set::SystemSet;
26
27#[cfg(test)]
28mod tests {
29    use crate::{App, Commands, Component, Entities, Query, Ref, RefMut, SystemSet};
30
31    #[test]
32    fn test() {
33        struct TestComponent {
34            value: i32,
35        }
36        impl Component for TestComponent {}
37
38        struct TestComponent2 {
39            value: i32,
40        }
41        impl Component for TestComponent2 {}
42
43        let mut app = App::new();
44
45        let entity1 = app.create_entity();
46        app.add_component(entity1, TestComponent { value: 42 });
47
48        let entity2 = app.create_entity();
49        app.add_component(entity2, TestComponent { value: 44 });
50        app.add_component(entity2, TestComponent2 { value: 0 });
51
52        app.run(|mut q: Query<'_, RefMut<'_, TestComponent>>| {
53            let [mut c1, mut c2] = q.get_many_mut([entity1, entity2]).unwrap();
54            assert_eq!(c1.value, 42);
55            assert_eq!(c2.value, 44);
56            c1.value += 1;
57            c2.value -= 1;
58        });
59
60        let mut set = SystemSet::new();
61        set.register_system(
62            |q1: Query<'_, Ref<'_, TestComponent>>,
63             q2: Query<'_, Option<(Ref<'_, TestComponent2>, Ref<'_, TestComponent>)>>| {
64                for (entity, c) in q1.iter() {
65                    assert_eq!(c.value, 43);
66                    if let Some((c2, c)) = q2.get(entity).unwrap() {
67                        assert_eq!(c2.value, 0);
68                        assert_eq!(c.value, 43);
69                    }
70                }
71            },
72        );
73        app.run(&mut set);
74
75        app.run(|mut commands: Commands<'_>| {
76            commands.create_entity(());
77            commands.create_entity(TestComponent { value: 5 });
78        });
79
80        app.run(
81            |entities: Entities<'_>, q: Query<'_, Ref<'_, TestComponent>>| {
82                assert_eq!(entities.iter().count(), 4);
83                assert_eq!(
84                    entities
85                        .iter()
86                        .filter(|&entity| q.get(entity).is_some())
87                        .count(),
88                    3
89                );
90            },
91        );
92    }
93}