2023-10-02 13:12:08 +00:00
|
|
|
extends Area2D
|
|
|
|
class_name Ghost
|
|
|
|
|
|
|
|
var is_dragging: bool
|
|
|
|
var previous_position: Vector2
|
|
|
|
|
2023-10-02 14:22:03 +00:00
|
|
|
|
2023-10-02 13:12:08 +00:00
|
|
|
func _input(event: InputEvent):
|
|
|
|
if event is InputEventMouseButton:
|
|
|
|
is_dragging = event.pressed
|
|
|
|
previous_position = event.position
|
|
|
|
elif event is InputEventScreenTouch:
|
|
|
|
is_dragging = event.pressed
|
|
|
|
previous_position = event.position
|
|
|
|
|
|
|
|
if is_dragging:
|
|
|
|
if event is InputEventMouseMotion:
|
|
|
|
var delta = event.position - previous_position
|
2023-10-02 14:22:03 +00:00
|
|
|
move_and_check(position + delta)
|
2023-10-02 13:12:08 +00:00
|
|
|
previous_position = event.position
|
|
|
|
elif event is InputEventScreenDrag:
|
|
|
|
var delta = event.position - previous_position
|
2023-10-02 14:22:03 +00:00
|
|
|
move_and_check(position + delta)
|
2023-10-02 13:12:08 +00:00
|
|
|
previous_position = event.position
|
2023-10-02 14:22:03 +00:00
|
|
|
|
|
|
|
|
|
|
|
@onready var sprite: Sprite2D = $Sprite
|
|
|
|
|
|
|
|
@export var can_place: bool:
|
|
|
|
get:
|
|
|
|
return can_place
|
|
|
|
set(value):
|
|
|
|
if value:
|
|
|
|
sprite.modulate = Color(1.0, 1.0, 1.0, 0.5)
|
|
|
|
else:
|
|
|
|
sprite.modulate = Color(1.0, 0.0, 0.0, 0.5)
|
|
|
|
|
|
|
|
|
|
|
|
func move_and_check(destination):
|
|
|
|
position = destination
|
|
|
|
can_place = not has_overlapping_bodies()
|
|
|
|
print(can_place)
|