From edd1d30f51b1640c3c979ecc407860b79f029ae4 Mon Sep 17 00:00:00 2001 From: Paul Vincent Craven Date: Sat, 22 Jun 2019 15:23:43 -0500 Subject: [PATCH] Add recursive link so tiles have a handle to the tileset they are a part of. Needed when pulling additional frames of animation. --- pytiled_parser/objects.py | 4 ++++ pytiled_parser/xml_parser.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/pytiled_parser/objects.py b/pytiled_parser/objects.py index 01a6f1e..66a3b13 100644 --- a/pytiled_parser/objects.py +++ b/pytiled_parser/objects.py @@ -470,6 +470,9 @@ class Hitbox: points: str +class TileSet: + pass + @dataclasses.dataclass class Tile: @@ -492,6 +495,7 @@ class Tile: image: Optional[Image] hitboxes: Optional[List[Hitbox]] properties: Optional[List[Property]] + tileset: Optional[TileSet] @dataclasses.dataclass diff --git a/pytiled_parser/xml_parser.py b/pytiled_parser/xml_parser.py index 56765bf..43f431d 100644 --- a/pytiled_parser/xml_parser.py +++ b/pytiled_parser/xml_parser.py @@ -559,7 +559,7 @@ def _parse_tiles( hitboxes = _parse_hitboxes(tile_hitboxes_element) tiles[id_] = objects.Tile( - id_, tile_type, tile_terrain, animation, tile_image, hitboxes, properties + id_, tile_type, tile_terrain, animation, tile_image, hitboxes, properties, tileset=None ) return tiles @@ -706,7 +706,7 @@ def _parse_tile_set(tile_set_element: etree.Element) -> objects.TileSet: tile_element_list = tile_set_element.findall("./tile") tiles = _parse_tiles(tile_element_list) - return objects.TileSet( + tileset = objects.TileSet( name, max_tile_size, spacing, @@ -721,6 +721,13 @@ def _parse_tile_set(tile_set_element: etree.Element) -> objects.TileSet: tiles, ) + # Go back and create a circular link so tiles know what tileset they are + # part of. Needed for animation. + for my_id, my_tile in tiles.items(): + my_tile.tileset = tileset + + return tileset + def parse_tile_map(tmx_file: Union[str, Path]) -> objects.TileMap: # setting up XML parsing