92 lines
3.8 KiB
GDScript
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()
|