1
Fork 0
mirror of https://github.com/Steffo99/hella-farm.git synced 2024-11-28 19:14:23 +00:00
hella-farm/scenes/game/cursor_magnet.gd
Stefano Pigozzi 3d17dcd3f0
Make Sheeps Draggable with a CursorMagnet
Throwing and drag isn't implemented yet. Any ideas for how to do it with this framework?
Might be a good idea to do it on a branch first...
2024-04-14 07:46:06 +02:00

54 lines
1.1 KiB
GDScript

extends Area2D
class_name CursorMagnet
signal dragged(node: Draggable)
signal dropped(node: Draggable)
func find_closest_target() -> Draggable:
var bodies = get_overlapping_bodies()
var min_distance: float = INF
var to_drag: Node = null
for body in bodies:
for target in body.find_children("Draggable", "Draggable", false, false):
var distance = position.distance_to(target.position)
if distance < min_distance:
min_distance = distance
to_drag = target
return to_drag
var dragging: Draggable = null
func drag():
var target = find_closest_target()
if target:
dragging = target
target.drag()
dragged.emit(target)
func drop():
if dragging:
var target = dragging
dragging = null
target.drop()
dropped.emit(target)
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
drag()
else:
drop()
func _on_dragged(node: Draggable) -> void:
Log.p(self, "Dragged: %s" % node)
func _on_dropped(node: Draggable) -> void:
Log.p(self, "Dropped: %s" % node)
func _on_move(movement: Vector2) -> void:
position += movement