/// <summary> /// Convert the object into DynamicAsset. /// </summary> /// <returns>Converted DynamicAsset.</returns> public static DynamicAsset ToDynamicAsset(this AssetsFile.ObjectType obj) { AssetsFile parent; if (!obj.parent.TryGetTarget(out parent)) { throw new NullReferenceException("parent"); } return((DynamicAsset.GetDeserializer(parent.Types[obj.TypeID]))(new UnityBinaryReader(obj.Data))); }
/// <summary> /// Update the content with the specified DynamicAsset. /// </summary> /// <param name="asset">DynamicAsset to load.</param> public static void LoadDynamicAsset(this AssetsFile.ObjectType obj, DynamicAsset asset) { AssetsFile parent; if (!obj.parent.TryGetTarget(out parent)) { throw new NullReferenceException("parent"); } UnityBinaryWriter w = new UnityBinaryWriter(); DynamicAsset.GetSerializer(parent.Types[obj.TypeID])(w, asset); obj.Data = w.ToBytes(); }
private object GenReadObject(NodeTree node) { protoman.PushType(node.Type); // Init Prototype string FQN = protoman.GetFQN(); Dictionary <string, object> protodic = new Dictionary <string, object>(); // Init Dictionary il.Emit(OpCodes.Ldc_I4, (int)node.Children.Count); il.Emit(OpCodes.Newobj, DicStrObjCtor); var members = node.Children; for (int i = 0; i < members.Count; i++) { string membername = PrettifyName(members[i].Name); il.Emit(OpCodes.Dup); il.Emit(OpCodes.Ldstr, membername); protodic.Add(membername, GenReadUnknownType(members[i], requireBoxing: true)); il.Emit(OpCodes.Callvirt, DicStrObjAdd); } // asset = new DynamicAsset(Dic, protoname); il.Emit(OpCodes.Ldstr, FQN); il.Emit(OpCodes.Newobj, DynamicAssetCtor); protoman.PopType(); // Generate Prototype var proto = new DynamicAsset(protodic, FQN); PrototypeDic[FQN] = proto; return(proto); }
/// <summary> /// Resizes this array. /// </summary> /// <remarks>If the specified size is less than the current size, the overflown part will be lost.</remarks> /// <param name="length">New size of the array.</param> public void Resize(int length) { DynamicAsset[] newarr = new DynamicAsset[length]; Array.Copy(elems, newarr, length > elems.Length ? length : elems.Length); elems = newarr; }