1 个不稳定版本
0.1.0 | 2023年4月17日 |
---|
#9 in #ldtk
用于 micro_ldtk
26KB
287 行
Micro Autotile
将 LDTK 的自动平铺功能带到你的 Rust 项目中
micro_autotile
提供了 LDTK 自动平铺算法的实现,用于程序运行时使用。其表示方式与 LDTK 保存的兼容,这意味着可以直接从 LDTK JSON 导出中加载定义。非常适合在项目中构建兼容的编辑器,或者使用 LDTK 的规则格式来装饰生成的内容。
安装
将其添加到你的 Cargo.toml
依赖项中
[dependencies]
micro_autotile = "0.1"
或使用 cargo 将其添加到你的项目中
cargo add micro_autotile
使用方法
有关更详细的用法说明,请参阅 docs.rs 页面
自动平铺本质上是一种将二维图案映射到单个标量值的方法。通常情况下,这个上下文是视频游戏中的“贴图地图”,尽管这并非唯一用途,但在 micro_autotile
的文档中将会假定这一点。
首先,确定你的输入类型和输出类型 - 在这个例子中,我们将使用整数来定义输入类型的地形类型(墙壁、地面、水等),输出将是某个理论精灵图集中的特定精灵索引。
-
创建一个或多个规则,定义要匹配的图案、要输出的值,以及可选的该规则被选中的百分比概率。
use micro_autotile::AutoTileRule; const GROUND: usize = 0; const WALL: usize = 1; let alt_ground_rule = AutoTileRule::single_any_chance(GROUND, vec![123, 124, 125], 0.2); let fallback_ground_rule = AutoTileRule::exact(GROUND, 126);
-
(可选) 将你的规则组合成一个规则集。这可以跳过,直接使用规则结构体
use micro_autotile::{AutoRuleSet, AutoTileRule}; let ground_rules = AutoRuleSet::new(vec![alt_ground_rule, fallback_ground_rule]); let wall_rules = AutoTileRule::exact(WALL, 35).into(); let combined_rules = wall_rules + ground_rules;
-
在别处,生成一个包含在
TileLayout
结构体中的级别数据切片。这代表单个贴图(中心元素)及其周围邻居。邻居的顺序很重要,布局方式就像是在一个扁平的网格中。use micro_autotile::TileLayout; let layout = TileLayout::filled([ GROUND, GROUND, GROUND, GROUND, WALL, GROUND, GROUND, GROUND, GROUND, ]);
-
使用规则集或规则直接(存在相同的方法)生成输出
let output = combined_rules.resolve_match(&layout); assert_eq!(output, Some(35));