mirror of
https://github.com/OMGeeky/pytiled_parser.git
synced 2026-01-11 05:27:18 +01:00
feat(embedded tilesets): Updates to support tilesets embedded in maps
This commit is contained in:
@@ -59,7 +59,7 @@ class Map:
|
|||||||
tiled_version: str
|
tiled_version: str
|
||||||
tile_size: Size
|
tile_size: Size
|
||||||
tilesets: TilesetDict
|
tilesets: TilesetDict
|
||||||
version: str
|
version: float
|
||||||
|
|
||||||
background_color: Optional[Color] = None
|
background_color: Optional[Color] = None
|
||||||
properties: Optional[Properties] = None
|
properties: Optional[Properties] = None
|
||||||
@@ -100,32 +100,11 @@ class _RawTiledMap(TypedDict):
|
|||||||
tilesets: List[_RawTilesetMapping]
|
tilesets: List[_RawTilesetMapping]
|
||||||
tilewidth: int
|
tilewidth: int
|
||||||
type: str
|
type: str
|
||||||
version: str
|
version: float
|
||||||
width: int
|
width: int
|
||||||
|
|
||||||
|
|
||||||
def _cast_raw_tilesets(raw_tilesets: List[_RawTilesetMapping]) -> TilesetDict:
|
def cast(file: Path) -> Map:
|
||||||
""" Cast a list of raw tileset mappings to a Tileset dictionary.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
raw_tilesets: the list of Tileset mappings to be cast into a TilesetDict
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
TilesetDict: containing all tilesets by `firstgid`
|
|
||||||
"""
|
|
||||||
|
|
||||||
tilesets: TilesetDict = {}
|
|
||||||
|
|
||||||
for raw_tileset_mapping in raw_tilesets:
|
|
||||||
with open(Path(raw_tileset_mapping["source"])) as raw_tileset_file:
|
|
||||||
raw_tileset = typing_cast(RawTileSet, json.load(raw_tileset_file))
|
|
||||||
|
|
||||||
tilesets[raw_tileset_mapping["firstgid"]] = tileset.cast(raw_tileset)
|
|
||||||
|
|
||||||
return tilesets
|
|
||||||
|
|
||||||
|
|
||||||
def cast(raw_tiled_map: _RawTiledMap) -> Map:
|
|
||||||
""" Cast the raw Tiled map into a pytiled_parser type
|
""" Cast the raw Tiled map into a pytiled_parser type
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -135,6 +114,28 @@ def cast(raw_tiled_map: _RawTiledMap) -> Map:
|
|||||||
TileSet: a properly typed TileSet.
|
TileSet: a properly typed TileSet.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
with open(file) as map_file:
|
||||||
|
raw_tiled_map = json.load(map_file)
|
||||||
|
|
||||||
|
parent_dir = file.parent
|
||||||
|
|
||||||
|
raw_tilesets: List[Union[RawTileSet, _RawTilesetMapping]] = raw_tiled_map[
|
||||||
|
"tilesets"
|
||||||
|
]
|
||||||
|
tilesets: TilesetDict = {}
|
||||||
|
|
||||||
|
for raw_tileset in raw_tilesets:
|
||||||
|
if raw_tileset.get("source") is not None:
|
||||||
|
# Is an external Tileset
|
||||||
|
with open(parent_dir / raw_tileset["source"]) as raw_tileset_file:
|
||||||
|
tilesets[raw_tileset["firstgid"]] = tileset.cast(
|
||||||
|
json.load(raw_tileset_file)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Is an embedded Tileset
|
||||||
|
raw_tileset = typing_cast(RawTileSet, raw_tileset)
|
||||||
|
tilesets[raw_tileset["firstgid"]] = tileset.cast(raw_tileset)
|
||||||
|
|
||||||
# `map` is a built-in function
|
# `map` is a built-in function
|
||||||
map_ = Map(
|
map_ = Map(
|
||||||
infinite=raw_tiled_map["infinite"],
|
infinite=raw_tiled_map["infinite"],
|
||||||
@@ -146,7 +147,7 @@ def cast(raw_tiled_map: _RawTiledMap) -> Map:
|
|||||||
render_order=raw_tiled_map["renderorder"],
|
render_order=raw_tiled_map["renderorder"],
|
||||||
tiled_version=raw_tiled_map["tiledversion"],
|
tiled_version=raw_tiled_map["tiledversion"],
|
||||||
tile_size=Size(raw_tiled_map["tilewidth"], raw_tiled_map["tileheight"]),
|
tile_size=Size(raw_tiled_map["tilewidth"], raw_tiled_map["tileheight"]),
|
||||||
tilesets=_cast_raw_tilesets(raw_tiled_map["tilesets"]),
|
tilesets=tilesets,
|
||||||
version=raw_tiled_map["version"],
|
version=raw_tiled_map["version"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -139,19 +139,20 @@ class TileSet:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
type: str
|
|
||||||
tile_width: int
|
tile_width: int
|
||||||
tile_height: int
|
tile_height: int
|
||||||
|
|
||||||
tile_count: int
|
tile_count: int
|
||||||
columns: int
|
columns: int
|
||||||
|
|
||||||
tiled_version: str
|
|
||||||
version: float
|
|
||||||
|
|
||||||
spacing: int = 0
|
spacing: int = 0
|
||||||
margin: int = 0
|
margin: int = 0
|
||||||
|
|
||||||
|
type: Optional[str] = None
|
||||||
|
|
||||||
|
tiled_version: Optional[str] = None
|
||||||
|
version: Optional[float] = None
|
||||||
|
|
||||||
image: Optional[Path] = None
|
image: Optional[Path] = None
|
||||||
image_width: Optional[int] = None
|
image_width: Optional[int] = None
|
||||||
image_height: Optional[int] = None
|
image_height: Optional[int] = None
|
||||||
@@ -370,11 +371,17 @@ def cast(raw_tileset: RawTileSet) -> TileSet:
|
|||||||
columns=raw_tileset["columns"],
|
columns=raw_tileset["columns"],
|
||||||
spacing=raw_tileset["spacing"],
|
spacing=raw_tileset["spacing"],
|
||||||
margin=raw_tileset["margin"],
|
margin=raw_tileset["margin"],
|
||||||
version=raw_tileset["version"],
|
|
||||||
tiled_version=raw_tileset["tiledversion"],
|
|
||||||
type=raw_tileset["type"],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if raw_tileset.get("type") is not None:
|
||||||
|
tileset.type = raw_tileset["type"]
|
||||||
|
|
||||||
|
if raw_tileset.get("version") is not None:
|
||||||
|
tileset.version = raw_tileset["version"]
|
||||||
|
|
||||||
|
if raw_tileset.get("tiledversion") is not None:
|
||||||
|
tileset.tiled_version = raw_tileset["tiledversion"]
|
||||||
|
|
||||||
if raw_tileset.get("image") is not None:
|
if raw_tileset.get("image") is not None:
|
||||||
tileset.image = Path(raw_tileset["image"])
|
tileset.image = Path(raw_tileset["image"])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user