void TMXSceneEncoder::writeSoloTileset(const TMXMap& map, const gameplay::TMXTileSet& tmxTileset, const TMXLayer& tileset, std::ofstream& file, unsigned int resultOnlyForTileset) { WRITE_PROPERTY_BLOCK_START("tileset"); // Write tile path WRITE_PROPERTY_BLOCK_VALUE("path", tmxTileset.getImagePath()); WRITE_PROPERTY_NEWLINE(); // Write tile size //XXX if tile sizes are incorrect, make sure to update TMXLayer::getTileStart too char buffer[BUFFER_SIZE]; snprintf(buffer, BUFFER_SIZE, "tileWidth = %u", tmxTileset.getMaxTileWidth()); WRITE_PROPERTY_DIRECT(buffer); snprintf(buffer, BUFFER_SIZE, "tileHeight = %u", tmxTileset.getMaxTileHeight()); WRITE_PROPERTY_DIRECT(buffer); // Write tileset size snprintf(buffer, BUFFER_SIZE, "columns = %u", tileset.getWidth()); WRITE_PROPERTY_DIRECT(buffer); snprintf(buffer, BUFFER_SIZE, "rows = %u", tileset.getHeight()); WRITE_PROPERTY_DIRECT(buffer); WRITE_PROPERTY_NEWLINE(); // Write opacity if (tileset.getOpacity() < 1.0f) { snprintf(buffer, BUFFER_SIZE, "opacity = %f", tileset.getOpacity()); WRITE_PROPERTY_DIRECT(buffer); WRITE_PROPERTY_NEWLINE(); } // Write tiles unsigned int tilesetHeight = tileset.getHeight(); unsigned int tilesetWidth = tileset.getWidth(); for (unsigned int y = 0; y < tilesetHeight; y++) { bool tilesWritten = false; for (unsigned int x = 0; x < tilesetWidth; x++) { Vector2 startPos = tileset.getTileStart(x, y, map, resultOnlyForTileset); if (startPos.x < 0 || startPos.y < 0) { continue; } tilesWritten = true; WRITE_PROPERTY_BLOCK_START("tile"); snprintf(buffer, BUFFER_SIZE, "cell = %u, %u", x, y); WRITE_PROPERTY_DIRECT(buffer); snprintf(buffer, BUFFER_SIZE, "source = %u, %u", static_cast<unsigned int>(startPos.x), static_cast<unsigned int>(startPos.y)); WRITE_PROPERTY_DIRECT(buffer); WRITE_PROPERTY_BLOCK_END(); } if (tilesWritten && ((y + 1) != tilesetHeight)) { WRITE_PROPERTY_NEWLINE(); } } WRITE_PROPERTY_BLOCK_END(); }