Example #1
0
        /// <inheritdoc/>
        public void LoadBinaryData(byte[] inData)
        {
            using (var ms = new MemoryStream(inData))
                using (var br = new BinaryReader(ms))
                {
                    for (int i = 0; i < 256; i++)
                    {
                        MH2OHeaders[i] = new MH2OHeader(br.ReadBytes(MH2OHeader.GetSize()));
                    }

                    foreach (var header in MH2OHeaders)
                    {
                        // load MH2O header subdata
                        if (header.LayerCount > 0)
                        {
                            // load MH2O instances
                            br.BaseStream.Position = header.OffsetInstances;
                            for (int i = 0; i < header.LayerCount; i++)
                            {
                                header.Instances[i] = new MH2OInstance(br.ReadBytes(MH2OInstance.GetSize()));
                            }

                            // load MH2O attributes
                            if (header.OffsetAttributes > 0)
                            {
                                br.BaseStream.Position = header.OffsetAttributes;
                                header.Attributes      = new MH2OAttribute(br.ReadBytes(MH2OAttribute.GetSize()));
                            }

                            // load MH2O instance subdata
                            foreach (var instance in header.Instances)
                            {
                                if (instance.OffsetExistsBitmap > 0)
                                {
                                    br.BaseStream.Position     = instance.OffsetExistsBitmap;
                                    instance.RenderBitmapBytes = br.ReadBytes(((instance.Width * instance.Height) + 7) / 8);
                                }

                                if (instance.OffsetVertexData > 0)
                                {
                                    br.BaseStream.Position = instance.OffsetVertexData;
                                    instance.VertexData    = new MH2OInstanceVertexData(br.ReadBytes(MH2OInstanceVertexData.GetSize(instance)), instance);
                                }
                            }
                        }
                    }
                }
        }