Entity Query
By default, a query will iterate all entities which match the archetype.
However, the query strategy can be changed to only return a single entity, which is useful for queries over a resource entity or player.
#![allow(unused)] fn main() { component! { window_width: f32, window_height: f32, allow_vsync: bool, /// A static entity, which is always alive resources, } Entity::builder() .set(window_width(), 800.0) .set(window_height(), 600.0) .set(allow_vsync(), false) // Since `resources` is static, it is not required to spawn it .append_to(&mut world, resources()) .unwrap(); let mut query = Query::new((window_width(), window_height(), allow_vsync())) // Change the query strategy to only iterate the `resources` entity .entity(resources()); let mut borrow = query.borrow(&world); let (width, height, vsync) = borrow.get().unwrap(); println!("width: {width} height: {height}, vsync: {vsync}"); }
In addition, an entity query can be used in a system
#![allow(unused)] fn main() { let mut window_system = System::builder() .with_query(query) .build(|mut q: EntityBorrow<_>| { if let Ok((width, height, allow_vsync)) = q.get() { println!( "Config changed width: {width}, height: {height}, allow_vsync: {allow_vsync}" ); } else { println!("No config change"); } }); window_system.run(&mut world); window_system.run(&mut world); world.set(resources(), window_height(), 720.0)?; window_system.run(&mut world); }