material-maker/addons/flexible_layout/flexible_overlay.gd

49 lines
1.5 KiB
GDScript3
Raw Normal View History

2023-11-20 08:21:28 +01:00
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