Skip to content

Commit 4335cb4

Browse files
committed
Use abolute paths for images when loading an external tileset
1 parent 2d3d121 commit 4335cb4

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

pytiled_parser/tiled_map.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,10 @@ def parse_map(file: Path) -> TiledMap:
129129
for raw_tileset in raw_tilesets:
130130
if raw_tileset.get("source") is not None:
131131
# Is an external Tileset
132-
with open(parent_dir / raw_tileset["source"]) as raw_tileset_file:
132+
tileset_path = Path(parent_dir / raw_tileset["source"])
133+
with open(tileset_path) as raw_tileset_file:
133134
tilesets[raw_tileset["firstgid"]] = tileset.cast(
134-
json.load(raw_tileset_file)
135+
json.load(raw_tileset_file), external_path=tileset_path.parent
135136
)
136137
else:
137138
# Is an embedded Tileset

pytiled_parser/tileset.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ def _cast_terrain(raw_terrain: RawTerrain) -> Terrain:
287287
)
288288

289289

290-
def _cast_tile(raw_tile: RawTile) -> Tile:
290+
def _cast_tile(raw_tile: RawTile, external_path: Optional[Path] = None) -> Tile:
291291
"""Cast the raw_tile to a Tile object.
292292
293293
Args:
@@ -312,7 +312,10 @@ def _cast_tile(raw_tile: RawTile) -> Tile:
312312
tile.properties = properties_.cast(raw_tile["properties"])
313313

314314
if raw_tile.get("image") is not None:
315-
tile.image = Path(raw_tile["image"])
315+
if external_path:
316+
tile.image = Path(external_path / raw_tile["image"]).absolute().resolve()
317+
else:
318+
tile.image = Path(raw_tile["image"])
316319

317320
if raw_tile.get("imagewidth") is not None:
318321
tile.image_width = raw_tile["imagewidth"]
@@ -353,7 +356,7 @@ def _cast_grid(raw_grid: RawGrid) -> Grid:
353356
)
354357

355358

356-
def cast(raw_tileset: RawTileSet) -> Tileset:
359+
def cast(raw_tileset: RawTileSet, external_path: Optional[Path] = None) -> Tileset:
357360
"""Cast the raw tileset into a pytiled_parser type
358361
359362
Args:
@@ -383,7 +386,12 @@ def cast(raw_tileset: RawTileSet) -> Tileset:
383386
tileset.tiled_version = raw_tileset["tiledversion"]
384387

385388
if raw_tileset.get("image") is not None:
386-
tileset.image = Path(raw_tileset["image"])
389+
if external_path:
390+
tileset.image = (
391+
Path(external_path / raw_tileset["image"]).absolute().resolve()
392+
)
393+
else:
394+
tileset.image = Path(raw_tileset["image"])
387395

388396
if raw_tileset.get("imagewidth") is not None:
389397
tileset.image_width = raw_tileset["imagewidth"]
@@ -418,7 +426,7 @@ def cast(raw_tileset: RawTileSet) -> Tileset:
418426
if raw_tileset.get("tiles") is not None:
419427
tiles = {}
420428
for raw_tile in raw_tileset["tiles"]:
421-
tiles[raw_tile["id"]] = _cast_tile(raw_tile)
429+
tiles[raw_tile["id"]] = _cast_tile(raw_tile, external_path=external_path)
422430
tileset.tiles = tiles
423431

424432
return tileset

0 commit comments

Comments
 (0)