use bevy::prelude::*;
use bevy_kindly::*;
#[derive(EntityKind)]
#[default_components(Friends)]
#[bundle(PersonBundle)]
struct Person(Entity);
#[derive(Bundle)]
struct PersonBundle {
name: Name,
age: Age,
agent: KindBundle<Agent>,
}
#[derive(Component, Default)]
struct Friends(Vec<Person>);
#[derive(Component, Clone)]
struct Age(u32);
#[derive(Debug, EntityKind)]
#[default_components(Position)]
#[components(Speed, Clearance)]
struct Agent(Entity);
#[derive(Component)]
struct Speed(f64);
#[derive(Component)]
struct Clearance(usize);
#[derive(Component, Default, Debug)]
struct Position(Vec2);
fn main() {
let mut world = World::default();
let entity = world
.spawn(KindBundle::<Person>::new(PersonBundle {
name: "Alice".into(),
age: Age(25),
agent: KindBundle::<Agent>::new((Speed(10.0), Clearance(2))),
})).id();
assert!(world.entity(entity).try_with_kind::<Person>().is_some());
assert!(world.entity(entity).try_with_kind::<Agent>().is_some());
assert!(world.entity(entity).contains::<Friends>());
assert!(world.entity(entity).contains::<Name>());
assert!(world.entity(entity).contains::<Age>());
assert!(world.entity(entity).contains::<Position>());
assert!(world.entity(entity).contains::<Speed>());
assert!(world.entity(entity).contains::<Clearance>());
}