Added clipping when drawing links

This commit is contained in:
RodZill4 2018-09-10 22:43:17 +02:00
parent 1a5ddae226
commit d6527848d3
2 changed files with 25 additions and 8 deletions

View File

@ -1,9 +1,20 @@
extends Node2D extends Control
var clip_pos = Vector2(0, 0)
var clip_size = Vector2(0, 0)
var end var end
var source = null var source = null
var target = null var target = null
func _ready():
mouse_filter = Control.MOUSE_FILTER_IGNORE
func clip(p, s):
clip_pos = p
rect_global_position = p
rect_size = s
rect_clip_content = true
func closest(rect, point): func closest(rect, point):
return Vector2(max(rect.position.x, min(rect.end.x, point.x)), max(rect.position.y, min(rect.end.y, point.y))) return Vector2(max(rect.position.x, min(rect.end.x, point.x)), max(rect.position.y, min(rect.end.y, point.y)))
@ -14,9 +25,9 @@ func _draw():
if target != null: if target != null:
color = Color(0.5, 1, 0.5, 0.5) color = Color(0.5, 1, 0.5, 0.5)
rect = Rect2(target.rect_global_position, target.rect_size*target.get_global_transform().get_scale()) rect = Rect2(target.rect_global_position, target.rect_size*target.get_global_transform().get_scale())
draw_rect(rect, color, false) draw_rect(Rect2(rect.position-clip_pos, rect.size), color, false)
end = closest(rect, start) end = closest(rect, start)
rect = Rect2(source.rect_global_position, source.rect_size*source.get_global_transform().get_scale()) rect = Rect2(source.rect_global_position, source.rect_size*source.get_global_transform().get_scale())
draw_rect(rect, color, false) draw_rect(Rect2(rect.position-clip_pos, rect.size), color, false)
start = closest(rect, end) start = closest(rect, end)
draw_line(start, end, color, 1, true) draw_line(start-clip_pos, end-clip_pos, color, 1, true)

View File

@ -52,10 +52,14 @@ func delete():
func _on_mouse_entered(): func _on_mouse_entered():
_on_mouse_exited() _on_mouse_exited()
get_graph_edit()
if graph_edit == null:
return
links = [] links = []
var viewport = get_viewport() var viewport = get_viewport()
for w in linked_widgets: for w in linked_widgets:
var link = Link.new() var link = Link.new()
link.clip(graph_edit.rect_global_position, graph_edit.rect_size)
link.source = self link.source = self
link.target = w.widget link.target = w.widget
viewport.add_child(link) viewport.add_child(link)
@ -73,7 +77,10 @@ var link = null
var graph_edit = null var graph_edit = null
var pointed_control = null var pointed_control = null
const Link = preload("res://addons/material_maker/widgets/linked_widgets/link.gd") func get_graph_edit():
graph_edit = get_parent()
while graph_edit != null && !(graph_edit is GraphEdit):
graph_edit = graph_edit.get_parent()
func find_control(gp): func find_control(gp):
for c in graph_edit.get_children(): for c in graph_edit.get_children():
@ -108,14 +115,13 @@ func _input(event):
func pick_linked(): func pick_linked():
# Verify we are in a graph edit # Verify we are in a graph edit
graph_edit = get_parent() get_graph_edit()
while graph_edit != null && !(graph_edit is GraphEdit):
graph_edit = graph_edit.get_parent()
if graph_edit == null: if graph_edit == null:
return return
# Create line that will be shown when looking for a target # Create line that will be shown when looking for a target
var viewport = get_viewport() var viewport = get_viewport()
link = Link.new() link = Link.new()
link.clip(graph_edit.rect_global_position, graph_edit.rect_size)
link.source = self link.source = self
link.end = rect_global_position+0.5*rect_size*get_global_transform().get_scale() link.end = rect_global_position+0.5*rect_size*get_global_transform().get_scale()
viewport.add_child(link) viewport.add_child(link)