Wolf den search steps into the valley when the rim is steep everywhere
This commit is contained in:
42
tests/test_den_sites.gd
Normal file
42
tests/test_den_sites.gd
Normal file
@@ -0,0 +1,42 @@
|
||||
extends SceneTree
|
||||
## Every island gets a wolf den: across many seeds the site search finds a
|
||||
## spot away from the spawn and the sea.
|
||||
## Run: godot --headless --path . --script res://tests/test_den_sites.gd
|
||||
|
||||
const SEEDS := [777, 4, 1337, 1, 2, 3, 5, 6, 7, 8, 9, 10, 42, 99, 123, 2024, 4242, 9001, 31337, 65535]
|
||||
|
||||
var _fails := 0
|
||||
|
||||
func check(cond: bool, what: String) -> void:
|
||||
print((" ok " if cond else " FAIL ") + what)
|
||||
if not cond:
|
||||
_fails += 1
|
||||
|
||||
func _initialize() -> void:
|
||||
_run.call_deferred()
|
||||
|
||||
func _run() -> void:
|
||||
var S: Node = root.get_node("Saves")
|
||||
S.root_dir = "user://test_den_sites"
|
||||
for seed in SEEDS:
|
||||
for w in S.list_worlds():
|
||||
S.delete_world(w.id)
|
||||
S.current_id = S.create_world("Den %d" % seed, seed)
|
||||
var world: Node3D = load("res://scenes/world.tscn").instantiate()
|
||||
root.add_child(world)
|
||||
for _i in range(3):
|
||||
await physics_frame
|
||||
var den: Node3D = world.den
|
||||
var t: Node3D = world.terrain
|
||||
var p: Vector3 = den.position
|
||||
var ok: bool = den.found
|
||||
if ok:
|
||||
ok = Vector2(p.x, p.z).length() >= 50.0 and t.sea_weight(p.x, p.z) <= 0.02
|
||||
check(ok, "seed %d has a den (%.0f m from the centre)" % [seed, Vector2(p.x, p.z).length()])
|
||||
world.queue_free()
|
||||
await physics_frame
|
||||
for w in S.list_worlds():
|
||||
S.delete_world(w.id)
|
||||
DirAccess.remove_absolute(S.root_dir)
|
||||
print("RESULT: %s (%d failures)" % ["PASS" if _fails == 0 else "FAIL", _fails])
|
||||
quit(1 if _fails > 0 else 0)
|
||||
Reference in New Issue
Block a user