goodnight_jellybean/godot/CursorInteractArea.gd

48 lines
1.1 KiB
GDScript

extends Area3D
@export var on_interact_func = ""
@export var on_enter_func = ""
@export var on_leave_func = ""
@export var call_string = ""
@export var call_array: Array = []
var cursor_is_touching = false
func _ready():
var _err = GlobalCursorState.connect("cursor_interact",Callable(self,"check_interact"))
func call_with_value(func_name: String):
if call_string:
GlobalCursorState.call(func_name, call_string)
elif call_array.size():
GlobalCursorState.call(func_name, call_array)
else:
GlobalCursorState.call(func_name)
signal interact
signal enter
signal leave
func check_interact():
if not cursor_is_touching:
return
emit_signal("interact")
if on_interact_func:
call_with_value(on_interact_func)
func _on_CursorInteractArea_body_entered(body):
if not GlobalCursorState.is_cursor_collision(body):
return
emit_signal("enter")
cursor_is_touching = true
if on_enter_func:
call_with_value(on_enter_func)
func _on_CursorInteractArea_body_exited(body):
if not GlobalCursorState.is_cursor_collision(body):
return
emit_signal("leave")
cursor_is_touching = false
if on_leave_func:
call_with_value(on_leave_func)