generated from krampus/template-godot4
36 lines
887 B
GDScript
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)
|