예제 #1
0
def parse_tile_map(tmx_file: Union[str, Path]) -> objects.TileMap:
    """Parse tile map.

    Args:
        tmx_file: TMX file to be parsed.

    Returns:
        objects.TileMap: TileMap object generated from the TMX file provided.
    """
    # setting up XML parsing
    map_tree = etree.parse(str(tmx_file))
    map_element = map_tree.getroot()

    # positional arguments for TileMap
    parent_dir = Path(tmx_file).parent

    version = map_element.attrib["version"]
    tiled_version = map_element.attrib["tiledversion"]
    orientation = map_element.attrib["orientation"]
    render_order = map_element.attrib["renderorder"]

    map_width = int(map_element.attrib["width"])
    map_height = int(map_element.attrib["height"])
    map_size = objects.Size(map_width, map_height)

    tile_width = int(map_element.attrib["tilewidth"])
    tile_height = int(map_element.attrib["tileheight"])
    tile_size = objects.Size(tile_width, tile_height)

    infinite_attribute = map_element.attrib["infinite"]
    infinite = bool(infinite_attribute == "1")

    if "nextlayerid" in map_element.attrib:
        next_layer_id = int(map_element.attrib["nextlayerid"])
    else:
        next_layer_id = None

    if "nextobjectid" in map_element.attrib:
        next_object_id = int(map_element.attrib["nextobjectid"])
    else:
        next_object_id = None

    tile_sets = _get_tile_sets(map_element, parent_dir)

    layers = _get_layers(map_element)

    tile_map = objects.TileMap(
        parent_dir,
        tmx_file,
        version,
        tiled_version,
        orientation,
        render_order,
        map_size,
        tile_size,
        infinite,
        next_layer_id,
        next_object_id,
        tile_sets,
        layers,
    )

    try:
        tile_map.hex_side_length = int(map_element.attrib["hexsidelength"])
    except KeyError:
        pass

    try:
        tile_map.stagger_axis = map_element.attrib["staggeraxis"]
    except KeyError:
        pass

    try:
        tile_map.stagger_index = map_element.attrib["staggerindex"]
    except KeyError:
        pass

    try:
        color = parse_color(map_element.attrib["backgroundcolor"])
        tile_map.background_color = (color.red, color.green, color.blue)
    except KeyError:
        pass

    properties_element = map_tree.find("./properties")
    if properties_element is not None:
        tile_map.properties = _parse_properties_element(properties_element)

    return tile_map
예제 #2
0
def test_color_parsing(test_input, expected):
    assert utilities.parse_color(test_input) == expected