shipyard 0.5.0

Entity Component System
Documentation
use shipyard::*;

#[test]
fn no_pack() {
    let world = World::new();

    world
        .run(|mut entities: EntitiesViewMut, mut u32s: ViewMut<u32>| {
            let entity0 = entities.add_entity(&mut u32s, 0);
            let entity1 = entities.add_entity(&mut u32s, 1);

            u32s.apply_mut(entity0, entity1, core::mem::swap);

            assert_eq!(u32s[entity0], 1);
            assert_eq!(u32s[entity1], 0);
        })
        .unwrap();
}

#[test]
fn update() {
    let world = World::new();

    world
        .run(|mut entities: EntitiesViewMut, mut u32s: ViewMut<u32>| {
            u32s.track_all();

            let entity0 = entities.add_entity(&mut u32s, 0);

            u32s.clear_all_inserted();

            let entity1 = entities.add_entity(&mut u32s, 1);

            u32s.apply_mut(entity0, entity1, core::mem::swap);

            assert_eq!(u32s[entity0], 1);
            assert_eq!(u32s[entity1], 0);

            let mut inserted = u32s.inserted().iter();
            assert_eq!(inserted.next(), Some(&0));
            assert_eq!(inserted.next(), None);

            let mut modified = u32s.modified().iter();
            assert_eq!(modified.next(), Some(&1));
            assert_eq!(modified.next(), None);
        })
        .unwrap();
}