Пример #1
0
        void AttachDependencyData(PPtrObject ptr, ObjectData srcod)
        {
            if (m_DependentAssets == null)
            {
                return;
            }

            long key = ptr.GetKey();

            if (m_DependentAssets.ContainsKey(key))
            {
                List <object> dependentlist = m_DependentAssets[key];
                foreach (PPtrObject dependentobj in dependentlist)
                {
                    ObjectData dependentod = GetObjectDataFromPtr(dependentobj);
                    if (dependentod != null)
                    {
                        if (dependentod.path == null || dependentod.path.Length <= 0)
                        {
                            dependentod.path = srcod.path;
                            AttachDependencyData(dependentobj, dependentod);
                        }
                    }
                }
            }
        }
Пример #2
0
        ObjectData GetObjectDataFromPtr(object ptr)
        {
            PPtrObject pobj = new PPtrObject();

            pobj.m_FileID = -1;
            pobj.m_PathID = -1;
            if (ptr.GetType() == typeof(PPtrObject))
            {
                pobj = (PPtrObject)ptr;
            }
            else if (ptr.GetType() == typeof(AssetInfo))
            {
                AssetInfo ai = (AssetInfo)ptr;
                pobj = ai.asset;
            }

            if (pobj.m_FileID >= 0 && pobj.m_FileID < afnames.Length)
            {
                string      assetfilename         = afnames[pobj.m_FileID];
                AssetFileEx af                    = afs[assetfilename];
                Dictionary <long, ObjectData> ods = af.objects;
                if (ods.ContainsKey(pobj.m_PathID))
                {
                    ObjectData od = ods[pobj.m_PathID];
                    return(od);
                }
            }
            return(null);
        }
Пример #3
0
        void AttachPreLoadData(int start, int size, ObjectData srcod)
        {
            if (m_PreloadTable == null)
            {
                return;
            }

            for (int i = start; i < start + size; i++)
            {
                if (i >= 0 && i < m_PreloadTable.Count)
                {
                    PPtrObject ptr         = (PPtrObject)m_PreloadTable[i];
                    ObjectData dependentod = GetObjectDataFromPtr(ptr);
                    if (dependentod != null)
                    {
                        if (dependentod.path == null || dependentod.path.Length <= 0)
                        {
                            dependentod.path = srcod.path;
                        }
                    }
                }
            }
        }
Пример #4
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();
         }
     }
 }