# 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 ```rust 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