47 lines
1.2 KiB
Haskell
47 lines
1.2 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
module Area.Tile (
|
|
Content(..)
|
|
, Terrain(..)
|
|
, Tile(..)
|
|
) where
|
|
|
|
import Data.Aeson (ToJSON(..), FromJSON(..), genericToEncoding, genericParseJSON, defaultOptions)
|
|
import GHC.Generics (Generic)
|
|
import Area.NaturalElements (NaturalElements)
|
|
import Area.Climate (Climate)
|
|
import qualified Character (Key)
|
|
import qualified Item (Key)
|
|
import qualified Pokemon (T)
|
|
|
|
data Terrain = Normal | Water deriving (Generic)
|
|
|
|
instance ToJSON Terrain where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Terrain where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data Content =
|
|
Empty
|
|
| Item Item.Key
|
|
| Character Character.Key
|
|
| Pokemon Pokemon.T
|
|
| NaturalElements NaturalElements
|
|
deriving (Generic)
|
|
|
|
instance ToJSON Content where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Content where
|
|
parseJSON = genericParseJSON defaultOptions
|
|
|
|
data Tile = Tile {
|
|
terrain :: Terrain
|
|
, skin :: FilePath
|
|
, content :: Content
|
|
, climate :: Climate
|
|
} deriving (Generic)
|
|
|
|
instance ToJSON Tile where
|
|
toEncoding = genericToEncoding defaultOptions
|
|
instance FromJSON Tile where
|
|
parseJSON = genericParseJSON defaultOptions
|