1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#[macro_export] /// Helper to query for components in the world. We have to give a query variable that will last longer /// than the macro for this to work. /// /// ``` /// use bbecs::query; /// use bbecs::world::{World, ENTITY_ID, WorldMethods, DataWrapper}; /// use bbecs::components::CastComponents; /// /// // creating the world and adding an entity for us to query later /// let mut world = World::new(); /// world.register("size").unwrap(); /// world /// .spawn_entity() /// .unwrap() /// .with_component("size", 15.0_f32) /// .unwrap(); /// /// // Now we are querying for the size and an entity id which is automatically added to all entities /// let query; /// let (sizes, entity_ids) = query!(world, query, "size", ENTITY_ID); /// /// for (index, size) in sizes.iter().enumerate() { /// let size: &DataWrapper<f32> = size.cast().unwrap(); /// let entity_id: &DataWrapper<u32> = entity_ids[index].cast().unwrap(); /// /// assert_eq!(*size.borrow(), 15.0); /// assert_eq!(*entity_id.borrow(), 0); /// } /// ``` macro_rules! query { ($world:expr, $query:expr, $($name:expr),*) => {{ $query = $world.query(vec![$($name,)*]).unwrap(); ( $($query.get($name).unwrap(),)* ) }}; }