Add support for array of Visual Script objects

This commit is contained in:
Wojtek Figat
2022-05-01 20:42:05 +02:00
parent c5bfdc66a4
commit 74b23d0e00
20 changed files with 221 additions and 62 deletions

View File

@@ -41,7 +41,7 @@ namespace FlaxEditor.Utilities
// Special case for collections
if (Index != null)
result = new ScriptType(result.GetElementType());
result = result.GetElementType();
return result;
}

View File

@@ -64,11 +64,11 @@ namespace FlaxEditor.Utilities
&& memberValue != null
&& !refStack.Contains(memberValue))
{
if (memberType.IsArray && !typeof(FlaxEngine.Object).IsAssignableFrom(memberType.GetElementType()))
if (memberType.IsArray && !ScriptType.FlaxObject.IsAssignableFrom(memberType.GetElementType()))
{
// Array
var array = (Array)memberValue;
var elementType = new ScriptType(memberType.GetElementType());
var elementType = memberType.GetElementType();
var length = array.Length;
refStack.Push(memberValue);
for (int i = 0; i < length; i++)
@@ -78,7 +78,7 @@ namespace FlaxEditor.Utilities
}
refStack.Pop();
}
else if (typeof(IList).IsAssignableFrom(memberType.Type) && !typeof(FlaxEngine.Object).IsAssignableFrom(memberType.GetElementType()))
else if (typeof(IList).IsAssignableFrom(memberType.Type) && !ScriptType.FlaxObject.IsAssignableFrom(memberType.GetElementType()))
{
// List
var list = (IList)memberValue;
@@ -105,7 +105,7 @@ namespace FlaxEditor.Utilities
GetEntries(new MemberInfoPath.Entry(member.Member, key), membersPath, result, values, refStack, valueType, value);
}
}
else if (memberType.IsClass && !new ScriptType(typeof(FlaxEngine.Object)).IsAssignableFrom(memberType))
else if (memberType.IsClass && !ScriptType.FlaxObject.IsAssignableFrom(memberType))
{
// Object
refStack.Push(memberValue);

View File

@@ -282,7 +282,7 @@ namespace FlaxEditor.Utilities
case VariantType.Pointer: return new ScriptType(typeof(IntPtr));
case VariantType.String: return new ScriptType(typeof(string));
case VariantType.Typename: return new ScriptType(typeof(Type));
case VariantType.Object: return new ScriptType(typeof(FlaxEngine.Object));
case VariantType.Object: return ScriptType.FlaxObject;
case VariantType.Asset: return new ScriptType(typeof(Asset));
case VariantType.Vector2: return new ScriptType(typeof(Vector2));
case VariantType.Vector3: return new ScriptType(typeof(Vector3));