#ecs #advanced-research #nano #tiny #macro

advancedresearch-nano_ecs

基于宏的裸骨实体-组件-系统

12个版本 (破坏性)

0.9.0 2020年8月29日
0.7.0 2020年8月27日

#952 in 游戏开发

每月21次下载

MIT/Apache

28KB
514

Nano-ECS

基于宏的裸骨实体-组件-系统

  • 每个实体最多64个组件
  • 在相同的数组中顺序存储组件
  • 启用/禁用组件的掩码
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;
    });
}

设计

ecs!宏生成一个World和一个Component对象。

可以与实现Clone的任何Rust数据结构一起使用。

声明的组件的顺序用于为每个组件分配一个索引。这个索引用于每个实体的掩码以及正确处理切片内存。

  • 所有组件都存储在World内部的一个数组中。
  • 所有实体都有一个指向组件的切片
  • 所有实体都有一个启用/禁用组件的掩码

无运行时依赖