void TileMapLayer2D::SetTileLayer(const TmxTileLayer2D* tileLayer) { tileLayer_ = tileLayer; int width = tileLayer->GetWidth(); int height = tileLayer->GetHeight(); nodes_.Resize((unsigned)(width * height)); const TileMapInfo2D& info = tileMap_->GetInfo(); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { const Tile2D* tile = tileLayer->GetTile(x, y); if (!tile) continue; SharedPtr<Node> tileNode(GetNode()->CreateTemporaryChild("Tile")); tileNode->SetPosition(info.TileIndexToPosition(x, y)); StaticSprite2D* staticSprite = tileNode->CreateComponent<StaticSprite2D>(); staticSprite->SetSprite(tile->GetSprite()); staticSprite->SetLayer(drawOrder_); staticSprite->SetOrderInLayer(y * width + x); nodes_[y * width + x] = tileNode; } } }
void TileMapLayer2D::SetTileLayer(const TmxTileLayer2D* tileLayer) { tileLayer_ = tileLayer; int width = tileLayer->GetWidth(); int height = tileLayer->GetHeight(); nodes_.Resize((unsigned)(width * height)); const TileMapInfo2D& info = tileMap_->GetInfo(); for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { const Tile2D* tile = tileLayer->GetTile(x, y); if (!tile) continue; SharedPtr<Node> tileNode(GetNode()->CreateChild("Tile")); tileNode->SetTemporary(true); tileNode->SetPosition(info.TileIndexToPosition(x, y)); StaticSprite2D* staticSprite = tileNode->CreateComponent<StaticSprite2D>(); staticSprite->SetSprite(tile->GetSprite()); staticSprite->SetLayer(drawOrder_); staticSprite->SetOrderInLayer(y * width + x); // ATOMIC BEGIN // collision RigidBody2D *body = NULL; TmxObjectGroup2D* group = tile->GetObjectGroup(); if (group) { for (unsigned i = 0; i < group->GetNumObjects(); i++) { TileMapObject2D* o = group->GetObject(i); if (o->ValidCollisionShape()) { if (!body) { body = tileNode->CreateComponent<RigidBody2D>(); body->SetBodyType(BT_STATIC); } o->CreateCollisionShape(tileNode); } } } // ATOMIC END nodes_[y * width + x] = tileNode; } } }
void TiledMapLoader::parseTilesetsTileProperties(Map &map, Tileset &tileset, rapidxml::xml_node<> &tilesetNode) { rapidxml::xml_node<> *tilesetTileNode = nullptr; rapidxml::xml_node<> *tilesetTileNodeProperties = nullptr; rapidxml::xml_node<> *tilesetTileNodeProperty = nullptr; tilesetTileNode = tilesetNode.first_node("tile"); while (tilesetTileNode) { tilesetTileNodeProperties = tilesetTileNode->first_node("properties"); if (tilesetTileNodeProperties) { tilesetTileNodeProperty = tilesetTileNodeProperties->first_node("property"); while (tilesetTileNodeProperty) { XMLElement tileNode(*tilesetTileNode); XMLElement tileNodeProperty(*tilesetTileNodeProperty); char *name = tileNodeProperty.getString("name"); char *value = tileNodeProperty.getString("value"); if (name && value) { tileset.addTileProperties(tileNode.getInt("id"), name, value); } tilesetTileNodeProperty = tilesetTileNodeProperty->next_sibling("property"); } } tilesetTileNode = tilesetTileNode->next_sibling("tile"); } }