vrp-years-apart/victory_zone.gd

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()