@@ -156,13 +156,25 @@ public override List<Port> GetCompatiblePorts(Port startPort, NodeAdapter nodeAd
156156 {
157157 var compatiblePorts = new List < Port > ( ) ;
158158
159+ Type startPortType = startPort . portType ;
160+
161+ if ( ( startPort as PortView ) . isMultiple )
162+ startPortType = startPortType . GetGenericArguments ( ) [ 0 ] ;
163+
159164 compatiblePorts . AddRange ( ports . ToList ( ) . Where ( p => {
160- if ( p . direction == startPort . direction )
165+ var portView = p as PortView ;
166+
167+ if ( portView . direction == startPort . direction )
161168 return false ;
162169
163- if ( ! p . portType . IsAssignableFrom ( startPort . portType ) )
170+ Type portType = portView . portType ;
171+
172+ if ( portView . isMultiple )
173+ portType = portType . GetGenericArguments ( ) [ 0 ] ;
174+
175+ if ( ! portType . IsReallyAssignableFrom ( startPortType ) )
164176 return false ;
165-
177+
166178 return true ;
167179 } ) ) ;
168180
@@ -271,10 +283,8 @@ public void Connect(EdgeView e, bool serializeToGraph = true)
271283 {
272284 if ( e . input == null || e . output == null )
273285 return ;
274-
275- //Remove all edges connected to the input port:
276- foreach ( var edge in edgeViews . Where ( ev => ev . input == e . input ) )
277- Disconnect ( edge ) ;
286+
287+ var edgesToRemove = edgeViews . Where ( ev => ev . input == e . input ) . ToList ( ) ;
278288
279289 AddElement ( e ) ;
280290
@@ -283,16 +293,23 @@ public void Connect(EdgeView e, bool serializeToGraph = true)
283293
284294 var inputNodeView = e . input . node as BaseNodeView ;
285295 var outputNodeView = e . output . node as BaseNodeView ;
296+
297+ if ( inputNodeView == null || outputNodeView == null )
298+ return ;
286299
287300 edgeViews . Add ( e ) ;
288301
289302 if ( serializeToGraph )
290303 {
291304 e . userData = graph . Connect (
292- inputNodeView . nodeTarget , e . input . portName ,
293- outputNodeView . nodeTarget , e . output . portName
305+ inputNodeView . nodeTarget , ( e . input as PortView ) . fieldName ,
306+ outputNodeView . nodeTarget , ( e . output as PortView ) . fieldName
294307 ) ;
295308 }
309+
310+ //Remove edges formerly connected to the same input port
311+ foreach ( var edge in edgesToRemove )
312+ Disconnect ( edge ) ;
296313
297314 inputNodeView . RefreshPorts ( ) ;
298315 outputNodeView . RefreshPorts ( ) ;
@@ -309,13 +326,13 @@ public void Disconnect(EdgeView e)
309326
310327 RemoveElement ( e ) ;
311328
312- if ( e . input != null )
329+ if ( e ? . input ? . node != null )
313330 {
314331 var inputNodeView = e . input . node as BaseNodeView ;
315332 inputNodeView . RefreshPorts ( ) ;
316333 e . input . Disconnect ( e ) ;
317334 }
318- if ( e . output != null )
335+ if ( e ? . output ? . node != null )
319336 {
320337 var outputNodeView = e . output . node as BaseNodeView ;
321338 e . output . Disconnect ( e ) ;
0 commit comments