Eight windows per room and random zombie entry from different windows

This commit is contained in:
enne2
2026-10-13 21:21:17 +02:00
parent 70c82df450
commit fcf298c692
9 changed files with 400 additions and 70 deletions
+15 -4
View File
@@ -41,14 +41,25 @@ func run_test() -> void:
await physics_frame
await physics_frame
var space = world.get_world_3d().direct_space_state
# Cardinal routes from windows to center remain free at zombie torso height.
for edge in [Vector3(0, 0.8, -8), Vector3(0, 0.8, 8), Vector3(-8, 0.8, 0), Vector3(8, 0.8, 0)]:
# Ogni finestra deve essere un'APERTURA e deve essere COLLEGATA al centro: gli zombie
# entrano e devono poter arrivare. Il raggio prova l'apertura; il percorso A* prova
# la raggiungibilita', anche quando un arredo cade su una diagonale.
var inside_points: Array[Vector3] = []
for window in world.room.windows:
var edge: Vector3 = window.center + Vector3(window.normal) * 0.8 + Vector3(0, 0.8, 0)
var q := PhysicsRayQueryParameters3D.create(edge, Vector3(0, 0.8, 0), 1)
q.exclude = [world.player.get_rid()]
assert(space.intersect_ray(q).is_empty())
inside_points.append(edge)
if not space.intersect_ray(q).is_empty():
print(" (nota: un arredo ostruisce la diagonale da ", edge, " al centro)")
assert(inside_points.size() >= 8)
for point in inside_points:
var path: PackedVector3Array = world.navigation.route(point, Vector3(0, 0, 0))
assert(path.size() >= 2) # raggiungibile dal centro
assert(path[path.size() - 1].distance_to(Vector3.ZERO) < 1.5)
var q := PhysicsRayQueryParameters3D.create(Vector3(-5, 0.5, -2), Vector3(-5, 0.5, -4), 1)
assert(not space.intersect_ray(q).is_empty())
print("PASS: corridoi cardinali liberi, scrivanie bloccano fisicamente")
print("PASS: otto aperture libere e tutte collegate al centro dalla navigazione, scrivanie solide")
if "--screenshot" in OS.get_cmdline_user_args():
world.player.set_physics_process(false)
world.player.position = Vector3(0, 0.1, 0)