51 lines
1.4 KiB
GDScript
51 lines
1.4 KiB
GDScript
extends Area3D
|
|
|
|
# Referenzen (müssen wir gleich zuweisen)
|
|
@export var fade_mesh : MeshInstance3D
|
|
@export var victory_label : Label3D
|
|
@export var victory_label2 : Label3D
|
|
@export var victory_music : AudioStreamPlayer
|
|
|
|
var is_triggered = false
|
|
|
|
func _ready():
|
|
body_entered.connect(_on_finish_line)
|
|
|
|
func _on_finish_line(body):
|
|
# Wir prüfen, ob der PlayerBody (vom XRToolsPlayerBody) durchläuft
|
|
# Oder der "CharacterBody3D" name. Meistens heißt er "PlayerBody"
|
|
if not is_triggered and (body.name == "PlayerBody" or body is CharacterBody3D):
|
|
finish_game()
|
|
|
|
func finish_game():
|
|
is_triggered = true
|
|
print("VICTORY!")
|
|
|
|
# 1. Musik starten
|
|
if victory_music:
|
|
victory_music.play()
|
|
|
|
# 2. Visuelles Fading (Tweening)
|
|
var tween = create_tween()
|
|
tween.set_parallel(true) # Alles gleichzeitig
|
|
|
|
# A. Bildschirm Schwarz machen (Alpha von 0 auf 1)
|
|
if fade_mesh:
|
|
# Wir holen das Material
|
|
var mat = fade_mesh.get_surface_override_material(0)
|
|
if mat:
|
|
tween.tween_property(mat, "albedo_color:a", 1.0, 3.0) # 3 Sekunden Fade
|
|
|
|
# B. Text einblenden
|
|
if victory_label:
|
|
tween.tween_property(victory_label, "modulate:a", 1.0, 3.0)
|
|
tween.tween_property(victory_label, "outline_modulate:a", 1.0, 3.0)
|
|
|
|
if victory_label2:
|
|
tween.tween_property(victory_label2, "modulate:a", 1.0, 3.0)
|
|
tween.tween_property(victory_label2, "outline_modulate:a", 1.0, 3.0)
|
|
|
|
# C. Optional: Nach 5 Sekunden Spiel beenden?
|
|
await get_tree().create_timer(50.0).timeout
|
|
get_tree().quit()
|