extends Node3D # Wir definieren unsere 3 Altersstufen enum AgeState { BABY, CHILD, TEEN } # Startalter ist BABY var current_age = AgeState.BABY # Referenzen zu den anderen Nodes (müssen im Inspektor zugewiesen werden) @export var controller : XRController3D @export var player_body : CharacterBody3D @export var player : XROrigin3D # Referenz zum Aussehen der Uhr (für Farbänderung) @onready var visual_mesh = $Player func _ready(): # 1. Controller finden, falls nicht zugewiesen if not controller: # Wir gehen im Baum nach oben: Watch -> Area3D -> RightController controller = get_parent().get_parent() # 2. Signal verbinden if controller: controller.button_pressed.connect(_on_button_pressed) print("Uhr verbunden mit Controller: ", controller.name) else: printerr("FEHLER: Kein Controller gefunden!") # 3. Initiale Werte setzen (damit wir als Baby starten) apply_age_physics() update_visuals() func _on_button_pressed(button_name: String): # Input Abfrage (A/B oder X/Y je nach Controller) match button_name: "trigger_click": # Älter werden change_age(1) "grip_click": # Jünger werden change_age(-1) func change_age(direction: int): var new_age_value = current_age + direction # Begrenzen: Nicht jünger als Baby, nicht älter als Teen 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 # Wenn gültig, Alter ändern current_age = new_age_value print("Alter geändert zu: ", AgeState.keys()[current_age]) # Physik und Aussehen aktualisieren apply_age_physics() update_visuals() func apply_age_physics(): # Sicherheitscheck if not player_body: printerr("ACHTUNG: PlayerBody ist im Inspektor nicht zugewiesen!") return # Hier ändern wir die Min/Max Werte des XRToolsPlayerBody match current_age: AgeState.BABY: # Baby: Sehr klein # Min muss niedrig sein für Krabbeln/Ducken player_body.player_height_min = 0.2 # Max begrenzt die Kapselhöhe auf ca. 60cm player_body.player_height_max = 0.6 player.translate(Vector3(0, 0.05, 0)) AgeState.CHILD: # Kind: Mittelgroß player_body.player_height_min = 0.3 # Max begrenzt auf ca. 1.20m player_body.player_height_max = 1.2 player.translate(Vector3(0, 0.05, 0)) AgeState.TEEN: # Teenager: Standard VR Werte (Groß) player_body.player_height_min = 0.6 # Max ist hoch genug für jeden Erwachsenen (2.5m ist Standard-Puffer) player_body.player_height_max = 2.5 player.translate(Vector3(0, 0.05, 0)) func update_visuals(): # Ändert die Farbe der Uhr zur Bestätigung if visual_mesh and visual_mesh.material: # Falls das Material nicht unique ist, erstellen wir eine Kopie, damit nicht alle Meshes die Farbe ändern if not visual_mesh.material.resource_local_to_scene: visual_mesh.material = visual_mesh.material.duplicate() var mat = visual_mesh.material as StandardMaterial3D match current_age: AgeState.BABY: mat.albedo_color = Color.HOT_PINK # Baby AgeState.CHILD: mat.albedo_color = Color.ORANGE # Kind AgeState.TEEN: mat.albedo_color = Color.GRAY # Teen