22 tinyxml2::XMLElement *mapElement = doc.
FirstChildElement(
"maps").FirstChildElement(
"map").ToElement();
24 std::string name = mapElement->Attribute(
"name");
25 std::string tilesetName = mapElement->Attribute(
"tileset");
29 loadMap(name, tileset, handler);
31 mapElement = mapElement->NextSiblingElement(
"map");
36 XMLFile doc(
"resources/maps/" + name +
".tmx");
40 u16 width = mapElement->IntAttribute(
"width");
41 u16 height = mapElement->IntAttribute(
"height");
43 std::vector<std::vector<u16>> data;
44 tinyxml2::XMLElement *layerElement = mapElement->FirstChildElement(
"layer");
45 while (layerElement) {
46 tinyxml2::XMLElement *tileElement = layerElement->FirstChildElement(
"data")->FirstChildElement(
"tile");
48 std::vector<u16> layer;
50 s16 tileID = tileElement->IntAttribute(
"gid") - 1;
52 layer.push_back((tileID >= 0) ? tileID : 0);
54 tileElement = tileElement->NextSiblingElement(
"tile");
57 data.emplace_back(std::move(layer));
59 layerElement = layerElement->NextSiblingElement(
"layer");
62 handler.
add<
Tilemap>(
"map-" + name, width, height, tileset, data);
tinyxml2::XMLHandle FirstChildElement(const char *element)
T & add(const std::string &name, Args &&...args)
void loadMap(const std::string &name, Tileset &tileset, ResourceHandler &handler)
T & get(const std::string &name)
void load(const char *xmlFilename, ResourceHandler &handler) override