Files
tli/scripts/interactable.gd

39 lines
849 B
GDScript

extends CharacterBody3D
class_name Interactable
const MIN_DRAG_DISTANCE: float = 15
var hovered: bool = false
var click_position: Vector2 = Vector2.ZERO
@onready var hover_sprite: Sprite3D = $HoverSprite
func _ready() -> void:
assert(hover_sprite != null, "hover_sprite missing!")
func _process(_delta: float) -> void:
hovered = HoveringManager.hovered_node == self
hover_sprite.visible = hovered
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton and hovered:
var button_event := event as InputEventMouseButton
if button_event.button_index != MOUSE_BUTTON_LEFT:
return
if button_event.pressed:
click_position = button_event.position
else:
if (
(button_event.position - click_position).length()
< MIN_DRAG_DISTANCE
):
_click()
func _click() -> void:
print(self, ' clicked!')