49 lines
1.5 KiB
GDScript3
49 lines
1.5 KiB
GDScript3
|
extends ColorRect
|
||
|
|
||
|
func find_position_from_target(at_position, target):
|
||
|
const POSITIONS = [ -1, 1, -1, 2, 0, 3, -1, 4, -1]
|
||
|
var pos_x = int(3*(at_position.x-target.rect.position.x) / target.rect.size.x)
|
||
|
var pos_y = int(3*(at_position.y-target.rect.position.y) / target.rect.size.y)
|
||
|
return POSITIONS[pos_x+3*pos_y]
|
||
|
|
||
|
func _drop_data(at_position, data):
|
||
|
var target = get_parent().get_flexnode_at(at_position)
|
||
|
if target:
|
||
|
var destination = find_position_from_target(at_position, target)
|
||
|
if destination != -1:
|
||
|
get_parent().move_panel(data, target, destination)
|
||
|
|
||
|
func _can_drop_data(at_position, data):
|
||
|
var target = get_parent().get_flexnode_at(at_position)
|
||
|
if target:
|
||
|
var rect : Rect2 = target.rect
|
||
|
match find_position_from_target(at_position, target):
|
||
|
0:
|
||
|
if data.flex_node == target:
|
||
|
$Arrow.visible = false
|
||
|
return false
|
||
|
$Arrow.visible = true
|
||
|
$Arrow.position = rect.get_center()-Vector2(32, 32)
|
||
|
$Arrow.rotation_degrees = 0
|
||
|
1:
|
||
|
$Arrow.visible = true
|
||
|
$Arrow.position = Vector2(rect.get_center().x-32, rect.position.y)
|
||
|
$Arrow.rotation_degrees = 0
|
||
|
2:
|
||
|
$Arrow.visible = true
|
||
|
$Arrow.position = Vector2(rect.position.x, rect.get_center().y-32)
|
||
|
$Arrow.rotation_degrees = -90
|
||
|
3:
|
||
|
$Arrow.visible = true
|
||
|
$Arrow.position = Vector2(rect.end.x-64, rect.get_center().y-32)
|
||
|
$Arrow.rotation_degrees = 90
|
||
|
4:
|
||
|
$Arrow.visible = true
|
||
|
$Arrow.position = Vector2(rect.get_center().x-32, rect.end.y-64)
|
||
|
$Arrow.rotation_degrees = 180
|
||
|
_:
|
||
|
$Arrow.visible = false
|
||
|
return false
|
||
|
return true
|
||
|
|