12 releases (breaking)
0.9.0 | Aug 29, 2020 |
---|---|
0.7.0 | Aug 27, 2020 |
#1647 in Game dev
28KB
514 lines
Nano-ECS
A bare-bones macro-based Entity-Component-System
- Maximum 64 components per entity
- Stores components sequentially in same array
- Masks for enabled/disabled components
use nano_ecs::*;
#[derive(Clone)]
pub struct Position(pub f32);
#[derive(Clone)]
pub struct Velocity(pub f32);
ecs!{4: Position, Velocity}
fn main() {
let mut world = World::new();
world.push(Position(0.0));
world.push((Position(0.0), Velocity(0.0)));
let dt = 1.0;
system!(world, |pos: &mut Position, vel: &Velocity| {
pos.0 = pos.0 + vel.0 * dt;
});
}
Design
The ecs!
macro generates a World
and Component
object.
Can be used with any Rust data structure that implements Clone
.
The order of declared components is used to assign every component an index. This index is used in the mask per entity and to handle slice memory correctly.
- All components are stored in one array inside
World
. - All entities have a slice refering to components
- All entities have a mask that enable/disable components