packages feed

aeson-tiled-0.0.2.0: src/Codec/Tiled/Map.hs

module Codec.Tiled.Map 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