This commit is contained in:
ousttrue 2020-11-26 16:31:48 +09:00
parent 719a8ecddf
commit c94315c786
14 changed files with 210 additions and 159 deletions

View File

@ -0,0 +1,43 @@
using System;
using System.IO;
namespace UniGLTF
{
public class ArraySerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public ArraySerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_ARRAY";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new $1[parsed.GetArrayCount()];
int i=0;
foreach(var x in parsed.ArrayItems())
{
value[i++] = $3;
}
return value;
}
"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
}

View File

@ -1,115 +0,0 @@
using System;
using System.IO;
namespace UniGLTF
{
public class ArraySerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public ArraySerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_ARRAY";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new $1[parsed.GetArrayCount()];
int i=0;
foreach(var x in parsed.ArrayItems())
{
value[i++] = $3;
}
return value;
}
"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
public class ListSerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public ListSerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_LIST";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new List<$1>();
foreach(var x in parsed.ArrayItems())
{
value.Add($3);
}
return value;
}"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
public class StringKeyDictionarySerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public StringKeyDictionarySerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_DICT";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new Dictionary<string, $1>();
foreach(var kv in parsed.ObjectItems())
{
value.Add(kv.Key.GetString(), $3);
}
return value;
}
"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "kv.Value"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
}

View File

@ -1,4 +1,4 @@
using System.IO;
using System.IO;
using System.Reflection;
using System.Text;
using UnityEditor;
@ -6,10 +6,30 @@ using UnityEngine;
namespace UniGLTF
{
/// <summary>
/// Generate deserializer from ListTreeNode<JsonValue> to glTF using type reflection
/// </summary>
public static class DeserializerGenerator
{
public const BindingFlags FIELD_FLAGS = BindingFlags.Instance | BindingFlags.Public;
const string Begin = @"using UniJSON;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace UniGLTF {
public static class GltfDeserializer
{
";
const string End = @"
} // GltfDeserializer
} // UniGLTF
";
static string OutPath
{
get
@ -19,9 +39,6 @@ namespace UniGLTF
}
}
/// <summary>
/// AOT向けにデシリアライザを生成する
/// </summary>
[MenuItem(UniGLTFVersion.MENU + "/GLTF: Generate Deserializer")]
static void GenerateSerializer()
{
@ -29,32 +46,14 @@ namespace UniGLTF
Debug.Log(info);
using (var s = File.Open(OutPath, FileMode.Create))
using (var w = new StreamWriter(s, Encoding.UTF8))
using (var w = new StreamWriter(s, new UTF8Encoding(false)))
{
// header
w.Write(@"
using UniJSON;
using System;
using System.Collections.Generic;
using UnityEngine;
namespace UniGLTF {
public static class GltfDeserializer
{
");
w.Write(Begin);
info.GenerateDeserializer(w, "Deserialize");
// footer
w.Write(@"
} // GltfDeserializer
} // UniGLTF
");
Debug.LogFormat("write: {0}", OutPath);
w.Write(End);
}
Debug.LogFormat("write: {0}", OutPath);
}
}
}

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@ -140,17 +140,26 @@ namespace UniGLTF
var typeName = BaseJsonSchemaAttribute.GetTypeName(m_fi.FieldType);
if (m_attr != null)
{
sb.AppendLine(string.Format("{0}: {1}", Path, m_attr.GetInfo(m_fi)));
}
else
{
sb.AppendLine(string.Format("{0}: {1}", Path, typeName));
}
// if (m_attr != null)
// {
// sb.AppendLine(string.Format("{0}: {1}", Path, m_attr.GetInfo(m_fi)));
// }
// else
// {
// sb.AppendLine(string.Format("{0}: {1}", Path, typeName));
// }
// sb.Append(Serialization.ToString());
// if (m_attr != null)
// {
// sb.Append(string.Format("{0}: {1}", Path, m_attr.GetInfo(m_fi)));
// }
// else
// {
// sb.Append(string.Format("{0}: {1}", Path, typeName));
// }
sb.Append(string.Format("{0}: {1}", Path, Serialization));
sb.Append(Serialization.ToString());
return sb.ToString();
}
}
}
}

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
namespace UniGLTF

View File

@ -0,0 +1,47 @@
using System;
using System.IO;
using System.Linq;
namespace UniGLTF
{
public class ListSerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public ListSerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override string ToString()
{
return m_inner.ToString();
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_LIST";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new List<$1>();
foreach(var x in parsed.ArrayItems())
{
value.Add($3);
}
return value;
}"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2d23c57f5d8b3314fba9c1b9de18e5e6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
using System.Linq;
using System.Text;
@ -56,7 +56,7 @@ namespace UniGLTF
var sb = new StringBuilder();
foreach (var x in m_fsi)
{
sb.Append(x.ToString());
sb.Append(x.ToString() + "\n");
}
return sb.ToString();
}

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.IO;
namespace UniGLTF
@ -18,6 +18,11 @@ namespace UniGLTF
}
public abstract string GenerateDeserializerCall(string callName, string argName);
public override string ToString()
{
return ValueType.ToString();
}
}
public class Int8Serialization : PrimitiveSerializationBase

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;

View File

@ -0,0 +1,42 @@
using System;
using System.IO;
namespace UniGLTF
{
public class StringKeyDictionarySerialization : FunctionSerializationBase
{
IValueSerialization m_inner;
public StringKeyDictionarySerialization(Type t, IValueSerialization inner)
{
ValueType = t;
m_inner = inner;
}
public override void GenerateDeserializer(StreamWriter writer, string callName)
{
var itemCallName = callName + "_DICT";
writer.Write(@"
public static $0 $2(ListTreeNode<JsonValue> parsed)
{
var value = new Dictionary<string, $1>();
foreach(var kv in parsed.ObjectItems())
{
value.Add(kv.Key.GetString(), $3);
}
return value;
}
"
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
.Replace("$1", m_inner.ValueType.Name)
.Replace("$2", callName)
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "kv.Value"))
);
if (!m_inner.IsInline)
{
m_inner.GenerateDeserializer(writer, itemCallName);
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 760fc2dffd8f64544ab2c6a16fea7d79
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,3 @@

using UniJSON;
using System;
using System.Collections.Generic;