{-# 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
