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
def test_color_parsing(test_input, expected): assert utilities.parse_color(test_input) == expected