grunk/src/player/interact_ray.gd

36 lines
887 B
GDScript3
Raw Normal View History

2025-07-04 13:13:18 -06:00
extends RayCast3D
## Component for interacting with Interactive things.
2025-07-06 15:22:39 -06:00
var _selected: Object
2025-07-04 13:13:18 -06:00
@onready var parent := owner as Player
2025-07-06 15:22:39 -06:00
func _deselect() -> void:
if _selected and is_instance_valid(_selected):
_selected.emit_signal(Interactive.DESELECT_SIGNAL)
_selected = null
2025-07-04 16:30:11 -06:00
2025-07-04 13:13:18 -06:00
func _process(_delta: float) -> void:
var collider := self.get_collider()
if not collider:
2025-07-06 15:22:39 -06:00
_deselect()
2025-07-04 13:13:18 -06:00
return
if collider.has_user_signal(Interactive.SELECT_SIGNAL):
2025-07-04 16:30:11 -06:00
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)
2025-07-06 15:22:39 -06:00
else:
_deselect()
2025-07-04 13:13:18 -06:00
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)