@@ -468,10 +468,10 @@ func do_disconnect_node(from : String, from_slot : int, to : String, to_slot : i
468468 return true
469469 return false
470470
471- func on_cut_connections (connections_to_cut : Array ):
471+ func on_cut_connections (connections_to_be_cut : Array ):
472472 var generator_hier_name : String = generator .get_hier_name ()
473473 var conns : Array = []
474- for c in connections_to_cut :
474+ for c in connections_to_be_cut :
475475 var from_gen = get_node (str (c .from_node )).generator
476476 var to_gen = get_node (str (c .to_node )).generator
477477 if do_disconnect_node (c .from_node , c .from_port , c .to_node , c .to_port ):
@@ -1631,150 +1631,185 @@ func add_reroute_to_output(node : MMGraphNodeMinimal, port_index : int) -> void:
16311631 var next = generator .serialize ()
16321632 undoredo_create_step ("Reroute output" , generator .get_hier_name (), prev , next )
16331633
1634- func _get_connection_line (from : Vector2 , to : Vector2 ) -> PackedVector2Array :
1635- var off : float = 15.0 * connection_lines_curvature * 0.5 * zoom
1636- var points : PackedVector2Array = PackedVector2Array ()
1634+ func _get_connection_line (from : Vector2 , to : Vector2 ) -> PackedVector2Array :
1635+ var off := 15.0 * connection_lines_curvature * 0.5 * zoom
1636+ var points := PackedVector2Array ()
1637+ var mid := (from + to ) * 0.5
16371638 match connection_line_style :
16381639 ConnectionStyle .DIRECT :
1639- return PackedVector2Array ([from ,to ])
1640+ if to .x > from .x :
1641+ off += (to .x - from .x ) * 0.1
1642+ var ma := Vector2 (maxf (mid .x , from .x + off ), mid .y )
1643+ var mb := Vector2 (minf (mid .x , to .x - off ), mid .y )
1644+ var f1 := Vector2 (from .x + off , from .y )
1645+ var t1 := Vector2 (to .x - off , to .y )
1646+ points .append_array ([from , f1 , (f1 + ma ) * 0.5 , (t1 + mb ) * 0.5 , t1 , to ])
1647+ return points
16401648
16411649 ConnectionStyle .BEZIER :
16421650 # default behavior, adapted from:
16431651 # github.com/godotengine/godot/blob/4.4/scene/gui/graph_edit.cpp#L1282
1644- var x_diff = to .x - from .x
1645- var cp_offset = x_diff * connection_lines_curvature
1652+ var x_diff : = to .x - from .x
1653+ var cp_offset : = x_diff * connection_lines_curvature
16461654 if x_diff < 0 :
16471655 cp_offset *= - 1
16481656
1649- var curve : Curve2D = Curve2D .new ()
1657+ var curve := Curve2D .new ()
16501658 curve .add_point (from )
16511659 curve .set_point_out (0 , Vector2 (cp_offset , 0 ))
16521660 curve .add_point (to )
16531661 curve .set_point_in (1 , Vector2 (- cp_offset , 0 ))
1654-
1655- if connection_lines_curvature > 0 :
1662+
1663+ if connection_lines_curvature > 0.0 :
16561664 return curve .tessellate (5 , 2.0 )
16571665 else :
16581666 return curve .tessellate (1 )
16591667
16601668 ConnectionStyle .MANHATTAN :
16611669 if abs (from .x - to .x ) < 0.5 or abs (from .y - to .y ) < 0.5 :
1662- return PackedVector2Array ([from ,to ])
1663- var mid : Vector2 = (from + to ) / 2.0
1664- var ma : Vector2 = Vector2 (max (mid .x , from .x + off ), mid .y )
1665- var mb : Vector2 = Vector2 (min (mid .x , to .x - off ), mid .y )
1666- var f1 : Vector2 = Vector2 (max (mid .x , from .x + off ), from .y )
1667- var t1 : Vector2 = Vector2 (mb .x , to .y )
1668-
1669- points .append (from )
1670- points .append (f1 )
1671- points .append (ma )
1672- points .append (mb )
1673- points .append (t1 )
1674- points .append (to )
1670+ return PackedVector2Array ([from , to ])
1671+ var ma := Vector2 (maxf (mid .x , from .x + off ), mid .y )
1672+ var mb := Vector2 (minf (mid .x , to .x - off ), mid .y )
1673+ var f1 := Vector2 (maxf (mid .x , from .x + off ), from .y )
1674+ var t1 := Vector2 (mb .x , to .y )
1675+ points .append_array ([from , f1 , ma , mb , t1 , to ])
16751676 return points
16761677
16771678 ConnectionStyle .ROUNDED :
16781679 if abs (from .x - to .x ) < 0.5 or abs (from .y - to .y ) < 0.5 :
16791680 return PackedVector2Array ([from ,to ])
1680- var mid : Vector2 = (from + to ) / 2.0
1681- var mb : Vector2 = mid
1681+ var mb := mid
16821682 points .append (from )
16831683
1684- const pts : float = 12.0 # corner arc resolution
1685- var max_radius : float = 75.0 # max. arc radius when from < to
1686- var inv_max_radius : float = 25.0 # max. arc radius when from > to
1684+ const pts := 12.0 # corner arc resolution
1685+ var max_radius := 75.0 # max. arc radius when from < to
1686+ var inv_max_radius := 25.0 # max. arc radius when from > to
16871687
1688- var round_fac : float = clamp (connection_lines_curvature * 0.5 , 0.0 , 1.0 )
1689- max_radius = max (max_radius * round_fac , 4.0 )
1690- inv_max_radius = max (inv_max_radius * round_fac , 2.0 )
1688+ var round_fac := clampf (connection_lines_curvature * 0.5 , 0.0 , 1.0 )
1689+ max_radius = maxf (max_radius * round_fac , 4.0 )
1690+ inv_max_radius = maxf (inv_max_radius * round_fac , 2.0 )
1691+
1692+ var r := minf (minf (absf (to .y - from .y ) * 0.25 ,
1693+ absf (from .x - to .x ) * 0.25 ), max_radius )
16911694
1692- var r : float = min (min (abs (to .y - from .y ) * 0.25 ,
1693- abs (from .x - to .x ) * 0.25 ), max_radius )
1694-
16951695 if from .x < to .x :
16961696 for i : float in range (pts ):
1697- var x : float = lerp (mid .x - r , mid .x , i / pts )
1698- var y : float = lerp (from .y , from .y + r * sign (to .y - from .y ), i / pts )
1699- points .append (lerp ( Vector2 (x , from .y ), Vector2 (mid .x , y ), i / pts ))
1697+ var x := lerpf (mid .x - r , mid .x , i / pts )
1698+ var y := lerpf (from .y , from .y + r * signf (to .y - from .y ), i / pts )
1699+ points .append (Vector2 (x , from .y ). lerp ( Vector2 (mid .x , y ), i / pts ))
17001700
17011701 for i : float in range (pts ):
1702- var x : float = lerp (mid .x , mid .x + r , i / pts )
1703- var y : float = lerp (to .y + r * sign (from .y - to .y ), to .y , i / pts )
1704- points .append (lerp ( Vector2 (mid .x , y ), Vector2 (x , to .y ), i / pts ))
1702+ var x := lerpf (mid .x , mid .x + r , i / pts )
1703+ var y := lerpf (to .y + r * sign (from .y - to .y ), to .y , i / pts )
1704+ points .append (Vector2 (mid .x , y ). lerp ( Vector2 (x , to .y ), i / pts ))
17051705 else :
1706- r = min (r , inv_max_radius )
1706+ r = minf (r , inv_max_radius )
17071707 for i : float in range (pts ):
1708- var x : float = lerp (from .x , from .x + r , i / pts )
1709- var y : float = lerp (from .y , from .y + r * sign (to .y - from .y ), i / pts )
1710- points .append (lerp ( Vector2 (x , from .y ), Vector2 (from .x + r , y ), i / pts ))
1708+ var x := lerpf (from .x , from .x + r , i / pts )
1709+ var y := lerpf (from .y , from .y + r * signf (to .y - from .y ), i / pts )
1710+ points .append (Vector2 (x , from .y ). lerp ( Vector2 (from .x + r , y ), i / pts ))
17111711
1712- var last : Vector2 = points [points .size () - 1 ]
1712+ var last := points [points .size () - 1 ]
17131713 mb .x = last .x
1714- var voff : float = last .y + 0.01 * sign (mid .y - last .y )
1715- mb .y = min (mid .y + r , voff ) if from .y > to .y else max (mid .y - r , voff )
1714+ var voff := last .y + 0.01 * signf (mid .y - last .y )
1715+ mb .y = minf (mid .y + r , voff ) if from .y > to .y else maxf (mid .y - r , voff )
17161716 points .append (mb )
17171717
17181718 if from .y < to .y :
1719- var t1 : Vector2 = Vector2 (points [points .size () - 1 ].x , mb .y )
1719+ var t1 := Vector2 (points [points .size () - 1 ].x , mb .y )
17201720 for i : float in range (pts ):
1721- var x : float = lerp (t1 .x , t1 .x - r , i / pts )
1722- var y : float = lerp (t1 .y , t1 .y + r , i / pts )
1723- points .append (lerp ( Vector2 (t1 .x , y ), Vector2 (x , t1 .y + r ), i / pts ))
1721+ var x := lerpf (t1 .x , t1 .x - r , i / pts )
1722+ var y := lerpf (t1 .y , t1 .y + r , i / pts )
1723+ points .append (Vector2 (t1 .x , y ). lerp ( Vector2 (x , t1 .y + r ), i / pts ))
17241724
1725- var t2 : Vector2 = Vector2 (to .x , mb .y + r )
1726- r = min ( abs (t2 .y - to .y ) * 0.5 , r )
1725+ var t2 := Vector2 (to .x , mb .y + r )
1726+ r = minf ( absf (t2 .y - to .y ) * 0.5 , r )
17271727 for i : float in range (1 , pts ):
1728- var x : float = lerp (t2 .x , t2 .x - r , i / pts )
1729- var y : float = lerp (t2 .y , t2 .y + r , i / pts )
1730- points .append (lerp (Vector2 (x , t2 .y ),Vector2 (t2 .x - r , y ), i / pts ))
1731-
1732- var t3 : Vector2 = Vector2 (to .x - r , to .y - r )
1728+ var x := lerpf (t2 .x , t2 .x - r , i / pts )
1729+ var y := lerpf (t2 .y , t2 .y + r , i / pts )
1730+ points .append (Vector2 (x , t2 .y ).lerp (Vector2 (t2 .x - r , y ), i / pts ))
17331731
1732+ var t3 := Vector2 (to .x - r , to .y - r )
17341733 for i : float in range (pts ):
1735- var x : float = lerp (t3 .x , t3 .x + r , i / pts )
1736- var y : float = lerp (t3 .y , t3 .y + r , i / pts )
1737- points .append (lerp ( Vector2 (t3 .x , y ), Vector2 (x , t3 .y + r ), i / pts ))
1734+ var x := lerpf (t3 .x , t3 .x + r , i / pts )
1735+ var y := lerpf (t3 .y , t3 .y + r , i / pts )
1736+ points .append (Vector2 (t3 .x , y ). lerp ( Vector2 (x , t3 .y + r ), i / pts ))
17381737 else :
1739- var t4 : Vector2 = points [points .size () - 1 ]
1738+ var t4 := points [points .size () - 1 ]
17401739
1741- r = min ( abs (t4 .y - to .y ) * 0.5 , r )
1740+ r = minf ( absf (t4 .y - to .y ) * 0.5 , r )
17421741 for i : float in range (pts ):
1743- var x : float = lerp (t4 .x , t4 .x - r , i / pts )
1744- var y : float = lerp (t4 .y , t4 .y - r , i / pts )
1745- points .append (lerp (Vector2 (t4 .x , y ),Vector2 (x , t4 .y - r ),i / pts ))
1746- var t5 : Vector2 = Vector2 (to .x , t4 .y - r )
1742+ var x := lerpf (t4 .x , t4 .x - r , i / pts )
1743+ var y := lerpf (t4 .y , t4 .y - r , i / pts )
1744+ points .append (Vector2 (t4 .x , y ).lerp (Vector2 (x , t4 .y - r ),i / pts ))
17471745
1748- r = min (abs (t5 .y - to .y ) * 0.5 , r )
1746+ var t5 := Vector2 (to .x , t4 .y - r )
1747+ r = minf (absf (t5 .y - to .y ) * 0.5 , r )
17491748 for i : float in range (pts ):
1750- var x : float = lerp (t5 .x , t5 .x - r , i / pts )
1751- var y : float = lerp (t5 .y , t5 .y - r , i / pts )
1752- points .append (lerp ( Vector2 (x , t5 .y ), Vector2 (t5 .x - r ,y ), i / pts ))
1749+ var x := lerpf (t5 .x , t5 .x - r , i / pts )
1750+ var y := lerpf (t5 .y , t5 .y - r , i / pts )
1751+ points .append (Vector2 (x , t5 .y ). lerp ( Vector2 (t5 .x - r ,y ), i / pts ))
17531752
1754- var t6 : Vector2 = Vector2 (to .x - r , to .y + r )
1753+ var t6 := Vector2 (to .x - r , to .y + r )
17551754 for i : float in range (pts ):
1756- var x : float = lerp (t6 .x , t6 .x + r , i / pts )
1757- var y : float = lerp (t6 .y , t6 .y - r , i / pts )
1758- points .append (lerp ( Vector2 (t6 .x , y ), Vector2 (x , t6 .y - r ), i / pts ))
1755+ var x := lerpf (t6 .x , t6 .x + r , i / pts )
1756+ var y := lerpf (t6 .y , t6 .y - r , i / pts )
1757+ points .append (Vector2 (t6 .x , y ). lerp ( Vector2 (x , t6 .y - r ), i / pts ))
17591758 points .append (to )
17601759 return points
17611760
17621761 ConnectionStyle .DIAGONAL :
1763- if to .x > from .x :
1764- off += (to .x - from .x ) * 0.1
1765-
1766- var mid : Vector2 = (from + to ) / 2.0
1767- var ma : Vector2 = Vector2 (max (mid .x , from .x + off ), mid .y )
1768- var mb : Vector2 = Vector2 (min (mid .x , to .x - off ), mid .y )
1769- var f1 : Vector2 = Vector2 (from .x + off , from .y )
1770- var t1 : Vector2 = Vector2 (to .x - off , to .y )
1771-
1772- points .append (from )
1773- points .append (f1 )
1774- points .append ((f1 + ma ) * 0.5 )
1775- points .append ((t1 + mb ) * 0.5 )
1776- points .append (t1 )
1777- points .append (to )
1762+ var start := from
1763+ var end := to
1764+ from .x += off
1765+ to .x -= off
1766+
1767+ if abs (from .x - to .x ) < 0.5 :
1768+ return PackedVector2Array ([start , from , to , end ])
1769+ elif abs (from .y - to .y ) < 0.5 :
1770+ return PackedVector2Array ([start , end ])
1771+
1772+ var diff := mid - from
1773+ var from_a := mid - Vector2 (diff .y , diff .y )
1774+ var mid_b := mid + Vector2 (diff .x , diff .x )
1775+ var corner_from := Vector2 (from .x , mid .y )
1776+ var corner_to := Vector2 (to .x , mid .y )
1777+
1778+ var stack := (func (dir : float , diff_y : float ) -> void :
1779+ var max_off := absf (diff_y ) * 0.5
1780+ var h_offset = (corner_from .x - max_off ) - (corner_to .x + max_off ) >= 0.0
1781+ if not h_offset :
1782+ max_off = clampf (diff .x * 0.5 , - diff .x , diff .y )
1783+ points .append (from )
1784+ points .append (Vector2 (corner_from .x , corner_from .y - max_off * dir ))
1785+ if h_offset :
1786+ points .append (Vector2 (corner_from .x - max_off , corner_from .y ))
1787+ points .append (Vector2 (corner_to .x + max_off , corner_to .y ))
1788+ points .append (Vector2 (corner_to .x , corner_to .y + max_off * dir ))
1789+ points .append (to ))
1790+
1791+ points .append (start )
1792+
1793+ if from .y < to .y :
1794+ if from .x > to .x :
1795+ stack .call (1.0 , diff .y )
1796+ else :
1797+ if from_a .x < from .x :
1798+ from_a = mid - Vector2 (diff .x , diff .x )
1799+ else :
1800+ mid_b = mid + Vector2 (diff .y , diff .y )
1801+ points .append_array ([from , from_a , mid , mid_b , to ])
1802+ elif from .y > to .y :
1803+ if from .x > to .x :
1804+ stack .call (- 1.0 , mid .y - to .y )
1805+ else :
1806+ from_a = mid + Vector2 (diff .y , - diff .y )
1807+ mid_b = mid + Vector2 (- diff .y , diff .y )
1808+ if from_a .x < from .x :
1809+ mid_b = mid + Vector2 (diff .x , - diff .x )
1810+ from_a = mid - Vector2 (diff .x , - diff .x )
1811+ points .append_array ([from , from_a , mid , mid_b , to ])
1812+ points .append (end )
17781813 return points
17791814 _ :
17801815 return points
0 commit comments