gecs 0.3.0

A generated entity component system.
Documentation
use gecs::prelude::*;

#[derive(Debug, PartialEq)]
pub struct CompA(pub u32);
#[derive(Debug, PartialEq)]
pub struct CompB(pub u32);
#[derive(Debug, PartialEq)]
pub struct CompC(pub u32);

ecs_world! {
    #[archetype_id(3)]
    ecs_archetype!(
        ArchFoo,
        5,
        CompA,
        CompB,
    );

    ecs_archetype!(
        ArchBar,
        5,
        CompA,
        CompC,
    );
}

#[test]
#[rustfmt::skip]
fn test_one_of_basic() {
    let mut world = EcsWorld::default();

    let entity_a = world.archetype_mut::<ArchFoo>().create((CompA(1), CompB(10)));
    let entity_b = world.archetype_mut::<ArchBar>().create((CompA(1), CompC(10)));

    let mut sum_a = 0;
    let mut sum_b = 0;

    ecs_find!(world, entity_a, |v: &mut OneOf<CompB, CompC>| {
        v.0 += 1;
    });

    ecs_find!(world, entity_b, |v: &mut OneOf<CompB, CompC>| {
        v.0 += 1;
    });

    ecs_iter!(world, |u: &CompA, v: &OneOf<CompB, CompC>| {
        sum_a += u.0;
        sum_b += v.0;
    });

    assert_eq!(sum_a, 2);
    assert_eq!(sum_b, 22);
}