#ecs #dispatcher #systems #world #parallel #container #part

world_dispatcher

提供完整ECS(实体-组件-系统)的系统部分,以及快速调度器和世界容器

13个版本 (8个稳定版)

1.2.0 2021年5月14日
1.1.2 2021年3月29日
0.100.1 2021年1月4日
0.99.2 2020年12月23日

#514 in 游戏开发

每月48次下载
3 crates 中使用

Apache-2.0

28KB
491

支持开源开发者!♥️

Become a patron

World Dispatcher

完整ECS(实体-组件-系统)的系统部分。

它还包含一个 World 结构,它包含系统使用的游戏数据,以及用于并行和优化顺序执行系统的 Dispatcher

你为什么使用这个ECS库?

  • 与所有平台兼容,包括WASM!
  • 操作速度快,不仅限于迭代。
  • 依赖项最少。
  • 代码体积小。
  • 稳定,已测试,基准测试,100%完成。

用法

将以下内容添加到您的Cargo.toml文件中

world_dispatcher = "*"

使用方法如下

use world_dispatcher::*;
fn main() {
    #[derive(Default)]
    pub struct A;

    let mut world = World::default();

    let sys = (|_comps: &A| Ok(())).system();

    let mut dispatch = DispatcherBuilder::new().add_system(sys).build(&mut world);
    dispatch.run_seq(&world).unwrap();
    dispatch.run_seq(&world).unwrap();
    dispatch.run_seq(&world).unwrap();

    assert!(world.get::<A>().is_ok());
}

大多数函数也可以转换为系统。

这有五个要求

  • 只接受 & 和 &mut 引用作为参数
  • 返回一个 SystemResult
  • 在使用参数中的所有 & 引用之前,使用所有 &mut 引用。
  • 参数中不要重复使用同一类型。
  • 参数中的所有类型都必须实现 Default。如果没有,则使用 &/&mut Option<YourType> 代替。
use world_dispatcher::*;

#[derive(Default)]
pub struct A;
#[derive(Default)]
pub struct B;
#[derive(Default)]
pub struct C;
pub struct D;

fn system_function(_a: &A, _b: &B, _c: &mut C, d: &mut Option<D>) -> SystemResult {
    assert!(d.is_some());
    Ok(())
}

fn main() {
    let mut world = World::default();
    // Will automatically create A, B, C, Option<D>::None inside of world.
    let mut dispatch = DispatcherBuilder::new().add(system_function).build(&mut world);
    // Let's assign a value to D.
    *world.get_mut::<Option<D>>().unwrap() = Some(D);

    dispatch.run_seq(&world).unwrap();
    dispatch.run_seq(&world).unwrap();
    dispatch.run_seq(&world).unwrap();

    assert!(world.get::<Option<D>>().unwrap().is_some());
}

如果您需要超过12个系统参数,有一个名为 big_systems 的功能,可以将该限制提高到22。如果使用它,第一次编译的时间大约为10秒。后续编译将是瞬间的。

维护者信息

  • 维护者:Jojolepro
  • 联系方式:jojolepro [at] jojolepro [dot] com
  • 网站: jojolepro.com
  • Patreon: patreon

依赖项

~0–1MB
~15K SLoC