This commit is contained in:
Nicholas Butzke
2026-08-02 02:20:02 -04:00
parent 61669627db
commit 922983429e
226 changed files with 34032 additions and 18521 deletions
+81
View File
@@ -0,0 +1,81 @@
extends SceneTree
## Structural checks for the map-cohesion pass.
##
## godot --headless --path . -s res://debug/sakura_boundary_audit.gd
const MAP := "res://scenes/maps/sakura_crossing/sakura_crossing.tscn"
const EXPECTED_AREA := Vector3(236.0, 60.0, 176.0)
var _level: Node
var _frames := 0
var _fails := 0
func _initialize() -> void:
_level = (load(MAP) as PackedScene).instantiate()
root.add_child(_level)
func _check(ok: bool, message: String) -> void:
print("BOUNDARY_AUDIT %s %s" % ["OK" if ok else "FAIL", message])
if not ok:
_fails += 1
func _process(_delta: float) -> bool:
_frames += 1
if _frames < 8:
return false
var area: CombatArea = null
for candidate in _level.find_children("*", "CombatArea", true, false):
area = candidate as CombatArea
break
_check(area != null, "combat area exists")
if area != null:
var collision := area.get_child(0) as CollisionShape3D
var box := collision.shape as BoxShape3D if collision != null else null
_check(box != null and box.size.is_equal_approx(EXPECTED_AREA),
"combat area matches the visible wall rectangle")
var gates: Array[Node] = []
for body in _level.find_children("*", "StaticBody3D", true, false):
if body.has_meta("boundary_gate"):
gates.append(body)
_check(gates.size() == 60, "six road closures have ten beam segments each")
var kei_cars := _level.find_children("KeiCar*", "Node3D", true, false)
_check(not kei_cars.is_empty(), "kei hatchbacks are present")
var house_meshes: Array[MeshInstance3D] = []
for body in _level.find_children("HouseBody*", "StaticBody3D", true, false):
var mesh := body.get_child(1) as MeshInstance3D
if mesh != null:
house_meshes.append(mesh)
var overlaps := 0
for i in range(house_meshes.size()):
for j in range(i + 1, house_meshes.size()):
var overlap := _global_aabb(house_meshes[i]).intersection(_global_aabb(house_meshes[j]))
if overlap.size.x > 0.02 and overlap.size.y > 0.02 and overlap.size.z > 0.02:
overlaps += 1
if overlaps <= 8:
print("BOUNDARY_AUDIT HOUSE_OVERLAP %s %s size=%s" % [
house_meshes[i].get_path(), house_meshes[j].get_path(), overlap.size])
_check(overlaps == 0, "detached house bodies do not overlap")
print("=== SAKURA BOUNDARY AUDIT: %s ===" %
("ALL CLEAR" if _fails == 0 else "%d FAILED" % _fails))
quit(0 if _fails == 0 else 1)
return true
func _global_aabb(mesh: MeshInstance3D) -> AABB:
var local := mesh.get_aabb()
var result := AABB(mesh.global_transform * local.position, Vector3.ZERO)
for x in 2:
for y in 2:
for z in 2:
var corner := local.position + Vector3(
local.size.x * float(x), local.size.y * float(y), local.size.z * float(z))
result = result.expand(mesh.global_transform * corner)
return result