{-# 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 Pokemon (Pokemon) 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 | 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