Expand description
§WFC管理器模块
本模块提供了WFC(Wave Function Collapse)算法的完整实现,是对原C++代码的Rust重写版本。
§核心组件
WfcManager- WFC算法管理器,对应原C++的WFCManager类CellState- 单元格状态枚举CellWfcData- 单元格WFC附加数据WfcConfig- WFC算法配置参数
§设计特点
§与原C++的完整对应
本实现完全保持了与原C++代码的逻辑一致性:
- 相同的算法流程:坍塌→传播→冲突处理
- 相同的数据结构:State枚举、CellwfcData结构、WFCSystemData映射
- 相同的冲突处理:分层修复方法,非传统WFC回溯
§Rust特有改进
- 类型安全:使用强类型和Result类型避免运行时错误
- 内存安全:自动内存管理,无手动释放
- 错误处理:完整的错误类型系统
- trait抽象:初始化和瓷砖集使用trait实现多态
§使用示例
use rlwfc::{WfcManager, GridSystem, TileSetVirtual, WfcInitializer, WfcError, Tile, TileId, GridError};
// 创建简单的瓷砖集
struct MyTileSet;
impl TileSetVirtual<i32> for MyTileSet {
fn build_tile_set(&mut self) -> Result<(), GridError> { Ok(()) }
fn judge_possibility(&self, _: &[Vec<TileId>], _: TileId) -> bool { true }
fn get_tile(&self, _: TileId) -> Option<&Tile<i32>> { None }
fn get_tile_count(&self) -> usize { 0 }
fn get_all_tile_ids(&self) -> Vec<TileId> { vec![] }
}
// 实现初始化器
struct MyInitializer;
impl<EdgeData> WfcInitializer<EdgeData> for MyInitializer
where EdgeData: Clone + PartialEq + std::fmt::Debug + Send + Sync
{
fn initialize(&mut self, manager: &mut WfcManager<EdgeData>) -> Result<(), WfcError> {
// 初始化逻辑
Ok(())
}
}
// 使用WFC系统
let grid = GridSystem::new();
let tile_set = Box::new(MyTileSet);
let mut manager = WfcManager::new(grid, tile_set).unwrap();
let mut initializer = MyInitializer;
manager.initialize_with(&mut initializer).unwrap();
// 运行WFC算法
manager.run().unwrap();Structs§
- Cell
WfcData - 单元格WFC附加数据,对应C++的CellwfcData
- Default
Initializer - 默认初始化器
- System
Snapshot - 系统状态快照,用于回溯
- WfcConfig
- WFC算法配置参数
- WfcManager
- WFC算法管理器,对应C++的WFCManager模板类
Enums§
- Cell
State - WFC单元格状态,对应C++的State枚举
- Step
Result - 单步执行结果
- WfcError
- WFC算法特定错误类型
Traits§
- WfcInitializer
- 初始化特性,对应C++的initialize()虚函数
Type Aliases§
- WfcSystem
Data - WFC系统完整状态,对应C++的WFCSystemData