grunk/src/player/interact_ray.gd

36 lines
887 B
GDScript

extends RayCast3D
## Component for interacting with Interactive things.
var _selected: Object
@onready var parent := owner as Player
func _deselect() -> void:
if _selected and is_instance_valid(_selected):
_selected.emit_signal(Interactive.DESELECT_SIGNAL)
_selected = null
func _process(_delta: float) -> void:
var collider := self.get_collider()
if not collider:
_deselect()
return
if collider.has_user_signal(Interactive.SELECT_SIGNAL):
if collider != _selected:
if not _selected and is_instance_valid(_selected):
_selected.emit_signal(Interactive.DESELECT_SIGNAL)
_selected = collider
collider.emit_signal(Interactive.SELECT_SIGNAL)
else:
_deselect()
if (
parent.activity_enabled
and Input.is_action_just_pressed("interact")
and collider.has_user_signal(Interactive.ACTIVATE_SIGNAL)
):
collider.emit_signal(Interactive.ACTIVATE_SIGNAL)