{-# LANGUAGE DeriveGeneric #-} module Game ( Direction(..) , Game(..) , Position(..) , State(..) ) where import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions) import GHC.Generics (Generic) import Character (Character) import qualified Area (Key) data Direction = N | S | E | W deriving (Eq, Generic) instance ToJSON Direction where toEncoding = genericToEncoding defaultOptions instance FromJSON Direction where parseJSON = genericParseJSON defaultOptions data Position = Position { area :: Area.Key , x :: Int , y :: Int , direction :: Direction } deriving (Generic) instance ToJSON Position where toEncoding = genericToEncoding defaultOptions instance FromJSON Position where parseJSON = genericParseJSON defaultOptions data Turn = Player | Opponent deriving (Generic) instance ToJSON Turn where toEncoding = genericToEncoding defaultOptions instance FromJSON Turn where parseJSON = genericParseJSON defaultOptions data State = At Position | Fighting { at :: Position , opponent :: Character , turn :: Turn } deriving (Generic) instance ToJSON State where toEncoding = genericToEncoding defaultOptions instance FromJSON State where parseJSON = genericParseJSON defaultOptions data Game = Empty | Game { character :: Character , state :: State } deriving (Generic) instance ToJSON Game where toEncoding = genericToEncoding defaultOptions instance FromJSON Game where parseJSON = genericParseJSON defaultOptions