10个版本
0.3.1 | 2022年3月22日 |
---|---|
0.3.0 | 2020年8月13日 |
0.2.0 | 2019年11月15日 |
0.1.6 | 2019年1月16日 |
0.1.1 | 2018年10月15日 |
#715 in 游戏开发
每月186次下载
在 5 个Crate中使用(4个直接使用)5
44KB
895 代码行
DCES
DCES是一个提供实体组件系统变体的库:https://en.wikipedia.org/wiki/Entity–component–system。
DCES的目标是创建一个轻量级的ECS库,无依赖项,用于UI框架和游戏引擎。它作为OrbTk的一部分开发,OrbTk是一个用Rust编写的(G)UI框架。OrbTk的所有小部件和属性都由DCES处理。
特性
- 使用组件注册实体
- 在实体之间共享组件
- 注册系统并读取/写入实体的组件
- 按优先级排序系统执行
- 注册实体组织容器(Vec、FxHashMap、自定义容器等)
- 注册初始化和清理系统
用法
要将DCES包含到您的项目中,只需将依赖项行添加到您的Cargo.toml
文件中
dces = "0.3"
要使用DCES主版本,只需将依赖项行添加到您的Cargo.toml
文件中
dces = { git = https://gitlab.redox-os.org/redox-os/dces-rust.git }
示例
use dces::prelude::*;
#[derive(Default)]
struct Name {
value: String,
}
struct PrintSystem;
impl System<EntityStore, ComponentStore> for PrintSystem {
fn run(&self, ecm: &mut EntityComponentManager<EntityStore, ComponentStore>) {
let (e_store, c_store) = ecm.stores();
for entity in &e_store.inner {
if let Ok(comp) = c_store.get::<Name>(*entity) {
println!("{}", comp.value);
}
}
}
}
fn main() {
let mut world = World::<EntityStore, ComponentStore>::new();
world
.create_entity()
.components(
ComponentBuilder::new()
.with(Name {
value: String::from("DCES"),
})
.build(),
)
.build();
world.create_system(PrintSystem).build();
world.run();
}
您可以在examples/
目录中找到更多示例。
您可以通过执行以下命令启动basic
示例
cargo run --example basic
构建和运行文档
您可以通过执行以下命令构建和运行最新文档
cargo doc --no-deps --open
未来特性
- 具有相同优先级的系统并发
- 高级示例
- 书籍
灵感
常见问题解答
为什么不使用Specs?
因为DCES是为满足OrbTk的要求而开发的。为了减少OrbTk的依赖项树,DCES依赖于零个Crate。
许可
在MIT许可证下发布(LICENSE)。
依赖项
~135KB