mirror of
https://github.com/OMGeeky/pytiled_parser.git
synced 2026-01-22 02:21:37 +01:00
More TMX work(it's mostly working I think)
This commit is contained in:
@@ -2,8 +2,11 @@ import xml.etree.ElementTree as etree
|
||||
from pathlib import Path
|
||||
|
||||
from pytiled_parser.common_types import OrderedPair, Size
|
||||
from pytiled_parser.parsers.tmx.layer import parse as parse_layer
|
||||
from pytiled_parser.parsers.tmx.properties import parse as parse_properties
|
||||
from pytiled_parser.parsers.tmx.tileset import parse as parse_tileset
|
||||
from pytiled_parser.tiled_map import TiledMap, TilesetDict
|
||||
from pytiled_parser.util import parse_color
|
||||
|
||||
|
||||
def parse(file: Path) -> TiledMap:
|
||||
@@ -41,10 +44,15 @@ def parse(file: Path) -> TiledMap:
|
||||
raw_tileset, int(raw_tileset.attrib["firstgid"])
|
||||
)
|
||||
|
||||
layers = []
|
||||
for element in raw_map.iter():
|
||||
if element.tag in ["layer", "objectgroup", "imagelayer", "group"]:
|
||||
layers.append(parse_layer(element, parent_dir))
|
||||
|
||||
map_ = TiledMap(
|
||||
map_file=file,
|
||||
infinite=bool(int(raw_map.attrib["infinite"])),
|
||||
layers=[parse_layer(layer_, parent_dir) for layer_ in raw_tiled_map["layers"]],
|
||||
layers=layers,
|
||||
map_size=Size(int(raw_map.attrib["width"]), int(raw_map.attrib["height"])),
|
||||
next_layer_id=int(raw_map.attrib["nextlayerid"]),
|
||||
next_object_id=int(raw_map.attrib["nextobjectid"]),
|
||||
@@ -57,3 +65,52 @@ def parse(file: Path) -> TiledMap:
|
||||
tilesets=tilesets,
|
||||
version=raw_map.attrib["version"],
|
||||
)
|
||||
|
||||
layers = [layer for layer in map_.layers if hasattr(layer, "tiled_objects")]
|
||||
|
||||
for my_layer in layers:
|
||||
for tiled_object in my_layer.tiled_objects:
|
||||
if hasattr(tiled_object, "new_tileset"):
|
||||
if tiled_object.new_tileset:
|
||||
already_loaded = None
|
||||
for val in map_.tilesets.values():
|
||||
if val.name == tiled_object.new_tileset["name"]:
|
||||
already_loaded = val
|
||||
break
|
||||
|
||||
if not already_loaded:
|
||||
highest_firstgid = max(map_.tilesets.keys())
|
||||
last_tileset_count = map_.tilesets[highest_firstgid].tile_count
|
||||
new_firstgid = highest_firstgid + last_tileset_count
|
||||
map_.tilesets[new_firstgid] = parse_tileset(
|
||||
tiled_object.new_tileset,
|
||||
new_firstgid,
|
||||
tiled_object.new_tileset_path,
|
||||
)
|
||||
tiled_object.gid = tiled_object.gid + (new_firstgid - 1)
|
||||
|
||||
else:
|
||||
tiled_object.gid = tiled_object.gid + (
|
||||
already_loaded.firstgid - 1
|
||||
)
|
||||
|
||||
tiled_object.new_tileset = None
|
||||
tiled_object.new_tileset_path = None
|
||||
|
||||
if raw_map.attrib.get("backgroundcolor") is not None:
|
||||
map_.background_color = parse_color(raw_map.attrib["backgroundcolor"])
|
||||
|
||||
if raw_map.attrib.get("hexsidelength") is not None:
|
||||
map_.hex_side_length = int(raw_map.attrib["hexsidelength"])
|
||||
|
||||
properties_element = raw_map.find("./properties")
|
||||
if properties_element:
|
||||
map_.properties = parse_properties(properties_element)
|
||||
|
||||
if raw_map.attrib.get("staggeraxis") is not None:
|
||||
map_.stagger_axis = raw_map.attrib["staggeraxis"]
|
||||
|
||||
if raw_map.attrib.get("staggerindex") is not None:
|
||||
map_.stagger_index = raw_map.attrib["staggerindex"]
|
||||
|
||||
return map_
|
||||
|
||||
Reference in New Issue
Block a user