From e1a555ea02c025e13a56b316314de84855ef6d5c Mon Sep 17 00:00:00 2001 From: justin Date: Fri, 19 Aug 2022 11:51:49 +0100 Subject: [PATCH] Make CWorld a member of Store --- src/Dodge/Data/CWorld.hs | 6 ++-- src/Dodge/Data/PathGraph.hs | 67 +++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/Dodge/Data/CWorld.hs b/src/Dodge/Data/CWorld.hs index a87f727d4..4300cf110 100644 --- a/src/Dodge/Data/CWorld.hs +++ b/src/Dodge/Data/CWorld.hs @@ -221,6 +221,6 @@ makeLenses ''WorldBeams makeLenses ''CWCam makeLenses ''CWGen makeLenses ''CWTime --- $($(derive [d| --- instance Deriving (Store CWorld) --- |])) +$($(derive [d| + instance Deriving (Store CWorld) + |])) diff --git a/src/Dodge/Data/PathGraph.hs b/src/Dodge/Data/PathGraph.hs index f0d21b2b3..f81fb96e7 100644 --- a/src/Dodge/Data/PathGraph.hs +++ b/src/Dodge/Data/PathGraph.hs @@ -1,50 +1,73 @@ {-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StrictData #-} +{-# LANGUAGE TemplateHaskell #-} {-# 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 GHC.Generics -import Data.Aeson -import Geometry.Data + import Control.Lens +import Data.Aeson import Data.Graph.Inductive -import qualified Data.Set as Set import Data.Map.Strict (Map) +import qualified Data.Set as Set +import Data.Store +import GHC.Generics +import Geometry.Data +import TH.Derive + data PathGraph = PathGraph - { _pgGraph :: Gr Point2 PathEdge - , _pgNodeMap :: Map Point2 Int - , _pgNodeCount :: Int - , _pgEdgeMap :: Map (V2 Point2) (Int,Int,PathEdge) + { _pgGraph :: Gr Point2 PathEdge + , _pgNodeMap :: Map Point2 Int + , _pgNodeCount :: Int + , _pgEdgeMap :: Map (V2 Point2) (Int, Int, PathEdge) } - deriving (Eq,Show,Read,Generic) -instance ToJSON PathGraph where + deriving (Eq, Show, Read, Generic) + +instance ToJSON PathGraph where toEncoding = genericToEncoding defaultOptions -instance FromJSON PathGraph + +instance FromJSON PathGraph + data PathEdge = PathEdge - {_peStart :: Point2 - ,_peEnd :: Point2 - ,_peDist :: Float - ,_peObstacles :: Set.Set EdgeObstacle + { _peStart :: Point2 + , _peEnd :: Point2 + , _peDist :: Float + , _peObstacles :: Set.Set EdgeObstacle } - deriving (Eq,Ord,Show,Read,Generic) -instance ToJSON PathEdge where + deriving (Eq, Ord, Show, Read, Generic) + +instance ToJSON PathEdge where toEncoding = genericToEncoding defaultOptions -instance FromJSON PathEdge + +instance FromJSON PathEdge + data EdgeObstacle = BlockObstacle | DoorObstacle | AutoDoorObstacle | WallObstacle - deriving (Eq,Ord,Show,Read,Bounded,Enum,Generic) + deriving (Eq, Ord, Show, Read, Bounded, Enum, Generic) + instance ToJSON EdgeObstacle where toEncoding = genericToEncoding defaultOptions + instance FromJSON EdgeObstacle -instance (ToJSON a,ToJSON b) => ToJSON (Gr a b) where + +instance (ToJSON a, ToJSON b) => ToJSON (Gr a b) where toEncoding = genericToEncoding defaultOptions -instance (FromJSON a,FromJSON b) => FromJSON (Gr a b) + +instance (FromJSON a, FromJSON b) => FromJSON (Gr a b) + makeLenses ''PathGraph makeLenses ''PathEdge +$( $( derive + [d| + instance Store a => Deriving (Store (Gr a)) + |] + ) + )