Files
2026-10-25 03:29:04 -03:00

36 lines
1.8 KiB
C++

// hmap_info: prints a summary of a .hmap file using only the public libhmap API.
// hmap_info level.hmap [--fbx out.fbx] [--obj out.obj]
#include <hmap/hmap.h>
#include <cstdio>
#include <cstring>
#include <map>
int main(int argc, char** argv) {
if (argc < 2) {
std::puts("usage: hmap_info <file.hmap> [--fbx out.fbx] [--obj out.obj]");
return 2;
}
hmap::CompiledMap cm;
hmap::Status s = hmap::loadCompiled(argv[1], cm);
if (!s) {
std::fprintf(stderr, "error: %s\n", s.message.c_str());
return 1;
}
std::printf("%s\n materials: %zu\n batches: %zu (%u triangles, %u vertices)%s\n", argv[1], cm.materials.size(), cm.batches.size(),
cm.stats.triangles, cm.stats.vertices, cm.baked ? ", baked vertex lighting" : "");
std::printf(" models: %zu (1 world + %zu brush entities)\n", cm.models.size(), cm.models.size() - 1);
std::printf(" BSP: %zu nodes, %zu leaves, %zu brushes\n", cm.bsp.nodes.size(), cm.bsp.leaves.size(), cm.bsp.brushes.size());
std::printf(" lights: %zu\n bounds: (%.0f %.0f %.0f) - (%.0f %.0f %.0f)\n", cm.lights.size(), cm.bounds.mn.x, cm.bounds.mn.y,
cm.bounds.mn.z, cm.bounds.mx.x, cm.bounds.mx.y, cm.bounds.mx.z);
std::map<std::string, int> classes;
for (const hmap::Entity& e : cm.entities) classes[e.classname]++;
std::printf(" entities: %zu\n", cm.entities.size());
for (auto& kv : classes) std::printf(" %-22s x%d\n", kv.first.c_str(), kv.second);
for (int i = 2; i + 1 < argc; ++i) {
if (!std::strcmp(argv[i], "--fbx")) std::printf("FBX: %s\n", hmap::exportFBX(argv[i + 1], cm) ? "written" : "failed");
if (!std::strcmp(argv[i], "--obj")) std::printf("OBJ: %s\n", hmap::exportOBJ(argv[i + 1], cm) ? "written" : "failed");
}
return 0;
}