43 std::cout <<
"+======================================================================+ \n";
44 std::cout <<
"| PHASE 1: PARSING & VISUAL ANALYSIS | \n";
45 std::cout <<
"|======================================================================| \n";
46 std::cout <<
"| File: " <<
levelPath << std::string(std::max(0, 65 -
static_cast<int>(
levelPath.length())),
' ') <<
"| \n";
47 std::cout <<
"+======================================================================+ \n\n";
53 std::cout <<
"-> Loading Tiled map file...\n";
57 result.errors.push_back(
"Failed to load Tiled map: " +
loader.GetLastError());
61 std::cout <<
"-> Map loaded successfully\n\n";
62 std::cout <<
"Extracting metadata and analyzing contents...\n\n";
76 default:
result.orientation =
"unknown";
break;
79 std::cout <<
"+======================================================================+ \n";
80 std::cout <<
"| MAP METADATA | \n";
81 std::cout <<
"|======================================================================| \n";
82 std::cout <<
"| Dimensions: " <<
result.width <<
" x " <<
result.height
83 <<
" tiles (" << (
result.width *
result.tileWidth) <<
" x "
85 << std::string(std::max(0, 19 -
static_cast<int>(std::to_string(
result.width).length() + std::to_string(
result.height).length())),
' ') <<
"| \n";
86 std::cout <<
"| Tile Size: " <<
result.tileWidth <<
" x " <<
result.tileHeight <<
" pixels"
87 << std::string(std::max(0, 44 -
static_cast<int>(std::to_string(
result.tileWidth).length() + std::to_string(
result.tileHeight).length())),
' ') <<
"| \n";
88 std::cout <<
"| Orientation: " <<
result.orientation
89 << std::string(54 -
result.orientation.length(),
' ') <<
"|\n";
90 std::cout <<
"| Infinite: " << (
tiledMap.infinite ?
"Yes" :
"No ")
91 << std::string(53,
' ') <<
"| \n";
92 std::cout <<
"+======================================================================+ \n\n";
95 std::cout <<
"-> Extracting visual resource manifest...\n";
98 std::cout <<
"+======================================================================+ \n";
99 std::cout <<
"| VISUAL RESOURCES | \n";
100 std::cout <<
"|======================================================================| \n";
101 std::cout <<
"| Tilesets: " <<
result.visualManifest.GetTilesetCount()
102 << std::string(51 - std::to_string(
result.visualManifest.GetTilesetCount()).length(),
' ') <<
"| \n";
103 std::cout <<
"| Parallax Layers: " <<
result.visualManifest.GetParallaxLayerCount()
104 << std::string(51 - std::to_string(
result.visualManifest.GetParallaxLayerCount()).length(),
' ') <<
"| \n";
105 std::cout <<
"| Total Images: " <<
result.visualManifest.GetTotalImageCount()
106 << std::string(51 - std::to_string(
result.visualManifest.GetTotalImageCount()).length(),
' ') <<
"| \n";
107 std::cout <<
"+======================================================================+ \n\n";
110 std::cout <<
"-> Building object census...\n";
113 std::cout <<
"+======================================================================+ \n";
114 std::cout <<
"| OBJECT CENSUS | \n";
115 std::cout <<
"|======================================================================| \n";
116 std::cout <<
"| Total Objects: " <<
result.objectCensus.GetTotalObjectCount()
117 << std::string(51 - std::to_string(
result.objectCensus.GetTotalObjectCount()).length(),
' ') <<
"| \n";
118 std::cout <<
"| Unique Types: " <<
result.objectCensus.GetUniqueTypeCount()
119 << std::string(51 - std::to_string(
result.objectCensus.GetUniqueTypeCount()).length(),
' ') <<
"| \n";
121 if (!
result.objectCensus.typeCounts.empty())
123 std::cout <<
"| | \n";
124 std::cout <<
"| Type Breakdown: | \n";
125 for (
const auto&
kv :
result.objectCensus.typeCounts)
127 std::string
line =
"| " +
kv.first +
": " + std::to_string(
kv.second);
128 std::cout <<
line << std::string(70 -
line.length(),
' ') <<
"| \n";
131 std::cout <<
"+======================================================================+ \n\n";
134 std::cout <<
"-> Extracting object references...\n";
137 if (!
result.objectReferences.empty())
139 std::cout <<
"-> Found " <<
result.objectReferences.size() <<
" object reference(s)\n\n";
144 std::cout <<
"+======================================================================+ \n";
145 std::cout <<
"| PHASE 1 COMPLETE | \n";
146 std::cout <<
"|======================================================================| \n";
147 std::cout <<
"| Status: -> SUCCESS | \n";
148 std::cout <<
"| Errors: " <<
result.GetErrorCount()
149 << std::string(59 - std::to_string(
result.GetErrorCount()).length(),
' ') <<
"| \n";
150 std::cout <<
"| Warnings: " <<
result.GetWarningCount()
151 << std::string(59 - std::to_string(
result.GetWarningCount()).length(),
' ') <<
"| \n";
152 std::cout <<
"+======================================================================+ \n\n";
160 for (
const auto& tileset :
map.tilesets)
164 ref.imageFile = tileset.image;
165 ref.firstGid = tileset.firstgid;
168 if (!tileset.tiles.empty() && tileset.image.empty())
170 ref.isCollection =
true;
171 for (
const auto&
tile : tileset.tiles)
173 if (!
tile.image.empty())
175 ref.individualImages.push_back(
tile.image);
180 else if (!tileset.image.empty())
182 ref.isCollection =
false;
183 manifest.allImagePaths.insert(tileset.image);
191 processLayer = [&](
const std::shared_ptr<TiledLayer>& layer)
197 manifest.parallaxLayers.push_back(layer->image);
198 manifest.allImagePaths.insert(layer->image);
211 for (
const auto& layer :
map.layers)