public void Load(AssetReader reader) { m_Name = reader.ReadString(); reader.Align(); m_Width = reader.ReadInt32(); m_Height = reader.ReadInt32(); m_CompleteImageSize = reader.ReadInt32(); m_TextureFormat = (TextureFormat)reader.ReadInt32(); m_MipCount = reader.ReadInt32(); m_IsReadable = reader.ReadBool(); m_ReadAllowed = reader.ReadBool(); reader.Align(); m_ImageCount = reader.ReadInt32(); m_TextureDimension = reader.ReadInt32(); m_FilterMode = reader.ReadInt32(); m_Aniso = reader.ReadInt32(); m_MipBias = reader.ReadInt32(); m_WrapMode = reader.ReadInt32(); m_LightFormat = reader.ReadInt32(); m_ColorSpace = reader.ReadInt32(); int length = reader.ReadInt32(); m_Data = reader.ReadBytes(length); if (0 == length) { m_StreamData = new StreamingInfo(); m_StreamData.Load(reader); } }
void LoadBlob(AssetReader reader) { int count = reader.ReadInt32(); int buffer_bytes = reader.ReadInt32(); var node_data = reader.ReadBytes(24 * count); m_data = reader.ReadBytes(buffer_bytes); var parents = new Stack <TypeTree>(); parents.Push(this); using (var buf = new BinMemoryStream(node_data)) { for (int i = 0; i < count; ++i) { int version = buf.ReadInt16(); int depth = buf.ReadUInt8(); TypeTree current; if (0 == depth) { current = this; } else { while (parents.Count > depth) { parents.Pop(); } current = new TypeTree(m_format); parents.Peek().Children.Add(current); parents.Push(current); } current.Version = version; current.IsArray = buf.ReadUInt8() != 0; current.Type = GetString(buf.ReadInt32()); current.Name = GetString(buf.ReadInt32()); current.Size = buf.ReadInt32(); current.Index = buf.ReadUInt32(); current.Flags = buf.ReadInt32(); } } }
public static AssetRef Load(AssetReader reader) { var r = new AssetRef(); r.AssetPath = reader.ReadCString(); r.Guid = new Guid(reader.ReadBytes(16)); r.Type = reader.ReadInt32(); r.FilePath = reader.ReadCString(); r.Asset = null; return(r); }
public void Load(AssetReader reader) { int format = reader.Format; m_version = reader.ReadCString(); var platform = reader.ReadInt32(); if (format >= 13) { bool has_type_trees = reader.ReadBool(); int count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { int class_id = reader.ReadInt32(); if (format >= 17) { reader.ReadByte(); int script_id = reader.ReadInt16(); if (114 == class_id) { if (script_id >= 0) { class_id = -2 - script_id; } else { class_id = -1; } } } m_class_ids.Add(class_id); byte[] hash = reader.ReadBytes(class_id < 0 ? 0x20 : 0x10); m_hashes[class_id] = hash; if (has_type_trees) { var tree = new TypeTree(format); tree.Load(reader); m_type_trees[class_id] = tree; } } } else { int count = reader.ReadInt32(); for (int i = 0; i < count; ++i) { int class_id = reader.ReadInt32(); var tree = new TypeTree(format); tree.Load(reader); m_type_trees[class_id] = tree; } } }
object DeserializeType(AssetReader input, TypeTree node) { object obj = null; if (node.IsArray) { int size = input.ReadInt32(); var data_field = node.Children.FirstOrDefault(n => n.Name == "data"); if (data_field != null) { if ("TypelessData" == node.Type) { obj = input.ReadBytes(size * data_field.Size); } else { obj = DeserializeArray(input, size, data_field); } } } else if (node.Size < 0) { if (node.Type == "string") { obj = input.ReadString(); if (node.Children[0].IsAligned) { input.Align(); } } else if (node.Type == "StreamingInfo") { var info = new StreamingInfo(); info.Load(input); obj = info; } else { throw new NotImplementedException("Unknown class encountered in asset deserialzation."); } } else if ("int" == node.Type) { obj = input.ReadInt32(); } else if ("unsigned int" == node.Type) { obj = input.ReadUInt32(); } else if ("bool" == node.Type) { obj = input.ReadBool(); } else { input.Position += node.Size; } if (node.IsAligned) { input.Align(); } return(obj); }
public void LoadData(AssetReader reader) { m_Data = reader.ReadBytes(m_DataLength); }