game/src/Game.hs

72 lines
1.7 KiB
Haskell

{-# LANGUAGE DeriveGeneric #-}
module Game (
Game(..)
, InitProcess(..)
, State(..)
, 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 = Gender | Name | Skin 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
| Start
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 = Start
}