summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuebinm2021-10-30 13:41:50 +0200
committerstuebinm2021-10-30 15:44:26 +0200
commit54202ae45ec62cd5f171f3460d322de0402499a2 (patch)
tree0307cf6b7061b438331e6ab7bffc3971b695deb6
parent856a86b8fed5d6ba2cd246ff4472e39c9f34fe6d (diff)
added more keys to the Tiled format
(apparently, some of them aren't even in the spec, just the changelog!)
-rw-r--r--lib/Tiled2.hs81
1 files changed, 51 insertions, 30 deletions
diff --git a/lib/Tiled2.hs b/lib/Tiled2.hs
index 3c881ec..2a9c5b5 100644
--- a/lib/Tiled2.hs
+++ b/lib/Tiled2.hs
@@ -35,6 +35,7 @@ aesonOptions :: Int -> Options
aesonOptions l = defaultOptions
{ omitNothingFields = True
, rejectUnknownFields = True
+ -- can't be bothered to do a nixer prefix strip
, fieldLabelModifier = drop l . map toLower
}
@@ -49,6 +50,8 @@ mkTiledId i = GlobalId { unGlobalId = i }
newtype LocalId = LocalId { unLocalId :: Int }
deriving (Ord, Eq, Enum, Num, Generic, Show, FromJSON, ToJSON, FromJSONKey, ToJSONKey)
+-- | TODO: type-check colours?
+type Color = Text
data XYPair a = XYPair a a
@@ -149,31 +152,37 @@ instance ToJSON Object where
toJSON = genericToJSON (aesonOptions 6)
-data Layer = Layer { layerWidth :: Maybe Double
+data Layer = Layer { layerWidth :: Maybe Double
-- ^ Column count. Same as map width for fixed-size maps.
- , layerHeight :: Maybe Double
+ , layerHeight :: Maybe Double
-- ^ Row count. Same as map height for fixed-size maps.
- , layerName :: Text
+ , layerName :: Text
-- ^ Name assigned to this layer
- , layerType :: String
+ , layerType :: String
-- ^ “tilelayer”, “objectgroup”, or “imagelayer”
- , layerVisible :: Bool
+ , layerVisible :: Bool
-- ^ Whether layer is shown or hidden in editor
- , layerX :: Double
+ , layerX :: Double
-- ^ Horizontal layer offset in tiles. Always 0.
- , layerY :: Double
+ , layerY :: Double
-- ^ Vertical layer offset in tiles. Always 0.
- , layerData :: Maybe (Vector GlobalId)
+ , layerData :: Maybe (Vector GlobalId)
-- ^ Array of GIDs. tilelayer only.
- , layerObjects :: Maybe (Vector Object)
+ , layerObjects :: Maybe (Vector Object)
-- ^ Array of Objects. objectgroup only.
- , layerProperties :: Maybe [Property]
+ , layerProperties :: Maybe [Property]
-- ^ string key-value pairs.
- , layerOpacity :: Float
+ , layerOpacity :: Float
-- ^ Value between 0 and 1
- , layerDraworder :: Maybe String
+ , layerDraworder :: Maybe String
-- ^ “topdown” (default) or “index”. objectgroup only.
- , layerId :: Int
+ , layerId :: Int
+ , layerOffsetx :: Maybe Int
+ , layerOffsety :: Maybe Int
+ , layerParallaxx :: Maybe Float
+ , layerParallaxy :: Maybe Float
+ , layerTintColor :: Maybe Color
+ , layerTransparentColor :: Maybe Color
} deriving (Eq, Generic, Show)
instance FromJSON Layer where
@@ -230,39 +239,49 @@ instance ToJSON Tile where
-data Tileset = Tileset { tilesetFirstgid :: GlobalId
+data Tileset = Tileset { tilesetFirstgid :: GlobalId
-- ^ GID corresponding to the first tile in the set
- , tilesetImage :: Text
+ , tilesetImage :: Text
-- ^ Image used for tiles in this set
- , tilesetName :: Text
+ , tilesetName :: Text
-- ^ Name given to this tileset
- , tilesetTilewidth :: Int
+ , tilesetTilewidth :: Int
-- ^ Maximum width of tiles in this set
- , tilesetTileheight :: Int
+ , tilesetTileheight :: Int
-- ^ Maximum height of tiles in this set
- , tilesetImagewidth :: Int
+ , tilesetImagewidth :: Int
-- ^ Width of source image in pixels
- , tilesetImageheight :: Int
+ , tilesetImageheight :: Int
-- ^ Height of source image in pixels
- , tilesetProperties :: Maybe [Property]
+ , tilesetProperties :: Maybe [Property]
-- ^ String key-value pairs
- , tilesetPropertytypes :: Maybe (Map Text Text)
+ , tilesetPropertytypes :: Maybe (Map Text Text)
-- ^ String key-value pairs
- , tilesetMargin :: Int
+ , tilesetMargin :: Int
-- ^ Buffer between image edge and first tile (pixels)
- , tilesetSpacing :: Int
+ , tilesetSpacing :: Int
-- ^ Spacing between adjacent tiles in image (pixels)
- , tilesetTileproperties :: Maybe (Map GlobalId (Map Text Text))
+ , tilesetTileproperties :: Maybe (Map GlobalId (Map Text Text))
-- ^ Per-tile properties, indexed by gid as string
- , tilesetTerrains :: Maybe (Vector Terrain)
+ , tilesetTerrains :: Maybe (Vector Terrain)
-- ^ Array of Terrains (optional)
- , tilesetColumns :: Int
+ , tilesetColumns :: Int
-- ^ The number of tile columns in the tileset
- , tilesetTilecount :: Int
+ , tilesetTilecount :: Int
-- ^ The number of tiles in this tileset
- , tilesetTiles :: Maybe (Vector Tile)
+ , tilesetTiles :: Maybe (Vector Tile)
-- ^ Tiles (optional)
- , tilesetTransparentcolor :: Maybe String
+ , tilesetTransparentcolor :: Maybe Text
+ , tilesetEditorsettings :: Maybe Value
+ , tilesetBackgroundColor :: Maybe Text
+ , tilesetGrid :: Maybe Value
+ , tilesetSource :: Maybe Text
+ , tilesetTiledversion :: Maybe Text
+ , tilesetTileoffset :: Maybe Value
+ , tilesetTransformations :: Maybe Value
+ , tilesetVersion :: Maybe Value
+ , tilesetWangsets :: Maybe Value
+ , tilesetType :: Maybe Text
} deriving (Eq, Generic, Show)
newtype TransitiveTilesetMap = TransitiveTilesetMap (Map LocalId Value)
@@ -306,8 +325,10 @@ data Tiledmap = Tiledmap { tiledmapVersion :: Float
, tiledmapInfinite :: Bool
, tiledmapNextlayerid :: Maybe Int
, tiledmapHexsidelength :: Maybe Int
+ , tiledmapStaggeraxis :: Maybe Text
, tiledmapStaggerindex :: Maybe String
, tiledmapType :: String
+ , tiledmapEditorsettings :: Maybe Value
} deriving (Eq, Generic, Show)
instance FromJSON Tiledmap where