diff --git a/Scripts/Editor/NodeEditorUtilities.cs b/Scripts/Editor/NodeEditorUtilities.cs
index ac12e33..900e2e2 100644
--- a/Scripts/Editor/NodeEditorUtilities.cs
+++ b/Scripts/Editor/NodeEditorUtilities.cs
@@ -127,6 +127,64 @@ namespace XNodeEditor {
return methods.Count() > 0;
}
+ ///
+ /// Looking for ports with value Type compatible with a given type.
+ ///
+ /// Node to search
+ /// Type to find compatiblities
+ ///
+ /// True if NodeType has some port with value type compatible
+ public static bool HasCompatiblePortType(Type nodeType, Type compatibleType, XNode.NodePort.IO direction = XNode.NodePort.IO.Input)
+ {
+ Type findType = typeof(XNode.Node.InputAttribute);
+ if (direction == XNode.NodePort.IO.Output)
+ findType = typeof(XNode.Node.OutputAttribute);
+
+ //Get All fields from node type and we go filter only field with portAttribute.
+ //This way is possible to know the values of the all ports and if have some with compatible value tue
+ foreach (FieldInfo f in XNode.NodeDataCache.GetNodeFields(nodeType))
+ {
+ var portAttribute = f.GetCustomAttributes(findType, false).FirstOrDefault();
+ if (portAttribute != null)
+ {
+ if (IsCastableTo(f.FieldType, compatibleType))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ ///
+ /// Filter only node types that contains some port value type compatible with an given type
+ ///
+ /// List with all nodes type to filter
+ /// Compatible Type to Filter
+ /// Return Only Node Types with ports compatible, or an empty list
+ public static List GetCompatibleNodesTypes(Type[] nodeTypes, Type compatibleType, XNode.NodePort.IO direction = XNode.NodePort.IO.Input)
+ {
+ //Result List
+ List filteredTypes = new List();
+
+ //Return empty list
+ if (nodeTypes == null) { return filteredTypes; }
+ if (compatibleType == null) { return filteredTypes; }
+
+ //Find compatiblity
+ foreach (Type findType in nodeTypes)
+ {
+ if (HasCompatiblePortType(findType, compatibleType, direction))
+ {
+ filteredTypes.Add(findType);
+ }
+ }
+
+ return filteredTypes;
+ }
+
+
/// Return a prettiefied type name.
public static string PrettyName(this Type type) {
if (type == null) return "null";