use flecs::*;
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct Attack {
value: f32,
}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct Defense {
value: f32,
}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct FreightCapacity {
value: f32,
}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct ImpulseSpeed {
value: f32,
}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct HasFTL {}
#[derive(Copy, Clone, Default, Debug, PartialEq)]
struct Position {
x: f32,
y: f32,
}
fn main() {
println!("Entity Prefabs starting...");
let mut world = World::new();
world.component::<Attack>();
world.component::<Defense>();
world.component::<FreightCapacity>();
world.component::<ImpulseSpeed>();
world.component::<HasFTL>();
world.component::<Position>();
let spaceship = world
.prefab("Spaceship")
.set(ImpulseSpeed { value: 50.0 })
.set(Defense { value: 50.0 })
.override_component::<Position>();
let freighter = world
.prefab("Freighter")
.is_a(spaceship)
.add::<HasFTL>()
.set(FreightCapacity { value: 100.0 })
.set(Defense { value: 100.0 });
let mammoth_freighter = world
.prefab("MammothFreighter")
.is_a(freighter)
.set(FreightCapacity { value: 500.0 })
.set(Defense { value: 300.0 });
world
.prefab("Frigate")
.is_a(spaceship)
.add::<HasFTL>()
.set(Attack { value: 100.0 })
.set(Defense { value: 75.0 })
.set(ImpulseSpeed { value: 125.0 });
let inst = world.entity().named("my_mammoth_freighter").is_a(mammoth_freighter);
inst.set(Position { x: 10.0, y: 200.0 });
println!("Instance type: [{}]", inst.type_info().to_str());
let speed = inst.get::<ImpulseSpeed>();
println!("Impulse speed: {}", speed.value);
world.filter::<(ImpulseSpeed, Position)>().each(|e: Entity, (_is, p)| {
println!("{}: {{ {}, {} }}", e.name(), p.x, p.y);
});
}
#[cfg(test)]
mod tests {
#[test]
fn flecs_entity_prefabs() {
super::main();
}
}