diff --git a/pytiled_parser/objects.py b/pytiled_parser/objects.py index 3af237b..de18517 100644 --- a/pytiled_parser/objects.py +++ b/pytiled_parser/objects.py @@ -444,6 +444,10 @@ class TileSet: Ordered according to the terrain element's appearance in the TSX \ file. tiles (Optional[Dict[int, Tile]]): Dict of Tile objects by Tile.id. + tsx_file (Path): Path of the file containing the tileset, \ + None if loaded internally from a map + parent_dir (Path): Path of the parent directory of the file \ + containing the tileset, None if loaded internally from a map """ name: str @@ -459,6 +463,8 @@ class TileSet: image: Optional[Image] = None terrain_types: Optional[List[Terrain]] = None tiles: Optional[Dict[int, "Tile"]] = None + tsx_file: Path = None + parent_dir: Path = None TileSetDict = Dict[int, TileSet] diff --git a/pytiled_parser/xml_parser.py b/pytiled_parser/xml_parser.py index 1e51764..08f3622 100644 --- a/pytiled_parser/xml_parser.py +++ b/pytiled_parser/xml_parser.py @@ -465,9 +465,15 @@ def _parse_external_tile_set( objects.Tileset: The tileset being parsed. """ source = Path(tile_set_element.attrib["source"]) + resolved_path = parent_dir / source tile_set_tree = etree.parse(str(parent_dir / Path(source))).getroot() - return _parse_tile_set(tile_set_tree) + parsed_tile_set = _parse_tile_set(tile_set_tree) + + parsed_tile_set.tsx_file = resolved_path + parsed_tile_set.parent_dir = resolved_path.parent + + return parsed_tile_set def _parse_points(point_string: str) -> List[objects.OrderedPair]: