Explosion_der_Spiele/scripts/levels/intro_cutscene.gd
copilot 1cc8aa9b9d Add village 3D wiring, voice lines, and 1.74 m world scale.
Houses ~8.5 m; chimps capped ~0.85 m with safer axis fitting. Large GLB/PBR packs stay local until Git LFS (Forgejo HTTP 413).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 12:02:57 +02:00

76 lines
2.4 KiB
GDScript

extends Control
## Intro: Tisch, Konsole, Sprecher, Explosion — Platzhalter unter assets/sprites/placeholders/.
const TEX_CONSOLE := preload("res://assets/sprites/placeholders/console.png")
const TEX_CONSOLE_BOOM := preload("res://assets/sprites/placeholders/console_exploded.png")
@onready var label: Label = $Label
@onready var console: TextureRect = $Console
@onready var boom_flash: TextureRect = $BoomFlash
@onready var speaker: TextureRect = $Speaker
var _step: int = 0
func _ready() -> void:
GameState.current_scene_id = "intro_cutscene"
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
AudioDirector.stop_music()
# Decorative full-screen nodes must not eat clicks meant to advance.
mouse_filter = Control.MOUSE_FILTER_STOP
for child_name in ["Bg", "Desk", "Console", "Speaker", "BoomFlash", "Label", "Hint"]:
var n := get_node_or_null(child_name) as Control
if n:
n.mouse_filter = Control.MOUSE_FILTER_IGNORE
console.texture = TEX_CONSOLE
boom_flash.visible = false
_show_step()
func _gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
_advance()
accept_event()
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("skip_cutscene") \
or event.is_action_pressed("dialog_advance") \
or event.is_action_pressed("ui_accept") \
or event.is_action_pressed("interact") \
or event.is_action_pressed("attack"):
_advance()
get_viewport().set_input_as_handled()
func _show_step() -> void:
match _step:
0:
# Sprecher + intakte Konsole auf dem Tisch
speaker.visible = true
boom_flash.visible = false
console.texture = TEX_CONSOLE
console.modulate = Color.WHITE
label.text = Locale.tr_key("dialog_intro_1")
AudioDirector.play_dialog_line("dialog_intro_1")
1:
# Explosion
AudioDirector.play_explosion()
speaker.visible = false
boom_flash.visible = true
console.texture = TEX_CONSOLE_BOOM
console.modulate = Color(1.2, 0.7, 0.4, 1)
label.text = "BOOM"
2:
# Nachspiel: Trümmer — same confirm keys as VN (Enter/C) + intro keys
boom_flash.visible = false
console.texture = TEX_CONSOLE_BOOM
console.modulate = Color(0.7, 0.55, 0.45, 1)
label.text = Locale.tr_key("dialog_intro_2")
AudioDirector.play_dialog_line("dialog_intro_2")
_:
AudioDirector.stop_voice()
GameState.goto_scene("village")
func _advance() -> void:
_step += 1
_show_step()
func _on_skip_pressed() -> void:
_advance()