extends CharacterBody3D @export var move_speed: float = 5.0 @export var gravity: float = 9.8 var camera_rig: Node3D @onready var sprite: AnimatedSprite3D = $AnimatedSprite3D # Nur in world/island.tscn vorhanden, nicht in diesem Debug-Prototyp -> optional @onready var equipment: Equipment = get_node_or_null("Equipment") func _ready() -> void: camera_rig = get_tree().get_first_node_in_group("camera_rig") if camera_rig == null: push_error("CameraRig nicht gefunden! Gruppe 'camera_rig' gesetzt?") func _physics_process(delta: float) -> void: # Bewegung sperren während Interaction if InteractionManager.active: velocity = Vector3.ZERO return # Schwerkraft if not is_on_floor(): velocity.y -= gravity * delta # Eingabe var input_dir = Vector2( Input.get_axis("move_left", "move_right"), Input.get_axis("move_forward", "move_backward") ) if input_dir != Vector2.ZERO: var cam_basis = camera_rig.global_transform.basis var forward = -cam_basis.z var right = cam_basis.x forward.y = 0 right.y = 0 forward = forward.normalized() right = right.normalized() var move_dir = (forward * -input_dir.y + right * input_dir.x).normalized() velocity.x = move_dir.x * move_speed velocity.z = move_dir.z * move_speed _update_animation(input_dir) else: velocity.x = move_toward(velocity.x, 0, move_speed) velocity.z = move_toward(velocity.z, 0, move_speed) sprite.play("idle") move_and_slide() func _update_animation(input_dir: Vector2) -> void: if input_dir.y > 0.1: sprite.play("move_down") elif input_dir.y < -0.1: sprite.play("move_up") elif input_dir.x > 0.1: sprite.play("move_right") elif input_dir.x < -0.1: sprite.play("move_left") else: sprite.play("idle")