vrp-gruppe-sechs/quad-splash/right_hand.gd

87 lines
2.4 KiB
GDScript

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)