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>
76 lines
2.4 KiB
GDScript
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()
|