diff --git a/Scripts/Node.cs b/Scripts/Node.cs
index 27e32c7..a07679a 100644
--- a/Scripts/Node.cs
+++ b/Scripts/Node.cs
@@ -45,10 +45,12 @@ namespace XNode {
public enum TypeConstraint {
/// Allow all types of input
None,
- /// Allow similar and inherited types
+ /// Allow connections where input value type is assignable from output value type (eg. ScriptableObject --> Object)
Inherited,
/// Allow only similar types
Strict,
+ /// Allow connections where output value type is assignable from input value type (eg. Object --> ScriptableObject)
+ InheritedInverse,
}
#region Obsolete
diff --git a/Scripts/NodePort.cs b/Scripts/NodePort.cs
index 9db7aee..58a3bd6 100644
--- a/Scripts/NodePort.cs
+++ b/Scripts/NodePort.cs
@@ -263,9 +263,11 @@ namespace XNode {
// Check input type constraints
if (input.typeConstraint == XNode.Node.TypeConstraint.Inherited && !input.ValueType.IsAssignableFrom(output.ValueType)) return false;
if (input.typeConstraint == XNode.Node.TypeConstraint.Strict && input.ValueType != output.ValueType) return false;
+ if (input.typeConstraint == XNode.Node.TypeConstraint.InheritedInverse && !output.ValueType.IsAssignableFrom(input.ValueType)) return false;
// Check output type constraints
- if (output.typeConstraint == XNode.Node.TypeConstraint.Inherited && !output.ValueType.IsAssignableFrom(input.ValueType)) return false;
- if (output.typeConstraint == XNode.Node.TypeConstraint.Strict && output.ValueType != input.ValueType) return false;
+ if (output.typeConstraint == XNode.Node.TypeConstraint.Inherited && !input.ValueType.IsAssignableFrom(output.ValueType)) return false;
+ if (output.typeConstraint == XNode.Node.TypeConstraint.Strict && input.ValueType != output.ValueType) return false;
+ if (output.typeConstraint == XNode.Node.TypeConstraint.InheritedInverse && !output.ValueType.IsAssignableFrom(input.ValueType)) return false;
// Success
return true;
}