5个版本 (破坏性)
0.4.0 | 2024年5月28日 |
---|---|
0.3.0 | 2023年9月24日 |
0.2.0 | 2023年9月3日 |
0.1.0 | 2023年1月17日 |
0.0.0 | 2023年1月16日 |
#502 在 游戏开发
每月24次下载
32KB
901 行
checs
实体-组件-系统库。
示例
这是一个如何使用checs
的非常基础的示例。
您可以在examples/basic.rs
中找到此示例。使用以下命令运行它:
cargo run --example basic
定义一些组件和一个World
来存储它们。
注意:组件只是普通的Rust类型。
struct Position { x: u32, y: u32, }
struct Health(i32);
struct Visible;
use checs::component::ComponentVec;
use checs::Storage;
#[derive(Default, Storage)]
struct Storage {
positions: ComponentVec<Position>,
healths: ComponentVec<Health>,
visibles: ComponentVec<Visible>,
}
let mut world = checs::world::World::<Storage>::new();
使用初始组件创建实体。
// Either manually...
let player = world.spawn();
world.insert(player, Position { x: 0, y: 0 });
world.insert(player, Visible);
world.insert(player, Health(80));
// ...or by using the `spawn` macro.
let obstacle = checs::spawn!(world, Position { x: 1, y: 1 }, Visible);
let trap = checs::spawn!(world, Position { x: 2, y: 1 });
let enemy = checs::spawn!(world, Position { x: 1, y: 4 }, Visible, Health(100));
找到具有某些组件的实体。
use checs::iter::LendingIterator;
use checs::query::IntoQuery;
let ps = &world.storage.positions;
let hs = &mut world.storage.healths;
let vs = &world.storage.visibles;
let query = (ps, hs, vs).into_query();
query.for_each(|(e, (p, h, _v))| {
h.0 = h.0 - 17;
println!("{e:?} at ({}, {}) has {} HP.", p.x, p.y, h.0);
});
// Entity(0) is Visible at (0, 0) with 63 HP.
// Entity(3) is Visible at (1, 4) with 83 HP.