private object GetComponentPropertyValue(FieldInfo field, BabylonScriptComponent component)
{
object result = null;
object fvalue = field.GetValue(component);
if (fvalue != null)
{
Type ftype = fvalue.GetType();
if (typeof(System.Enum).IsAssignableFrom(ftype))
{
result = Convert.ToInt32((System.Enum)fvalue);
}
else if (typeof(Boolean).IsAssignableFrom(ftype) || typeof(Byte).IsAssignableFrom(ftype) || typeof(SByte).IsAssignableFrom(ftype) || typeof(Int16).IsAssignableFrom(ftype) || typeof(UInt16).IsAssignableFrom(ftype) || typeof(Int32).IsAssignableFrom(ftype) || typeof(UInt32).IsAssignableFrom(ftype) || typeof(Int64).IsAssignableFrom(ftype) || typeof(UInt64).IsAssignableFrom(ftype) || typeof(IntPtr).IsAssignableFrom(ftype) || typeof(UIntPtr).IsAssignableFrom(ftype) || typeof(Char).IsAssignableFrom(ftype) || typeof(Double).IsAssignableFrom(ftype) || typeof(Single).IsAssignableFrom(ftype))
{
result = fvalue;
}
else if (typeof(System.String).IsAssignableFrom(ftype))
{
result = fvalue;
}
else if (typeof(Color).IsAssignableFrom(ftype))
{
var color = (Color)fvalue;
result = new UnityBabylonColor { r = color.r, g = color.g, b = color.b, a = color.a };
}
else if (typeof(Vector2).IsAssignableFrom(ftype))
{
var vec2 = (Vector2)fvalue;
result = new UnityBablylonVector2 { x = vec2.x, y = vec2.y };
}
else if (typeof(Vector3).IsAssignableFrom(ftype))
{
var vec3 = (Vector3)fvalue;
result = new UnityBablylonVector3 { x = vec3.x, y = vec3.y, z = vec3.z };
}
else if (typeof(Vector4).IsAssignableFrom(ftype))
{
var vec4 = (Vector4)fvalue;
result = new UnityBablylonVector4 { x = vec4.x, y = vec4.y, z = vec4.z, w = vec4.w };
}
else if (typeof(Transform).IsAssignableFrom(ftype))
{
var transform = (Transform)fvalue;
result = GetTransformPropertyValue(transform);
}
else if (typeof(Texture2D).IsAssignableFrom(ftype))
{
var texture = (Texture2D)fvalue;
result = GetTexturePropertyValue(texture);
}
else if (typeof(Cubemap).IsAssignableFrom(ftype))
{
var cubemap = (Cubemap)fvalue;
result = GetCubemapPropertyValue(cubemap);
}
else if (typeof(Material).IsAssignableFrom(ftype))
{
var material = (Material)fvalue;
result = GetMaterialPropertyValue(material);
}
else if (typeof(Shader).IsAssignableFrom(ftype))
{
var shader = (Shader)fvalue;
result = GetShaderPropertyValue(shader);
}
else if (typeof(GameObject).IsAssignableFrom(ftype))
{
var gobject = (GameObject)fvalue;
result = GetGamePropertyValue(gobject);
}
else if (typeof(AudioClip).IsAssignableFrom(ftype))
{
var aclip = (AudioClip)fvalue;
result = GetAudioClipPropertyValue(aclip);
}
else if (typeof(EmbeddedAsset).IsAssignableFrom(ftype))
{
var easset = (EmbeddedAsset)fvalue;
result = GetEmbeddedAssetPropertyValue(easset);
}
else if (typeof(TextAsset).IsAssignableFrom(ftype))
{
var tasset = (TextAsset)fvalue;
result = GetTextAssetPropertyValue(tasset);
}
else if (typeof(DefaultAsset).IsAssignableFrom(ftype))
{
var dasset = (DefaultAsset)fvalue;
result = GetDefaultAssetPropertyValue(dasset);
}
else if (ftype.IsArray)
{
if (typeof(Boolean[]).IsAssignableFrom(ftype) || typeof(Byte[]).IsAssignableFrom(ftype) || typeof(SByte[]).IsAssignableFrom(ftype) || typeof(Int16[]).IsAssignableFrom(ftype) || typeof(UInt16[]).IsAssignableFrom(ftype) || typeof(Int32[]).IsAssignableFrom(ftype) || typeof(UInt32[]).IsAssignableFrom(ftype) || typeof(Int64[]).IsAssignableFrom(ftype) || typeof(UInt64[]).IsAssignableFrom(ftype) || typeof(IntPtr[]).IsAssignableFrom(ftype) || typeof(UIntPtr[]).IsAssignableFrom(ftype) || typeof(Char[]).IsAssignableFrom(ftype) || typeof(Double[]).IsAssignableFrom(ftype) || typeof(Single[]).IsAssignableFrom(ftype))
{
result = fvalue;
}
else if (typeof(System.String[]).IsAssignableFrom(ftype))
{
result = fvalue;
}
else if (typeof(Color[]).IsAssignableFrom(ftype))
{
var colors = (Color[])fvalue;
var colors_list = new List<UnityBabylonColor>();
foreach (var color in colors)
{
colors_list.Add(new UnityBabylonColor { r = color.r, g = color.g, b = color.b, a = color.a });
}
result = colors_list.ToArray();
}
else if (typeof(Vector2[]).IsAssignableFrom(ftype))
{
var vecs2 = (Vector2[])fvalue;
var vecs2_list = new List<UnityBablylonVector2>();
foreach (var vec2 in vecs2)
{
vecs2_list.Add(new UnityBablylonVector2 { x = vec2.x, y = vec2.y });
}
result = vecs2_list.ToArray();
}
else if (typeof(Vector3[]).IsAssignableFrom(ftype))
{
var vecs3 = (Vector3[])fvalue;
var vecs3_list = new List<UnityBablylonVector3>();
foreach (var vec3 in vecs3)
{
vecs3_list.Add(new UnityBablylonVector3 { x = vec3.x, y = vec3.y, z = vec3.z });
}
result = vecs3_list.ToArray();
}
else if (typeof(Vector4[]).IsAssignableFrom(ftype))
{
var vecs4 = (Vector4[])fvalue;
var vecs4_list = new List<UnityBablylonVector4>();
foreach (var vec4 in vecs4)
{
vecs4_list.Add(new UnityBablylonVector4 { x = vec4.x, y = vec4.y, z = vec4.z, w = vec4.w });
}
result = vecs4_list.ToArray();
}
else if (typeof(Transform[]).IsAssignableFrom(ftype))
{
var transforms = (Transform[])fvalue;
var transform_list = new List<object>();
foreach (var transform in transforms)
{
transform_list.Add(GetTransformPropertyValue(transform));
}
result = transform_list.ToArray();
}
else if (typeof(Texture2D[]).IsAssignableFrom(ftype))
{
var textures = (Texture2D[])fvalue;
var texture_list = new List<object>();
foreach (var texture in textures)
{
texture_list.Add(GetTexturePropertyValue(texture));
}
result = texture_list.ToArray();
}
else if (typeof(Cubemap[]).IsAssignableFrom(ftype))
{
var cubemaps = (Cubemap[])fvalue;
var cubemap_list = new List<object>();
foreach (var cubemap in cubemaps)
{
cubemap_list.Add(GetCubemapPropertyValue(cubemap));
}
result = cubemap_list.ToArray();
}
else if (typeof(Material[]).IsAssignableFrom(ftype))
{
var materials = (Material[])fvalue;
var material_list = new List<object>();
foreach (var material in materials)
{
material_list.Add(GetMaterialPropertyValue(material));
}
result = material_list.ToArray();
}
else if (typeof(Shader[]).IsAssignableFrom(ftype))
{
var shaders = (Shader[])fvalue;
var shader_list = new List<object>();
foreach (var shader in shaders)
{
shader_list.Add(GetShaderPropertyValue(shader));
}
result = shader_list.ToArray();
}
else if (typeof(GameObject[]).IsAssignableFrom(ftype))
{
var gobjects = (GameObject[])fvalue;
var gobject_list = new List<object>();
foreach (var gobject in gobjects)
{
gobject_list.Add(GetGamePropertyValue(gobject));
}
result = gobject_list.ToArray();
}
else if (typeof(AudioClip[]).IsAssignableFrom(ftype))
{
var aclips = (AudioClip[])fvalue;
var aclip_list = new List<object>();
foreach (var aclip in aclips)
{
aclip_list.Add(GetAudioClipPropertyValue(aclip));
}
result = aclip_list.ToArray();
}
else if (typeof(EmbeddedAsset[]).IsAssignableFrom(ftype))
{
var eassets = (EmbeddedAsset[])fvalue;
var easset_list = new List<object>();
foreach (var easset in eassets)
{
easset_list.Add(GetEmbeddedAssetPropertyValue(easset));
}
result = easset_list.ToArray();
}
else if (typeof(TextAsset[]).IsAssignableFrom(ftype))
{
var tassets = (TextAsset[])fvalue;
var tasset_list = new List<object>();
foreach (var tasset in tassets)
{
tasset_list.Add(GetTextAssetPropertyValue(tasset));
}
result = tasset_list.ToArray();
}
else if (typeof(DefaultAsset[]).IsAssignableFrom(ftype))
{
var dassets = (DefaultAsset[])fvalue;
var dasset_list = new List<object>();
foreach (var dasset in dassets)
{
dasset_list.Add(GetDefaultAssetPropertyValue(dasset));
}
result = dasset_list.ToArray();
}
}
}
return result;
}