extends Node ## Fährt das Spiel mit Fenster und legt Screenshots ab, um die Welt ## auch optisch zu prüfen. const OUT := "user://shots/" var main: Node3D var n := 0 func _process(_d: float) -> void: # Maus des Nutzers nicht einfangen, während die Bilder entstehen Input.mouse_mode = Input.MOUSE_MODE_VISIBLE func _ready() -> void: DirAccess.make_dir_recursive_absolute(ProjectSettings.globalize_path(OUT)) main = load("res://scenes/main.tscn").instantiate() add_child(main) await get_tree().process_frame await get_tree().process_frame await knipse("01_intro") main.ui.schliessen() main.player.global_position = Vector3(0, 4.0, 34.0) main.player.yaw = 0.0 main.player.pitch = -0.14 Game.time_h = 10.0 await warte(30) await knipse("02_traumwelt") main.player.global_position = Vector3(0, 12.0, 30.0) main.player.pitch = -0.5 await warte(20) await knipse("03_traumdorf_ueberblick") var haus := Orte.center(DreamDB.PLACES, "haus_ailen") main.player.global_position = haus + Vector3(0, 2.0, 12.0) main.player.yaw = 0.0 main.player.pitch = -0.18 await warte(20) await knipse("04_haus_aussen") # ein Wesen in seinem Haus var ailen: Bewohner = null for w in main.welt.bewohner: if w.data["id"] == "ailen": ailen = w for i in range(900): main._process(0.05) for k in main.welt.get_children(): if k is Bewohner: k._process(0.05) Game.time_h = 10.0 if ailen.place == "haus_ailen" and ailen._path.is_empty(): break main.player.global_position = ailen.global_position + Vector3(3.0, 0.6, 1.2) main.player.yaw = -PI * 0.32 main.player.pitch = -0.06 await warte(20) await knipse("05_haus_innen") main.ui.journal_panel("techniken") await warte(6) await knipse("06_journal_techniken") main.ui.schliessen() Game.learn("pomodoro") Game.learn("zerlegen") Game.learn("box_atmung") main.ui.journal_panel("missionen") await warte(6) await knipse("07_journal_missionen") main.ui.schliessen() Game.accept_mission("lena") # Lichtung, wenn sich die Wesen dort treffen for i in range(1200): main._process(0.05) for k in main.welt.get_children(): if k is Bewohner: k._process(0.05) Game.time_h = 19.5 main.player.global_position = Vector3(0.0, 1.0, 22.0) main.player.yaw = 0.0 main.player.pitch = -0.20 await warte(20) await knipse("08_lichtung") var tor := Orte.center(DreamDB.PLACES, "tor") main.player.global_position = tor + Vector3(0, 2.5, 14.0) main.player.yaw = 0.0 main.player.pitch = -0.12 await warte(20) await knipse("09_tor_zur_erde") main._erde() Game.time_h = 10.5 await warte(40) main.player.global_position = Vector3(0, 26.0, 42.0) main.player.pitch = -0.62 main.player.yaw = 0.0 await warte(20) await knipse("10_erde_uebersicht") var lena: Bewohner = null for m in main.welt.humans: if m.data["id"] == "lena": lena = m for i in range(900): main._process(0.05) for k in main.welt.get_children(): if k is Bewohner: k._process(0.05) Game.time_h = 10.5 if lena.place == "haus_lena" and lena._path.is_empty(): break main.player.global_position = lena.global_position + Vector3(0, 1.2, -4.5) main.player.yaw = PI main.player.pitch = -0.15 await warte(20) await knipse("11_lena_zoegert") main.ui.anwenden_panel(lena) await warte(6) await knipse("12_anwenden") main.ui._anwenden("pomodoro") await warte(25) await knipse("13_reaktion") Game.time_h = 13.5 for i in range(1200): main._process(0.05) for k in main.welt.get_children(): if k is Bewohner: k._process(0.05) Game.time_h = 13.5 main.player.global_position = Vector3(0, 11.0, -14.0) main.player.yaw = PI main.player.pitch = -0.5 await warte(20) await knipse("14_cafe_mittag") Game.time_h = 22.5 await warte(40) main.player.global_position = Vector3(0, 18.0, 34.0) main.player.yaw = 0.0 main.player.pitch = -0.5 await warte(20) await knipse("15_nacht") print("Screenshots: %d" % n) print("Ordner: %s" % ProjectSettings.globalize_path(OUT)) get_tree().quit() func warte(frames: int) -> void: for i in range(frames): await get_tree().process_frame func knipse(bezeichnung: String) -> void: await RenderingServer.frame_post_draw var img := get_viewport().get_texture().get_image() img.save_png(OUT + bezeichnung + ".png") n += 1 print(" Bild: " + bezeichnung)