xrjamfeb2025/scenes/pickable_demo/objects/knife.gd

51 lines
1.5 KiB
GDScript

@tool
extends XRToolsPickable
# Current controller holding this object
var _current_controller : XRController3D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
# In Godot 4 we must now manually call our super class ready function
super()
# Listen for when this object is picked up or dropped
picked_up.connect(_on_picked_up)
dropped.connect(_on_dropped)
# Called when this object is picked up
func _on_picked_up(_pickable) -> void:
# Listen for button events on the associated controller
_current_controller = get_picked_up_by_controller()
if _current_controller:
_current_controller.button_pressed.connect(_on_controller_button_pressed)
# Called when this object is dropped
func _on_dropped(_pickable) -> void:
# Unsubscribe to controller button events when dropped
if _current_controller:
_current_controller.button_pressed.disconnect(_on_controller_button_pressed)
_current_controller = null
# Called when a controller button is pressed
func _on_controller_button_pressed(button : String):
# Skip if not pose-toggle button
if button != "by_button":
return
# Switch the grab point
var active_grab_point := get_active_grab_point()
if active_grab_point == $GrabPointHandLeft:
switch_active_grab_point($GrabPointGripLeft)
elif active_grab_point == $GrabPointHandRight:
switch_active_grab_point($GrabPointGripRight)
elif active_grab_point == $GrabPointGripLeft:
switch_active_grab_point($GrabPointHandLeft)
elif active_grab_point == $GrabPointGripRight:
switch_active_grab_point($GrabPointHandRight)