extends SceneTree
## Headless diagnostic: run the Quake importer on START.MAP and dump the recovered
## liquid_volumes (count + per-volume AABB size) so we can see whether the swim volumes
## are real 3D boxes or collapsed/degenerate. Run:
## "$HYPER_TPS_GODOT" --headless --script res://scenes/test/liquid_dump.gd
class StubTerrain extends Node:
func edit_terrain_box(_c, _h, _s, _i, _m) -> void: pass
func edit_terrain_convex(_planes, _c, _r, _s, _i, _m, _fp) -> void: pass
func _init() -> void:
var map_path := "/storage/projects/gamedev/quake/quakemash/START.MAP"
var importer := QuakeMapImporter.new()
var stub := StubTerrain.new()
var n := importer.import_file(stub, map_path, 0.028, Vector3(0, 20, 0), 1.0, null, true, {})
print("stamped=%d liquids=%d teleports=%d" % [n, importer.liquid_volumes.size(), importer.teleport_volumes.size()])
var by_class := {}
var i := 0
for v in importer.liquid_volumes:
var sz: Vector3 = (v.aabb_max as Vector3) - (v.aabb_min as Vector3)
by_class[v.get("class", "?")] = int(by_class.get(v.get("class", "?"), 0)) + 1
if i < 12:
print(" [%d] %s tex=%s size(m)=%s top_y=%.2f min=%s max=%s" % [
i, v.get("class", "?"), v.get("tex", ""), str(sz.round()),
float(v.get("top_y", 0.0)), str((v.aabb_min as Vector3).round()),
str((v.aabb_max as Vector3).round())])
i += 1
print("by_class=", by_class)
print("teleport_triggers=%d destinations=%d" % [
importer.teleport_triggers.size(), importer.teleport_destinations.size()])
for t in importer.teleport_triggers:
var d = importer.teleport_destinations.get(t.get("target", ""), null)
print(" trig target=%s -> %s" % [t.get("target", "?"),
("dest " + str((d.pos as Vector3).round()) + " yaw=%.2f" % d.yaw) if d != null else "NO DEST"])
print("doors=%d" % importer.doors.size())
for d in importer.doors:
print(" door tex=%s move_dir=%s dist=%.2f speed=%.2f wait=%s tgt=%s" % [
d.get("tex","?"), str((d.move_dir as Vector3).round()), float(d.move_distance),
float(d.speed), str(d.wait), str(d.targetname)])
quit()