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}