Expand description
Easy to use entity component system.
§Overview
- Entity is set of components identified by unique ID.
- Component is struct with data.
- System is behaviour working with components.
All components must implement Component trait:
ⓘ
struct Position {
x : i32
}
impl Component for Position {}
Entity can be created almost everywhere:
ⓘ
let entity = entity_manager.create_entity();
entity.add_component(Position {x : 0, y : 0, z : 0});
entity.add_component(Velocity {x : 1});
entity.refresh();
Simplest system can be created with macro. typically, you will need only process some components, like this:
ⓘ
process_entities!((MoveSystem): |pos: Position, vel: Velocity| => {
pos.x += vel.x;
println!("Moving! position: {}, velocity: {}", pos.x, vel.x);
});
This system now must be added to world like this:
ⓘ
world.set_system(MoveSystem::new());
this macro will be expanded to this:
ⓘ
pub struct MoveSystem;
impl System for MoveSystem {
fn aspect() -> Aspect {
aspect_all![Position, Velocity]
}
fn process_one(&mut self, entity: &mut Entity) {
let mut pos = entity.get_component::<Position>();
let mut vel = entity.get_component::<Velocity>();
pos.x += vel.x;
println!("Moving! position: {}, velocity: {}", pos.x, vel.x);
}
}
Macros§
- aspect_
all - make aspect for all of this types
- register_
system - Create struct and impl System trait for it
- transit_
system - Usefull when you have one component, and want to have another, built on given one. Like this:
Structs§
- Aspect
- data for systems, storing which components they should be intrested in
- Component
Guard - Data
List - list with additional entitiy packs from data aspect
- Entity
- Entity
Manager - part of the world, manipulating entities
- World
- World
Handle - World handle, that will be accesible in system’s process