legion 0.4.0

High performance entity component system (ECS) library
Documentation
use legion::*;
use world::SubWorld;

#[test]
#[cfg(feature = "codegen")]
fn basic_system() {
    #[system]
    fn hello_world() {
        println!("hello world");
    }

    let mut world = World::default();
    let mut schedule = Schedule::builder().add_system(hello_world_system()).build();

    schedule.execute(&mut world, &mut Resources::default());
}

#[test]
#[cfg(feature = "codegen")]
fn for_each_system() {
    #[system(for_each)]
    fn sum(component: &usize, #[resource] total: &mut usize) {
        *total += component;
    }

    let mut world = World::default();
    world.extend(vec![(1usize, true), (2usize, false), (3usize, true)]);

    let mut resources = Resources::default();
    resources.insert(0usize);

    let mut schedule = Schedule::builder().add_system(sum_system()).build();

    schedule.execute(&mut world, &mut resources);
    assert_eq!(*resources.get::<usize>().unwrap(), 6usize);
}

#[test]
#[cfg(feature = "codegen")]
fn query_get() {
    type State = Entity;

    #[system]
    #[read_component(f32)]
    #[read_component(f64)]
    fn sys(world: &mut SubWorld, #[state] entity: &State) {
        let mut query = <(&f32, &f64)>::query();
        let _ = query.get_mut(world, *entity);
    }

    let mut world = World::default();
    let entity = world.push(());

    let mut schedule = Schedule::builder().add_system(sys_system(entity)).build();

    let mut resources = Resources::default();

    schedule.execute(&mut world, &mut resources);
}