game/src/Game.hs

68 lines
1.6 KiB
Haskell

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