#micro #ldtk #rule #tile #output #autotile #autotiling

micro_autotile

LDTK 自动平铺算法的 Rust 实现

1 个不稳定版本

0.1.0 2023年4月17日

#9 in #ldtk


用于 micro_ldtk

Apache-2.0

26KB
287

Micro Autotile

https://crates.io/crates/micro_autotile https://docs.rs/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 的文档中将会假定这一点。

首先,确定你的输入类型和输出类型 - 在这个例子中,我们将使用整数来定义输入类型的地形类型(墙壁、地面、水等),输出将是某个理论精灵图集中的特定精灵索引。

  1. 创建一个或多个规则,定义要匹配的图案、要输出的值,以及可选的该规则被选中的百分比概率。

    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);
    
  2. (可选) 将你的规则组合成一个规则集。这可以跳过,直接使用规则结构体

    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;
    
  3. 在别处,生成一个包含在 TileLayout 结构体中的级别数据切片。这代表单个贴图(中心元素)及其周围邻居。邻居的顺序很重要,布局方式就像是在一个扁平的网格中。

    use micro_autotile::TileLayout;
    let layout = TileLayout::filled([
      GROUND, GROUND, GROUND,
      GROUND, WALL, GROUND,
      GROUND, GROUND, GROUND,
    ]);
    
  4. 使用规则集或规则直接(存在相同的方法)生成输出

    let output = combined_rules.resolve_match(&layout);
    assert_eq!(output, Some(35));
    

依赖项