extends Node3D # Wir definieren unsere 2 Altersstufen enum AgeState { BABY, TEEN } var current_age = AgeState.BABY # Referenzen zu den anderen Nodes @export var controller : XRController3D @export var player_body : CharacterBody3D @export var player : XROrigin3D @export var world_env : WorldEnvironment @export var movement_direct : Node # NEU: Referenz zur Kamera für den FOV-Effekt @export var camera : Camera3D func _ready(): if not controller: controller = get_parent().get_parent() if controller: controller.button_pressed.connect(_on_button_pressed) print("Uhr verbunden mit Controller: ", controller.name) # Initial einmal hart setzen apply_age_physics(false) func _on_button_pressed(button_name: String): match button_name: "trigger_click": # Älter change_age(1) "grip_click": # Jünger change_age(-1) func change_age(direction: int): var new_age_value = current_age + direction if new_age_value < AgeState.BABY: print("Du bist schon ein Baby!") return elif new_age_value > AgeState.TEEN: print("Du bist schon erwachsen!") return current_age = new_age_value print("Wechsle Alter zu: ", AgeState.keys()[current_age]) apply_age_physics(true) func apply_age_physics(animate: bool = true): # Sicherheitscheck erweitert um Camera if not player_body or not world_env or not movement_direct or not camera: printerr("FEHLER: Bitte ALLE Nodes (auch Camera) im Inspektor zuweisen!") return # Ziel-Werte definieren var target_saturation = 1.0 var target_height_max = 0.0 var target_height_min = 0.0 var target_speed = 0.0 var target_fov = 75.0 # NEU: Variable für FOV var translation_step = Vector3.ZERO match current_age: AgeState.BABY: target_saturation = 2.0 target_height_min = 0.2 target_height_max = 0.6 target_speed = 1.0 target_fov = 40.0 # NEU: Enger Blick (Baby Tunnelblick) translation_step = Vector3(0, 0.05, 0) AgeState.TEEN: target_saturation = 0.5 target_height_min = 0.6 target_height_max = 2.5 target_speed = 3.0 target_fov = 75.0 # NEU: Normaler Blick translation_step = Vector3(0, 0.5, 0) # Sofortige Änderungen (Sicherheit) if animate: player.translate(translation_step) player_body.player_height_min = target_height_min if animate: # --- ANIMATION START --- var tween = create_tween() tween.set_parallel(true) tween.set_trans(Tween.TRANS_SINE) tween.set_ease(Tween.EASE_IN_OUT) # 1. Environment Sättigung tween.tween_property(world_env.environment, "adjustment_saturation", target_saturation, 1.0) # 2. Körpergröße tween.tween_property(player_body, "player_height_max", target_height_max, 1.0) # 3. Geschwindigkeit tween.tween_property(movement_direct, "max_speed", target_speed, 1.0) # 4. Kamera FOV (NEU) tween.tween_property(camera, "fov", target_fov, 1.0) else: # Start-Setup (Hart setzen) world_env.environment.adjustment_saturation = target_saturation player_body.player_height_max = target_height_max movement_direct.max_speed = target_speed camera.fov = target_fov # NEU