{-# LANGUAGE DeriveGeneric #-} module Game ( Game(..) , stub ) where import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions) import GHC.Generics (Generic) import Character (Character) import qualified Character (stub) import qualified Area (Key) data Position = Position { area :: Area.Key , x :: Int , y :: Int } 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 InitProcess = Name | Gender | OpponentsName deriving (Generic) instance ToJSON InitProcess where toEncoding = genericToEncoding defaultOptions instance FromJSON InitProcess where parseJSON = genericParseJSON defaultOptions data State = At Position | Fighting { at :: Position , opponent :: Character , turn :: Turn } | Initializing InitProcess deriving (Generic) instance ToJSON State where toEncoding = genericToEncoding defaultOptions instance FromJSON State where parseJSON = genericParseJSON defaultOptions data Game = Game { character :: Character , state :: State } deriving (Generic) instance ToJSON Game where toEncoding = genericToEncoding defaultOptions instance FromJSON Game where parseJSON = genericParseJSON defaultOptions stub :: Game stub = Game { character = Character.stub , state = Initializing Name }