game_pathfinding 0.1.3

一个寻路库,包含AStar和Recast,目前还在开发阶段
Documentation
use game_pathfinding::map::MapManager;
use std::time::Instant;
use tokio::fs::File;
use tokio::io::AsyncReadExt;

#[tokio::main]
async fn main(){


    // 打开文件
    let mut file = File::open("./World.json").await.unwrap();

    // 创建一个缓冲区来存储文件内容
    let mut buffer = String::new();

    // 通过异步读取文件内容到缓冲区
    file.read_to_string(&mut buffer).await.unwrap();

    let map = MapManager::get_instance();
    let map_id = map.write().unwrap().new_astar().await;

    if let Err(err) = map
        .write()
        .unwrap()
        .load_from_string(&map_id, buffer)
        .await
    {
        println!("{}", err);
        return;
    }

    let begin = Instant::now();

    let result = map.read().unwrap().find_path(&map_id, (1, 0), (14, 15));
    match result {
        Ok(ref v) => {
            let end = Instant::now();
            println!("寻路结果: ");
            for x in v.into_iter() {
                println!("{}, {}", x.0, x.1);
            }
            println!("Use: {:?}", end - begin);
        }
        Err(e) => println!("{}", e),
    }
}