module Codec.Tiled.Map ( Map(..) , empty , pattern ORTHOGONAL , pattern ISOMETRIC , pattern STAGGERED , pattern HEXAGONAL ) where import Codec.Tiled.Aeson (FromJSON(..), ToJSON(..), genericParseJSON, genericToJSON) import Data.Text (Text) import Data.Vector (Vector) import GHC.Generics (Generic) import Codec.Tiled.Layer (Layer) import Codec.Tiled.Property (Property) import Codec.Tiled.Tileset.Ref (TilesetRef) data Map = Map { backgroundColor :: Maybe Text -- ^ Hex-formatted color (#RRGGBB or #AARRGGBB) (optional) , compressionLevel :: Maybe Int -- ^ The compression level to use for tile layer data (defaults to -1, which means to use the algorithm default) , height :: Int -- ^ Number of tile rows , hexSideLength :: Maybe Int -- ^ Length of the side of a hex tile in pixels (hexagonal maps only) , infinite :: Maybe Bool -- ^ Whether the map has infinite dimensions , layers :: Vector Layer -- ^ Array of Layers , nextLayerId :: Int -- ^ Auto-increments for each layer , nextObjectId :: Int -- ^ Auto-increments for each placed object , orientation :: Text -- ^ @orthogonal@, @isometric@, @staggered@ or @hexagonal@ , parallaxOriginX :: Maybe Double -- ^ X coordinate of the parallax origin in pixels (default: 0) , parallaxOriginY :: Maybe Double -- ^ Y coordinate of the parallax origin in pixels (default: 0) , properties :: Maybe (Vector Property) -- ^ Array of Properties , renderOrder :: Maybe Text -- ^ @right-down@ (the default), @right-up@, @left-down@ or @left-up@ (currently only supported for orthogonal maps) , staggerAxis :: Maybe Text -- ^ x or y (staggered / hexagonal maps only) , staggerIndex :: Maybe Text -- ^ odd or even (staggered / hexagonal maps only) , tiledVersion :: Text -- ^ The Tiled version used to save the file , tileHeight :: Int -- ^ Map grid height , tilesets :: Vector TilesetRef -- ^ Array of Tilesets , tileWidth :: Int -- ^ Map grid width , type_ :: Text -- ^ @map@ , version :: Text -- ^ The JSON format version , width :: Int -- ^ Number of tile columns } deriving (Eq, Show, Generic) instance FromJSON Map where parseJSON = genericParseJSON instance ToJSON Map where toJSON = genericToJSON empty :: Map empty = Map { backgroundColor = Nothing , compressionLevel = Nothing , height = 0 , hexSideLength = Nothing , infinite = Nothing , layers = mempty , nextLayerId = 0 , nextObjectId = 0 , orientation = "" , parallaxOriginX = Nothing , parallaxOriginY = Nothing , properties = Nothing , renderOrder = Nothing , staggerAxis = Nothing , staggerIndex = Nothing , tiledVersion = "" , tileHeight = 0 , tilesets = mempty , tileWidth = 0 , type_ = "map" , version = "" , width = 0 } pattern ORTHOGONAL :: Text pattern ORTHOGONAL = "orthogonal" pattern ISOMETRIC :: Text pattern ISOMETRIC = "isometric" pattern STAGGERED :: Text pattern STAGGERED = "staggered" pattern HEXAGONAL :: Text pattern HEXAGONAL = "hexagonal"