Skip to content

Commit f2d1433

Browse files
committed
Fixed node creation from asset + updated changelog
1 parent 2a34a42 commit f2d1433

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

Assets/com.alelievr.NodeGraphProcessor/Editor/Views/BaseGraphView.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ public class BaseGraphView : GraphView, IDisposable
124124

125125
public SerializedObject serializedGraph { get; private set; }
126126

127-
Dictionary<Type, Type> nodeTypePerCreateAssetType = new Dictionary<Type, Type>();
127+
Dictionary<Type, (Type nodeType, MethodInfo initalizeNodeFromObject)> nodeTypePerCreateAssetType = new Dictionary<Type, (Type, MethodInfo)>();
128128

129129
public BaseGraphView(EditorWindow window)
130130
{
@@ -619,14 +619,18 @@ void DragPerformedCallback(DragPerformEvent e)
619619
{
620620
if (kp.Key.IsAssignableFrom(objectType))
621621
{
622-
var node = BaseNode.CreateFromType(kp.Value, mousePos);
623-
var initializeFunction = kp.Value.GetMethod(nameof(ICreateNodeFrom<Object>.InitializeNodeFromObject), BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
624-
if ((bool)initializeFunction.Invoke(node, new []{obj}))
622+
try
625623
{
626-
AddNode(node);
624+
var node = BaseNode.CreateFromType(kp.Value.nodeType, mousePos);
625+
if ((bool)kp.Value.initalizeNodeFromObject.Invoke(node, new []{obj}))
626+
AddNode(node);
627+
else
628+
break;
629+
}
630+
catch (Exception exception)
631+
{
632+
Debug.LogException(exception);
627633
}
628-
else
629-
break;
630634
}
631635
}
632636
}
@@ -753,12 +757,21 @@ public void Initialize(BaseGraph graph)
753757
foreach (var nodeInfo in NodeProvider.GetNodeMenuEntries(graph))
754758
{
755759
var interfaces = nodeInfo.type.GetInterfaces();
760+
var exceptInheritedInterfaces = interfaces.Except(interfaces.SelectMany(t => t.GetInterfaces()));
756761
foreach (var i in interfaces)
757762
{
758763
if (i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ICreateNodeFrom<>))
759764
{
760-
var genericArgument = i.GetGenericArguments()[0];
761-
nodeTypePerCreateAssetType[genericArgument] = nodeInfo.type;
765+
var genericArgumentType = i.GetGenericArguments()[0];
766+
var initializeFunction = nodeInfo.type.GetMethod(
767+
nameof(ICreateNodeFrom<Object>.InitializeNodeFromObject),
768+
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance,
769+
null, new Type[]{ genericArgumentType}, null
770+
);
771+
772+
// We only add the type that implements the interface, not it's children
773+
if (initializeFunction.DeclaringType == nodeInfo.type)
774+
nodeTypePerCreateAssetType[genericArgumentType] = (nodeInfo.type, initializeFunction);
762775
}
763776
}
764777
}

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
99
### Added
1010
- Added vertical ports
1111
- Added an example with Waitable and async nodes
12+
- Added drag and drop support for assets and scene objects directly into a graph
1213

1314
## [1.0.1]
1415

0 commit comments

Comments
 (0)