1
Fork 0
mirror of https://github.com/Steffo99/hella-farm.git synced 2024-11-25 01:24:23 +00:00
hella-farm/scenes/game/cursor.gd

80 lines
1.9 KiB
GDScript3
Raw Normal View History

2024-04-20 00:23:01 +00:00
extends Area2D
class_name Cursor
2024-04-17 03:26:13 +00:00
## A [CharacterBody2D] syncing its position with the mouse on each physics timestep.
2024-04-20 00:23:01 +00:00
signal dragged(node: Draggable)
signal dropped(node: Draggable)
2024-04-24 02:55:31 +00:00
@onready var game: MainGame = MainGame.get_via_group(self)
2024-04-24 02:56:44 +00:00
@onready var gold_display: GoldDisplay = %"GoldDisplay"
2024-05-01 04:26:30 +00:00
@onready var cheat_gold_spawner: Spawner = %"CheatGoldSpawner"
var dragging: Draggable = null
2024-04-24 02:55:31 +00:00
static func get_via_group(node: Node) -> Cursor:
var result = node.get_tree().get_nodes_in_group("cursor")
if result.is_empty():
return null
return result[0]
2024-04-20 00:23:01 +00:00
func find_closest_target() -> Draggable:
var areas = get_overlapping_areas()
2024-04-20 00:23:01 +00:00
var min_distance: float = INF
var to_drag: Node = null
for area in areas:
if not area is Draggable:
continue
var distance = position.distance_to(area.position)
if distance < min_distance:
min_distance = distance
to_drag = area
2024-04-20 00:23:01 +00:00
return to_drag
func drag():
var target = find_closest_target()
if target and not dragging:
dragging = target
target.drag(self)
dragged.emit(target)
func drop():
if dragging:
var target = dragging
dragging = null
if is_instance_valid(target):
target.drop()
dropped.emit(target)
else:
dropped.emit(null)
func log_dragging() -> void:
Log.p(self, "Dragging: %s" % dragging)
func _input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT:
if event.pressed:
drag()
else:
drop()
2024-04-26 00:15:39 +00:00
func _process(_delta: float) -> void:
# Determine mouse cursor shape
if dragging:
Input.set_default_cursor_shape(Input.CURSOR_DRAG)
elif has_overlapping_areas():
Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
else:
Input.set_default_cursor_shape(Input.CURSOR_ARROW)
2024-04-20 00:23:01 +00:00
func _physics_process(_delta: float) -> void:
2024-04-20 00:23:01 +00:00
position += (game.camera.get_global_mouse_position() - global_position)
2024-05-01 04:26:30 +00:00
if Input.is_action_pressed(&"cheat_gold"):
cheat_gold_spawner.spawn()