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