From 58deab5f78bb09b63b2d538853f49da9d6f11cf1 Mon Sep 17 00:00:00 2001 From: Darren Eberly Date: Sat, 13 Aug 2022 00:13:19 -0400 Subject: [PATCH] Add support for image tile sub-rect --- pytiled_parser/parsers/json/tileset.py | 22 ++++++++++++++++ pytiled_parser/parsers/tmx/tileset.py | 14 ++++++++++ pytiled_parser/tileset.py | 4 +++ tests/test_data/images/tile_05.png | Bin 0 -> 14707 bytes .../external_tileset_dif_dir/expected.py | 8 ++++++ .../test_data/map_tests/template/expected.py | 2 ++ .../tilesets/individual_images/expected.py | 24 +++++++++++++++--- .../tilesets/individual_images/tileset.json | 16 +++++++++--- .../tilesets/individual_images/tileset.tsx | 5 +++- 9 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 tests/test_data/images/tile_05.png diff --git a/pytiled_parser/parsers/json/tileset.py b/pytiled_parser/parsers/json/tileset.py index 1750b02..bbe9d7b 100644 --- a/pytiled_parser/parsers/json/tileset.py +++ b/pytiled_parser/parsers/json/tileset.py @@ -47,6 +47,10 @@ RawTile = TypedDict( "type": str, "properties": List[RawProperty], "objectgroup": RawLayer, + "x": int, + "y": int, + "width": int, + "height": int }, ) RawTile.__doc__ = """ @@ -191,11 +195,17 @@ def _parse_tile(raw_tile: RawTile, external_path: Optional[Path] = None) -> Tile # image is set, but these aren't, so the branches will never fully be hit. # However, leaving these checks in place is nice to prevent fatal errors on # a manually edited map that has an "incorrect" but not "unusable" structure + # + # We also set the width and height attributes here as the values for these in + # Tiled defaults to the same value as imagewidth and imageheight if no custom value + # is set. We then later load in the custom value if it exists. if raw_tile.get("imagewidth") is not None: # pragma: no cover tile.image_width = raw_tile["imagewidth"] + tile.width = tile.image_width if raw_tile.get("imageheight") is not None: # pragma: no cover tile.image_height = raw_tile["imageheight"] + tile.height = tile.image_height if raw_tile.get("type") is not None: tile.class_ = raw_tile["type"] @@ -203,6 +213,18 @@ def _parse_tile(raw_tile: RawTile, external_path: Optional[Path] = None) -> Tile if raw_tile.get("class") is not None: tile.class_ = raw_tile["class"] + if raw_tile.get("x") is not None: + tile.x = raw_tile["x"] + + if raw_tile.get("y") is not None: + tile.y = raw_tile["y"] + + if raw_tile.get("width") is not None: + tile.width = raw_tile["width"] + + if raw_tile.get("height") is not None: + tile.height = raw_tile["height"] + return tile diff --git a/pytiled_parser/parsers/tmx/tileset.py b/pytiled_parser/parsers/tmx/tileset.py index d77c713..0db9232 100644 --- a/pytiled_parser/parsers/tmx/tileset.py +++ b/pytiled_parser/parsers/tmx/tileset.py @@ -107,7 +107,21 @@ def _parse_tile(raw_tile: etree.Element, external_path: Optional[Path] = None) - tile.image = Path(image_element.attrib["source"]) tile.image_width = int(image_element.attrib["width"]) + tile.width = tile.image_width tile.image_height = int(image_element.attrib["height"]) + tile.height = tile.image_height + + if raw_tile.attrib.get("x") is not None: + tile.x = int(raw_tile.attrib["x"]) + + if raw_tile.attrib.get("y") is not None: + tile.y = int(raw_tile.attrib["y"]) + + if raw_tile.attrib.get("width") is not None: + tile.width = int(raw_tile.attrib["width"]) + + if raw_tile.attrib.get("height") is not None: + tile.height = int(raw_tile.attrib["height"]) return tile diff --git a/pytiled_parser/tileset.py b/pytiled_parser/tileset.py index 99557e6..8e153af 100644 --- a/pytiled_parser/tileset.py +++ b/pytiled_parser/tileset.py @@ -119,6 +119,10 @@ class Tile: id: int opacity: int = 1 + x: int = 0 + y: int = 0 + width: Optional[int] = None + height: Optional[int] = None class_: Optional[str] = None animation: Optional[List[Frame]] = None objects: Optional[layer.Layer] = None diff --git a/tests/test_data/images/tile_05.png b/tests/test_data/images/tile_05.png new file mode 100644 index 0000000000000000000000000000000000000000..46f72259ebf61fb637dccf77f4a9296aa1d02b81 GIT binary patch literal 14707 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 A7XSbN literal 0 HcmV?d00001 diff --git a/tests/test_data/map_tests/external_tileset_dif_dir/expected.py b/tests/test_data/map_tests/external_tileset_dif_dir/expected.py index 40d7945..02ddf04 100644 --- a/tests/test_data/map_tests/external_tileset_dif_dir/expected.py +++ b/tests/test_data/map_tests/external_tileset_dif_dir/expected.py @@ -105,6 +105,8 @@ EXPECTED = tiled_map.TiledMap( image_width=32, properties={"float property": 2.2}, class_="tile", + width=32, + height=32, ), 1: tileset.Tile( id=1, @@ -147,6 +149,8 @@ EXPECTED = tiled_map.TiledMap( ), ], ), + width=32, + height=32, properties={"string property": "testing"}, class_="tile", ), @@ -159,6 +163,8 @@ EXPECTED = tiled_map.TiledMap( image_width=32, properties={"bool property": True}, class_="tile", + width=32, + height=32, ), 3: tileset.Tile( id=3, @@ -167,6 +173,8 @@ EXPECTED = tiled_map.TiledMap( .resolve(), image_height=32, image_width=32, + width=32, + height=32, class_="tile", ), }, diff --git a/tests/test_data/map_tests/template/expected.py b/tests/test_data/map_tests/template/expected.py index cb227a5..a6c7aad 100644 --- a/tests/test_data/map_tests/template/expected.py +++ b/tests/test_data/map_tests/template/expected.py @@ -106,6 +106,8 @@ EXPECTED = tiled_map.TiledMap( .resolve(), image_height=32, image_width=32, + width=32, + height=32 ) }, tile_count=1, diff --git a/tests/test_data/tilesets/individual_images/expected.py b/tests/test_data/tilesets/individual_images/expected.py index 1d19ade..05c9f7e 100644 --- a/tests/test_data/tilesets/individual_images/expected.py +++ b/tests/test_data/tilesets/individual_images/expected.py @@ -7,12 +7,12 @@ EXPECTED = tileset.Tileset( margin=0, spacing=0, name="tileset", - tile_count=4, - tiled_version="1.6.0", + tile_count=5, + tiled_version="1.9.1", tile_height=32, tile_width=32, firstgid=1, - version="1.6", + version="1.9", type="tileset", grid=tileset.Grid(orientation="orthogonal", width=1, height=1), tiles={ @@ -29,6 +29,8 @@ EXPECTED = tileset.Tileset( image_width=32, properties={"float property": 2.2}, class_="tile", + width=32, + height=32, ), 1: tileset.Tile( id=1, @@ -67,6 +69,8 @@ EXPECTED = tileset.Tileset( ), properties={"string property": "testing"}, class_="tile", + width=32, + height=32, ), 2: tileset.Tile( id=2, @@ -75,6 +79,8 @@ EXPECTED = tileset.Tileset( image_width=32, properties={"bool property": True}, class_="tile", + width=32, + height=32, ), 3: tileset.Tile( id=3, @@ -82,6 +88,18 @@ EXPECTED = tileset.Tileset( image_height=32, image_width=32, class_="tile", + width=32, + height=32, ), + 4: tileset.Tile( + id=4, + image=Path("../../images/tile_05.png"), + image_height=32, + image_width=64, + x=32, + y=0, + width=32, + height=32 + ) }, ) diff --git a/tests/test_data/tilesets/individual_images/tileset.json b/tests/test_data/tilesets/individual_images/tileset.json index 3d7b412..2e79cad 100644 --- a/tests/test_data/tilesets/individual_images/tileset.json +++ b/tests/test_data/tilesets/individual_images/tileset.json @@ -8,8 +8,8 @@ "margin":0, "name":"tileset", "spacing":0, - "tilecount":4, - "tiledversion":"1.9.0", + "tilecount":5, + "tiledversion":"1.9.1", "tileheight":32, "tiles":[ { @@ -108,8 +108,18 @@ "image":"..\/..\/images\/tile_04.png", "imageheight":32, "imagewidth":32 + }, + { + "height":32, + "id":4, + "image":"..\/..\/images\/tile_05.png", + "imageheight":32, + "imagewidth":64, + "width":32, + "x":32, + "y":0 }], "tilewidth":32, "type":"tileset", - "version":"1.8" + "version":"1.9" } \ No newline at end of file diff --git a/tests/test_data/tilesets/individual_images/tileset.tsx b/tests/test_data/tilesets/individual_images/tileset.tsx index 3e8a0f9..1c48286 100644 --- a/tests/test_data/tilesets/individual_images/tileset.tsx +++ b/tests/test_data/tilesets/individual_images/tileset.tsx @@ -1,5 +1,5 @@ - + @@ -34,4 +34,7 @@ + + +