extends XRController3D @export var weapon_scene: PackedScene @export var weapon_offset := Vector3(0, 0, -0.1) @export var weapon_rotation := Vector3(0, 0, 0) @export var equip_duration := 0.3 var current_weapon: Weapon = null var weapon_equipped := false var is_animating := false func _ready(): button_pressed.connect(_on_button_pressed) button_released.connect(_on_button_released) func _on_button_pressed(button: String): match button: "grip_click": if not is_animating: equip_weapon() "trigger_click": if weapon_equipped and current_weapon and not is_animating: if current_weapon.shoot(): trigger_haptic_pulse("haptic", 0, 0.5, 0.1, 0) func _on_button_released(button: String): match button: "grip_click": if not is_animating: unequip_weapon() func equip_weapon(): if weapon_equipped or not weapon_scene or is_animating: return is_animating = true # Waffe instanzieren current_weapon = weapon_scene.instantiate() as Weapon add_child(current_weapon) # Startposition (außerhalb Sichtfeld) current_weapon.position = weapon_offset + Vector3(0, -0.5, 0) current_weapon.rotation_degrees = weapon_rotation current_weapon.scale = Vector3.ZERO # Smooth Animation var tween = create_tween() tween.set_parallel(true) tween.tween_property(current_weapon, "position", weapon_offset, equip_duration)\ .set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) tween.tween_property(current_weapon, "scale", Vector3.ONE, equip_duration)\ .set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT) tween.finished.connect(func(): weapon_equipped = true is_animating = false ) # Haptisches Feedback trigger_haptic_pulse("haptic", 0, 0.3, 0.05, 0) func unequip_weapon(): if not weapon_equipped or not current_weapon or is_animating: return is_animating = true weapon_equipped = false # Smooth Animation var tween = create_tween() tween.set_parallel(true) tween.tween_property(current_weapon, "position", weapon_offset + Vector3(0, -0.5, 0), equip_duration)\ .set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) tween.tween_property(current_weapon, "scale", Vector3.ZERO, equip_duration)\ .set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN) tween.finished.connect(func(): if current_weapon: current_weapon.queue_free() current_weapon = null is_animating = false ) # Haptisches Feedback trigger_haptic_pulse("haptic", 0, 0.2, 0.05, 0)