36 lines
1.8 KiB
C++
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;
|
|
}
|