// 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 #include #include #include int main(int argc, char** argv) { if (argc < 2) { std::puts("usage: hmap_info [--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 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; }