コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: Asset.cs プロジェクト: zxc120/GARbro
        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();
                }
            }
        }
コード例 #3
0
ファイル: Asset.cs プロジェクト: zxc120/GARbro
        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);
        }
コード例 #4
0
ファイル: Asset.cs プロジェクト: zxc120/GARbro
        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;
                }
            }
        }
コード例 #5
0
ファイル: Asset.cs プロジェクト: zxc120/GARbro
        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);
        }
コード例 #6
0
 public void LoadData(AssetReader reader)
 {
     m_Data = reader.ReadBytes(m_DataLength);
 }