--{-# LANGUAGE DeriveGeneric #-} --{-# LANGUAGE DeriveAnyClass #-} --{-# LANGUAGE DeriveGeneric #-} --{-# LANGUAGE ScopedTypeVariables #-} --{-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE StrictData #-} {-# LANGUAGE TemplateHaskell #-} --{-# LANGUAGE FlexibleInstances #-} {-# OPTIONS_GHC -fno-warn-orphans #-} {- | WARNING: orphan instances concerning Aeson classes and FGL datatypes have been introduced. The warnings have been disabled. -} module Dodge.Data.PathGraph where import Control.Lens import Data.Aeson import Data.Aeson.TH import Data.Graph.Inductive import Data.Map.Strict (Map) import qualified Data.Set as Set import Geometry.Data data PathGraph = PathGraph { _pgGraph :: Gr Point2 PathEdge , _pgNodeMap :: Map Point2 Int , _pgNodeCount :: Int , _pgEdgeMap :: Map (V2 Point2) PathEdgeNodes } deriving (Eq, Show, Read) --, Generic) data PathEdgeNodes = PathEdgeNodes { _penStart :: Int , _penEnd :: Int , _penPathEdge :: PathEdge } deriving (Eq, Ord, Show, Read) --Generic, Flat) data PathEdge = PathEdge { _peStart :: Point2 , _peEnd :: Point2 , _peDist :: Float , _peObstacles :: Set.Set EdgeObstacle } deriving (Eq, Ord, Show, Read) --Generic, Flat) data EdgeObstacle = BlockObstacle | DoorObstacle | AutoDoorObstacle | WallObstacle deriving (Eq, Ord, Show, Bounded, Enum, Read) --Generic, Flat) --instance (ToJSON a, ToJSON b) => ToJSON (Gr a b) where -- toEncoding = genericToEncoding defaultOptions -- --instance (FromJSON a, FromJSON b) => FromJSON (Gr a b) --deriving instance (Flat (Gr Point2 PathEdge)) makeLenses ''PathGraph makeLenses ''PathEdge makeLenses ''PathEdgeNodes deriveJSON defaultOptions ''EdgeObstacle deriveJSON defaultOptions ''PathEdge deriveJSON defaultOptions ''PathEdgeNodes deriveJSON defaultOptions ''Gr deriveJSON defaultOptions ''PathGraph