6 个稳定版本
1.0.5 | 2019 年 12 月 8 日 |
---|---|
1.0.0 | 2019 年 12 月 7 日 |
#1270 在 算法
180KB
216 行
瓦片波函数坍缩
此库包含辅助函数,用于在基于瓦片的地图上使用由 wfc
包提供的波函数坍缩算法。
您可以加载类似于从 Tiled 导出的层 CSV 文件,并将结果另存为 CSV 或作为 Tiled .tmx 文件进行预览。
由于底层库仅适用于二维,因此不支持多个层。
入门指南
该包在 examples/
文件夹下包含带注释的示例程序。
simple
示例接受 CSV 瓦片地图作为其唯一参数,并将 wfc 的输出保存为 CSV 以及 .tmx 文件。
您可以使用以下命令运行它
cargo run --example=simple examples\input.csv examples\tset.png
(对于非 Windows 环境,请替换斜杠)
这将生成 out.tmx
和 out.csv
,其中包含 32x32 瓦片的 WFC 输出。
代码
为了方便,我在这里提供了与示例程序等价的代码
let input_path = "example\\input.csv";
let tilesheet_path = "example\\tset.png";
let attempts = 1000;
let pattern_size = 2;
let output_size = Size::new(32, 32);
// Extract patterns from input
let pattern = TilePattern::from_csv(input_path,
std::num::NonZeroU32::new(pattern_size).unwrap(),
&[Orientation::Original])
.expect("Error while creating pattern");
// Run Wave Function Collapse
let grid = pattern.run_collapse(output_size,
attempts,
WrapXY,
ForbidNothing,
&mut rand::thread_rng())
.expect("Error in WFC");
// Save as CSV
grid_to_csv(&grid, "out.csv")?;
// Save as Tiled .tmx file
let tset = TileSet {
image_path: tilesheet_path,
image_size: Size::new(256, 1450),
columns: 8,
tile_count: 360,
tile_size: Size::new(32, 32)
};
grid_to_tiled(&grid, "out.tmx", tset)?;
这假设您已导入必要的库
use wfc_tiled::*;
锚定
anchor
示例展示了如何防止输出在地图边缘缠绕。
它与 wfc-image
包中同名示例类似。
您可以使用以下命令运行它
cargo run --example=anchor examples\input.csv examples\tset.png
程序使用 Forbid
规则,强制输出的右侧和底部边框等于输入的右下角。由于系统自动自动缠绕边缘,因此这相当于强制输出被由输入的右下角瓦片组成的“墙”所包围。
您可以通过查看 src/forbid_corner.rs
来了解如何构建自己的禁止规则。这些规则可以强制 wfc
仅允许在特定坐标的输出中允许某些白名单瓦片,或者仅在特定坐标禁止某些黑名单瓦片。
示例中使用的 ForceBorderForbid
将右下角的瓦片设置为每个对应于输出底部和右侧边界的坐标的唯一允许瓦片。
依赖关系
~16MB
~110K SLoC