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