Files
dreamer-game/tests/_probe.gd
2026-09-16 12:08:04 +02:00

92 lines
3.8 KiB
GDScript

extends Node
var main: Node3D
func _ready() -> void:
seed(20240)
main = load("res://scenes/main.tscn").instantiate()
add_child(main)
await get_tree().process_frame
main.ui.schliessen()
main._erde()
await get_tree().process_frame
# B: engste Wege mit Türen und Treppen
var liste: Array = []
for m in HumanDB.LIST:
var r: Array = m["routine"]
for i in range(r.size()):
var von: String = String(r[i - 1][1]) if i > 0 else String(r[r.size() - 1][1])
var nach: String = String(r[i][1])
if von == nach:
continue
var pts: Array = Orte.route_voll(HumanDB.PLACES, von, nach, Vector3.ZERO, m.get("etage", {}), HumanDB.NETZ, HumanDB.ANKER)
var l := 0.0
var pos := Orte.center(HumanDB.PLACES, von) + Vector3(0, Orte.hoehe(int(m.get("etage", {}).get(von, 0))), 0)
for pt in pts:
l += pos.distance_to(pt)
pos = pt
var slot_h: float = (float(r[i + 1][0]) - float(r[i][0])) if i + 1 < r.size() else (24.0 - float(r[i][0]))
liste.append([slot_h * 15.0 - l / 8.0, "%s %s->%s %.1fs / %.0fs" % [m["name"], von, nach, l / 8.0, slot_h * 15.0]])
liste.sort_custom(func(a, b): return a[0] < b[0])
for k in range(6):
print("ENG %s" % liste[k][1])
# C: Treppe hoch, was blockiert?
var sp: Player = main.player
var oben: Bewohner = null
for m in main.welt.humans:
if m.etage(str(m.data["heim"])) > 0:
oben = m
break
var heim := str(oben.data["heim"])
var pl: Dictionary = HumanDB.PLACES[heim]
print("HAUS %s size=%s dir=%s etagen=%d" % [heim, str(pl["size"]), pl["dir"], Orte.etagen(HumanDB.PLACES, heim)])
var t1 := Orte.treppe(HumanDB.PLACES, heim, 1)
var stufen: Array = Orte.treppen_lauf(HumanDB.PLACES, heim, 0)
sp.global_position = (stufen[0] as Vector3) + Vector3(0, 0.3, 0)
sp.velocity = Vector3.ZERO
var lauf: Vector3 = stufen[1] - stufen[0]
lauf.y = 0.0
sp.yaw = atan2(-lauf.x, -lauf.z)
Input.action_press("vor")
var hoechste := 0.0
for i in range(70):
await get_tree().physics_frame
hoechste = maxf(hoechste, sp.global_position.y)
if i % 10 == 9 or i == 69:
var k := sp.get_last_slide_collision()
var txt := "-"
if k != null and k.get_collider() != null:
var body: Node = k.get_collider()
var mi: Node = body.get_parent()
txt = "%s pos=%s size=%s normal=%s" % [mi.name, str(mi.global_position), str((mi as MeshInstance3D).mesh.get("size")) if mi is MeshInstance3D else "?", str(k.get_normal())]
print("TREPPE f=%d pos=%s y=%.2f koll=%s" % [i, str(sp.global_position), sp.global_position.y, txt])
Input.action_release("vor")
print("TREPPE hoechste=%.2f t1=%s" % [hoechste, str(t1)])
# E: Verfolgung -- wo reißt die Leine?
var mensch: Bewohner = main.welt.humans[0]
sp.global_position = mensch.global_position + Vector3(0, 0.3, 0)
sp.velocity = Vector3.ZERO
sp.folgt = mensch
var weiteste := 0.0
for i in range(2400):
await get_tree().physics_frame
var d := sp.global_position.distance_to(mensch.global_position)
if d > weiteste:
weiteste = d
if d > 6.0 and i % 5 == 0:
var k := sp.get_last_slide_collision()
var txt := "-"
if k != null and k.get_collider() != null:
var mi: Node = (k.get_collider() as Node).get_parent()
txt = "%s pos=%s" % [mi.name, str(mi.global_position)]
print("LEINE f=%d d=%.1f geist=%s mensch=%s ort=%s pfad=%d koll=%s" % [i, d, str(sp.global_position), str(mensch.global_position), mensch.place, mensch._path.size(), txt])
print("LEINE weiteste=%.1f" % weiteste)
# D: wieder anhängen
sp.folgt = null
sp.global_position = mensch.global_position + Vector3(0, 1.5, 2.0)
sp.velocity = Vector3.ZERO
main._process(0.05)
print("ANHAENGEN fokus_mensch=%s fokus=%s d=%.2f geist=%s mensch=%s auf_erde=%s offen=%s" % [
str(main._fokus_mensch), str(main._fokus), sp.global_position.distance_to(mensch.global_position + Vector3(0, 1, 0)),
str(sp.global_position), str(mensch.global_position), str(main.auf_erde), str(main.ui.offen)])
get_tree().quit()