Skip to main content

Module wfc_manager

Module wfc_manager 

Source
Expand description

§WFC管理器模块

本模块提供了WFC(Wave Function Collapse)算法的完整实现,是对原C++代码的Rust重写版本。

§核心组件

§设计特点

§与原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§

CellWfcData
单元格WFC附加数据,对应C++的CellwfcData
DefaultInitializer
默认初始化器
SystemSnapshot
系统状态快照,用于回溯
WfcConfig
WFC算法配置参数
WfcManager
WFC算法管理器,对应C++的WFCManager模板类

Enums§

CellState
WFC单元格状态,对应C++的State枚举
StepResult
单步执行结果
WfcError
WFC算法特定错误类型

Traits§

WfcInitializer
初始化特性,对应C++的initialize()虚函数

Type Aliases§

WfcSystemData
WFC系统完整状态,对应C++的WFCSystemData