1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use grid_2d::Coord; use direction::Direction; pub trait SolidGrid { fn is_solid(&self, coord: Coord) -> Option<bool>; fn is_solid_or_outside(&self, coord: Coord) -> bool { self.is_solid(coord).unwrap_or(true) } } #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum CostCell<Cost> { Solid, Cost(Cost), } impl<Cost> CostCell<Cost> { pub fn is_solid(&self) -> bool { if let &CostCell::Solid = self { true } else { false } } } pub trait CostGrid: SolidGrid { type Cost; fn cost(&self, coord: Coord, direction: Direction) -> Option<CostCell<Self::Cost>>; }