62 lines
2.6 KiB
GDScript
62 lines
2.6 KiB
GDScript
extends SceneTree
|
|
|
|
func _initialize() -> void:
|
|
call_deferred("run_test")
|
|
|
|
func run_test() -> void:
|
|
var world = load("res://scenes/main.tscn").instantiate()
|
|
root.add_child(world)
|
|
var office = world.get_node("OfficeAtmosphere")
|
|
assert(get_nodes_in_group("office_props").size() == 6)
|
|
var desks := 0
|
|
var chairs := 0
|
|
for prop in get_nodes_in_group("office_props"):
|
|
if prop.name.begins_with("OfficeDesk"):
|
|
desks += 1
|
|
if prop.name.begins_with("OfficeChair"):
|
|
chairs += 1
|
|
assert(prop.collision_layer == 1)
|
|
assert(desks == 2 and chairs == 3)
|
|
print("PASS: due scrivanie, tre sedie, bidone con collisioni")
|
|
var flames = office.get_node("FireBarrel/BarrelFlames")
|
|
assert(flames is CPUParticles3D and flames.amount == 28 and flames.emitting)
|
|
assert(office.fire_light.shadow_enabled)
|
|
for i in 100:
|
|
office._process(0.016)
|
|
assert(office.fire_light.light_energy >= office.FIRE_MIN and office.fire_light.light_energy <= office.FIRE_MAX)
|
|
print("PASS: fiamme CPU leggere e flicker continuo entro limiti")
|
|
var lights: Array[Node] = world.find_children("*", "OmniLight3D", true, false)
|
|
assert(lights.size() == 4) # due lampade, bidone, muzzle flash
|
|
assert(world.find_children("DeskLampLight", "OmniLight3D", true, false).size() == 2)
|
|
for node in world.get_children():
|
|
assert(not node is OmniLight3D) # nessuna plafoniera
|
|
if node is WorldEnvironment:
|
|
assert(node.environment.ambient_light_energy <= 0.15)
|
|
print("PASS: plafoniera rimossa, ambient basso e quattro luci totali")
|
|
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)]:
|
|
var q := PhysicsRayQueryParameters3D.create(edge, Vector3(0, 0.8, 0), 1)
|
|
q.exclude = [world.player.get_rid()]
|
|
assert(space.intersect_ray(q).is_empty())
|
|
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")
|
|
if "--screenshot" in OS.get_cmdline_user_args():
|
|
world.player.set_physics_process(false)
|
|
world.player.position = Vector3(0, 0.1, 0)
|
|
world.player.camera.rotation.x = -0.08
|
|
for i in 3:
|
|
if i == 2:
|
|
world.player.look_at(Vector3(-4, 0.1, 4))
|
|
else:
|
|
world.player.rotation.y = -PI * 0.25 if i == 0 else PI * 0.25 + PI
|
|
await create_timer(0.4).timeout
|
|
await RenderingServer.frame_post_draw
|
|
root.get_texture().get_image().save_png("/tmp/zombie-office-%d.png" % i)
|
|
world.queue_free()
|
|
await process_frame
|
|
quit()
|