sky_ecs 0.2.0

High-performance typed chunk-based ECS for Rust
Documentation
use sky_ecs::stage::{PostUpdate, StageLabel, Update};
use sky_ecs::World;

#[derive(StageLabel)]
struct BetweenUpdateAndPost;

#[derive(Default)]
struct Trace(Vec<&'static str>);

#[test]
fn derived_stage_labels_preserve_explicit_stage_order() {
    let mut world = World::new();
    world.insert_resource(Trace::default());
    world.stage(Update).add_exclusive(|world: &mut World| {
        world.get_resource_mut::<Trace>().unwrap().0.push("update");
    });
    world
        .insert_stage_after(Update, BetweenUpdateAndPost)
        .unwrap()
        .add_exclusive(|world: &mut World| {
            world.get_resource_mut::<Trace>().unwrap().0.push("between");
        });
    world.stage(PostUpdate).add_exclusive(|world: &mut World| {
        world.get_resource_mut::<Trace>().unwrap().0.push("post");
    });

    world.tick_with_delta(0.016).unwrap();

    assert_eq!(
        world.get_resource::<Trace>().unwrap().0,
        vec!["update", "between", "post"]
    );
}