oxygengine-navigation 0.46.1

Navigation module for Oxygengine
Documentation
use crate::resources::{NavGrid, NavResult};
use bincode::deserialize;
use core::assets::protocol::{AssetLoadResult, AssetProtocol};
use serde::{Deserialize, Serialize};

#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct NavGridAsset {
    cols: usize,
    rows: usize,
    cells: Vec<bool>,
}

impl NavGridAsset {
    pub fn cols(&self) -> usize {
        self.cols
    }

    pub fn rows(&self) -> usize {
        self.rows
    }

    pub fn cells(&self) -> &[bool] {
        &self.cells
    }

    pub fn build_nav_grid(&self) -> NavResult<NavGrid> {
        NavGrid::new(self.cols, self.rows, self.cells.clone())
    }
}

pub struct NavGridAssetProtocol;

impl AssetProtocol for NavGridAssetProtocol {
    fn name(&self) -> &str {
        "navgrid"
    }

    fn on_load(&mut self, data: Vec<u8>) -> AssetLoadResult {
        match deserialize::<NavGridAsset>(&data) {
            Ok(asset) => AssetLoadResult::Data(Box::new(asset)),
            Err(error) => {
                AssetLoadResult::Error(format!("Error loading navgrid asset: {:?}", error))
            }
        }
    }
}