From 95ed454e95181896274bfb66aa8e3bce721991a6 Mon Sep 17 00:00:00 2001 From: Darren Eberly Date: Fri, 12 Aug 2022 23:24:39 -0400 Subject: [PATCH] Support for tilerendersize and fillmode on tileset --- pytiled_parser/parsers/json/tileset.py | 8 ++++++++ pytiled_parser/parsers/tmx/tileset.py | 6 ++++++ pytiled_parser/tileset.py | 5 +++++ tests/test_data/tilesets/image/expected.py | 8 +++++--- tests/test_data/tilesets/image/tileset.json | 6 ++++-- tests/test_data/tilesets/image/tileset.tsx | 2 +- 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/pytiled_parser/parsers/json/tileset.py b/pytiled_parser/parsers/json/tileset.py index b1cc1aa..1750b02 100644 --- a/pytiled_parser/parsers/json/tileset.py +++ b/pytiled_parser/parsers/json/tileset.py @@ -74,6 +74,7 @@ RawTileSet = TypedDict( "margin": int, "name": str, "properties": List[RawProperty], + "fillmode": str, "objectalignment": str, "source": str, "spacing": int, @@ -81,6 +82,7 @@ RawTileSet = TypedDict( "tiledversion": str, "tileheight": int, "tileoffset": RawTileOffset, + "tilerendersize": str, "tiles": List[RawTile], "tilewidth": int, "transparentcolor": str, @@ -296,4 +298,10 @@ def parse( if raw_tileset.get("class") is not None: tileset.class_ = raw_tileset["class"] + if raw_tileset.get("tilerendersize") is not None: + tileset.tile_render_size = raw_tileset["tilerendersize"] + + if raw_tileset.get("fillmode") is not None: + tileset.fill_mode = raw_tileset["fillmode"] + return tileset diff --git a/pytiled_parser/parsers/tmx/tileset.py b/pytiled_parser/parsers/tmx/tileset.py index 3fb8cad..d77c713 100644 --- a/pytiled_parser/parsers/tmx/tileset.py +++ b/pytiled_parser/parsers/tmx/tileset.py @@ -147,6 +147,12 @@ def parse( if raw_tileset.attrib.get("class") is not None: tileset.class_ = raw_tileset.attrib["class"] + if raw_tileset.attrib.get("fillmode") is not None: + tileset.fill_mode = raw_tileset.attrib["fillmode"] + + if raw_tileset.attrib.get("tilerendersize") is not None: + tileset.tile_render_size = raw_tileset.attrib["tilerendersize"] + image_element = raw_tileset.find("image") if image_element is not None: if external_path: diff --git a/pytiled_parser/tileset.py b/pytiled_parser/tileset.py index 48ab17c..99557e6 100644 --- a/pytiled_parser/tileset.py +++ b/pytiled_parser/tileset.py @@ -183,6 +183,9 @@ class Tileset: implementation in a game engine would need to use these values. alignment: Which alignment to use for tile objects from this tileset. class_: The Tiled class of this TileSet. + tile_render_size: The size to use when rendering tiles from this tileset. Can be either "tile" or "grid". + fill_mode: The fill mode to use when rendering tiles from this tileset. + Can be either "stretch" or "preserve-aspect-fit". """ name: str @@ -195,6 +198,8 @@ class Tileset: firstgid: int type: str = "tileset" + tile_render_size: str = "tile" + fill_mode: str = "stretch" spacing: int = 0 margin: int = 0 diff --git a/tests/test_data/tilesets/image/expected.py b/tests/test_data/tilesets/image/expected.py index 9c5634e..540421a 100644 --- a/tests/test_data/tilesets/image/expected.py +++ b/tests/test_data/tilesets/image/expected.py @@ -12,10 +12,12 @@ EXPECTED = tileset.Tileset( spacing=1, name="tile_set_image", tile_count=48, - tiled_version="1.8.5", + tiled_version="1.9.1", tile_height=32, tile_width=32, - version="1.8", + version="1.9", type="tileset", - alignment="topleft" + alignment="topleft", + tile_render_size="grid", + fill_mode="preserve-aspect-fit" ) diff --git a/tests/test_data/tilesets/image/tileset.json b/tests/test_data/tilesets/image/tileset.json index af7d40b..23c1920 100644 --- a/tests/test_data/tilesets/image/tileset.json +++ b/tests/test_data/tilesets/image/tileset.json @@ -1,4 +1,5 @@ { "columns":8, + "fillmode":"preserve-aspect-fit", "image":"..\/..\/images\/tmw_desert_spacing.png", "imageheight":199, "imagewidth":265, @@ -7,9 +8,10 @@ "objectalignment":"topleft", "spacing":1, "tilecount":48, - "tiledversion":"1.9.0", + "tiledversion":"1.9.1", "tileheight":32, + "tilerendersize":"grid", "tilewidth":32, "type":"tileset", - "version":"1.8" + "version":"1.9" } \ No newline at end of file diff --git a/tests/test_data/tilesets/image/tileset.tsx b/tests/test_data/tilesets/image/tileset.tsx index 3b2c4c0..53183c9 100644 --- a/tests/test_data/tilesets/image/tileset.tsx +++ b/tests/test_data/tilesets/image/tileset.tsx @@ -1,4 +1,4 @@ - +