game/src/Game.hs

67 lines
1.5 KiB
Haskell

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