{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE StrictData #-} module Dodge.Data.PathGraph where import Geometry.Data import Control.Lens import Data.Graph.Inductive import qualified Data.Set as Set import Data.Map.Strict (Map) data PathGraph = PathGraph { _pgGraph :: Gr Point2 PathEdge , _pgNodeMap :: Map Point2 Int , _pgNodeCount :: Int , _pgEdgeMap :: Map (V2 Point2) (Int,Int,PathEdge) } data PathEdge = PathEdge {_peStart :: Point2 ,_peEnd :: Point2 ,_peDist :: Float ,_peObstacles :: Set.Set EdgeObstacle } deriving (Eq,Ord,Show) data EdgeObstacle = BlockObstacle | DoorObstacle | AutoDoorObstacle | WallObstacle deriving (Eq,Ord,Show,Bounded,Enum) makeLenses ''PathGraph makeLenses ''PathEdge