Files
dreamer-game/tests/shots.gd
2026-08-29 11:43:53 +02:00

151 lines
3.6 KiB
GDScript

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, 3.0, 26.0)
main.player.yaw = 0.0
main.player.pitch = -0.10
await warte(20)
await knipse("02_traumwelt")
main.player.global_position = Vector3(-24, 2.0, 4.0)
main.player.yaw = 0.0
main.player.pitch = -0.02
await warte(20)
await knipse("03_bibliothek_aussen")
Game.teleport_lock = 0.0
main.player.global_position = Vector3(0, -299.0, 2.0)
main.player.yaw = 0.0
main.player.pitch = -0.12
await warte(30)
await knipse("04_bibliothek_innen")
main.ui.technik_panel("pomodoro")
await warte(6)
await knipse("05_technik_hinweise")
main.ui.schliessen()
Game.learn("pomodoro")
Game.learn("zerlegen")
Game.learn("box_atmung")
main.player.global_position = Vector3(90, -299.0, 2.0)
main.player.yaw = 0.0
main.player.pitch = -0.08
await warte(20)
await knipse("06_missionshalle")
main.ui.mission_panel("lena")
await warte(6)
await knipse("07_mission_panel")
main.ui.schliessen()
Game.accept_mission("lena")
main.ui.kodex_panel()
await warte(6)
await knipse("08_kodex")
main.ui.schliessen()
Game.teleport_lock = 0.0
main.player.global_position = Vector3(-90, -299.0, 5.0)
main.player.yaw = 0.0
main.player.pitch = -0.1
await warte(20)
await knipse("08b_meditation")
main.ui.vertiefen_panel()
await warte(6)
await knipse("08c_vertiefen")
main.ui.schliessen()
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("09_erde_uebersicht")
var lena: Human = 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 Human:
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("10_lena_zoegert")
main.ui.anwenden_panel(lena)
await warte(6)
await knipse("11_anwenden")
main.ui._anwenden("pomodoro")
await warte(25)
await knipse("12_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 Human:
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("13_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("14_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)