3个不稳定版本
0.1.1 | 2023年11月23日 |
---|---|
0.1.0 | 2023年11月23日 |
0.0.1-dev | 2023年11月3日 |
#1418 in 算法
71KB
1.5K SLoC
这是一个通用的网格实体库,旨在支持瓦片地图库或其他需要以网格方式访问实体的库,它基于aery
关系包构建。目标是尽可能保持API表面简洁直观,并尽可能避免延迟操作/状态,以便使结构更直观地工作(例如:在一个系统中进行的更新应该被后续的系统看到,而不是下一个帧。)
特性
目前,bevy_cells
支持以下功能
- 自动分块(包括对块实体的访问)
- 自动创建地图
- 块和地图的分层销毁
- 支持n维地图
- 基于地图的查询
- 空间查询
- 批量操作以提高大型单元格或块组的性能
即将推出的特性
- 自动处理分层删除(通过aery支持或直接在本包中支持)
- 根据块和地图对内存中的单元格进行排序(将需要未来的Bevy API添加)
API
基本API围绕CellQuery
、CellCommands
和CellMapLabel
展开,如下所示。
struct GameLayer;
impl CellMapLabel for GameLayer {
const CHUNK_SIZE: usize = 16;
}
fn move_character(
keyboard_input: Res<Input<KeyCode>>,
mut commands: Commands,
character: CellQuery<GameLayer, CellCoord, With<Character>>,
walls: CellQuery<GameLayer, (), With<Block>>,
) {
let mut cell_commands = commands.cells::<GameLayer, 2>();
let mut x = if keyboard_input.just_pressed(KeyCode::A) {
-1
} else {
0
};
x += if keyboard_input.just_pressed(KeyCode::D) {
1
} else {
0
};
let char_c = character.single();
let new_coord = [char_c[0] + x, char_c[1] + y];
if walls.get_at(new_coord).is_none() {
cell_commands.move_cell(*char_c, new_coord);
}
}
更多示例可以在示例文件夹中找到!
版本
Bevy版本 | bevy_cells版本 |
---|---|
0.12 | 0.1 |
0.11 | 0.1-dev |
依赖项
~24MB
~447K SLoC