Beispiel #1
0
 private void fillobject(object obj, FieldNode fn)
 {
     foreach (System.Reflection.FieldInfo fi in obj.GetType().GetFields())
     {
         object val = fn.getObject(fi.Name);
         fi.SetValue(obj, val);
     }
     fn.value = obj;
 }
Beispiel #2
0
 private void postProcessObjectNode(FieldNode fieldNode)
 {
     // convert byte buffers to string instances in "string" fields for convenience
     if (fieldNode.typenode == null || fieldNode.typenode.type == null)
     {
         return;
     }
     if (fieldNode.typenode.type == "string")
     {
         // strings use "char" arrays, so it should be wrapped in a ByteBuffer
         //ByteBuffer buf = fieldNode.getArrayData<ByteBuffer>();
         object arrayobj = fieldNode.getArrayData();
         if (arrayobj != null && arrayobj is ByteBuffer)
         {
             ByteBuffer buf    = (ByteBuffer)arrayobj;
             char[]     carray = new char[buf.data.Length];
             for (int i = 0; i < carray.Length; i++)
             {
                 carray[i] = (char)buf.data[i];
             }
             fieldNode.value = new String(carray);//, "UTF-8"
             fieldNode.cleanChilds();
         }
     }
     else if (fieldNode.typenode.isArray)
     {
         int size = fieldNode.getSInt32("size");
         fieldNode.value = fieldNode.getObject("data");
     }
     else if (fieldNode.typenode.type.StartsWith("PPtr<") && fieldNode.typenode.type.EndsWith(">"))
     {
         object obj = new PPtrObject();
         fillobject(obj, fieldNode);
         fieldNode.cleanChilds();
     }
     else if (fieldNode.typenode.type == "Quaternionf" || fieldNode.typenode.type == "Vector3f" ||
              fieldNode.typenode.type == "PackedBitVector" || fieldNode.typenode.type == "VertexData" ||
              fieldNode.typenode.type == "UnityPropertySheet" || fieldNode.typenode.type == "AssetInfo" ||
              fieldNode.typenode.type == "ResourceManager_Dependency")
     {
         System.Type t = System.Type.GetType("AssetEx." + fieldNode.typenode.type, false, false);
         System.Reflection.ConstructorInfo ci = t.GetConstructor(new Type[] { });
         object v = ci.Invoke(new object[] { });
         fillobject(v, fieldNode);
         fieldNode.cleanChilds();
     }
     else if (fieldNode.typenode.type == "map")
     {
         List <FieldNode>            childnodes = (List <FieldNode>)fieldNode.getArrayData();
         Dictionary <object, object> map        = new Dictionary <object, object>();
         foreach (FieldNode fn in childnodes)
         {
             object first  = fn.getObject("first");
             object second = fn.getObject("second");
             if (first != null && second != null)
             {
                 map[first] = second;
             }
         }
         fieldNode.value = map;
         fieldNode.cleanChilds();
     }
     else if (fieldNode.typenode.type == "vector")
     {
         object obj = fieldNode.getArrayData();
         if (obj is List <FieldNode> )
         {
             List <FieldNode> childnodes = (List <FieldNode>)obj;
             List <object>    vectorl    = new List <object>();
             foreach (FieldNode fn in childnodes)
             {
                 if (fn.value != null)
                 {
                     vectorl.Add(fn.value);
                 }
                 else
                 {
                     vectorl.Add(fn);
                 }
             }
             fieldNode.value = vectorl;
             fieldNode.cleanChilds();
         }
         else
         {
             fieldNode.value = obj;
             fieldNode.cleanChilds();
         }
     }
     else if (fieldNode.getChilds() != null && fieldNode.getChilds().Count == 1)
     {
         fieldNode.value = fieldNode.getArrayData();
         if (fieldNode.value != null)
         {
             fieldNode.cleanChilds();
         }
     }
 }