Exemplo n.º 1
0
        public void LoadBinaryData(byte[] inData)
        {
            using (MemoryStream ms = new MemoryStream(inData))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    this.Header = new MapChunkHeader(br.ReadBytes(MapChunkHeader.GetSize()));

                    if (this.Header.HeightmapOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.HeightmapOffset;
                        this.Heightmap = br.ReadIFFChunk<MapChunkHeightmap>();
                    }

                    if (this.Header.VertexNormalOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.VertexNormalOffset;
                        this.VertexNormals = br.ReadIFFChunk<MapChunkVertexNormals>();
                    }

                    if (this.Header.TextureLayersOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.TextureLayersOffset;
                        this.TextureLayers = br.ReadIFFChunk<MapChunkTextureLayers>();
                    }

                    if (this.Header.ModelReferencesOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.ModelReferencesOffset;
                        this.ModelReferences = br.ReadIFFChunk<MapChunkModelReferences>();

                        this.ModelReferences.PostLoadReferences(this.Header.ModelReferenceCount, this.Header.WorldModelObjectReferenceCount);
                    }

                    if (this.Header.AlphaMapsOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.AlphaMapsOffset;
                        this.AlphaMaps = br.ReadIFFChunk<MapChunkAlphaMaps>();
                    }

                    if (this.Header.BakedShadowsOffset > 0 && this.Header.Flags.HasFlag(MapChunkFlags.HasBakedShadows))
                    {
                        br.BaseStream.Position = this.Header.BakedShadowsOffset;
                        this.BakedShadows = br.ReadIFFChunk<MapChunkBakedShadows>();
                    }

                    if (this.Header.SoundEmittersOffset > 0 && this.Header.SoundEmitterCount > 0)
                    {
                        br.BaseStream.Position = this.Header.SoundEmittersOffset;
                        this.SoundEmitters = br.ReadIFFChunk<MapChunkSoundEmitters>();
                    }

                    if (this.Header.LiquidOffset > 0 && this.Header.LiquidSize > 8)
                    {
                        br.BaseStream.Position = this.Header.LiquidOffset;
                        this.Liquid = br.ReadIFFChunk<MapChunkLiquids>();
                    }

                    if (this.Header.VertexShadingOffset > 0 && this.Header.Flags.HasFlag(MapChunkFlags.HasVertexShading))
                    {
                        br.BaseStream.Position = this.Header.SoundEmittersOffset;
                        this.VertexShading = br.ReadIFFChunk<MapChunkVertexShading>();
                    }

                    if (this.Header.VertexLightingOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.VertexLightingOffset;
                        this.VertexLighting = br.ReadIFFChunk<MapChunkVertexLighting>();
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void LoadBinaryData(byte[] inData)
        {
            using (MemoryStream ms = new MemoryStream(inData))
            {
                using (BinaryReader br = new BinaryReader(ms))
                {
                    this.Header = new MapChunkHeader(br.ReadBytes(MapChunkHeader.GetSize()));

                    if (this.Header.HeightmapOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.HeightmapOffset;
                        this.Heightmap         = br.ReadIFFChunk <MapChunkHeightmap>();
                    }

                    if (this.Header.VertexNormalOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.VertexNormalOffset;
                        this.VertexNormals     = br.ReadIFFChunk <MapChunkVertexNormals>();
                    }

                    if (this.Header.TextureLayersOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.TextureLayersOffset;
                        this.TextureLayers     = br.ReadIFFChunk <MapChunkTextureLayers>();
                    }

                    if (this.Header.ModelReferencesOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.ModelReferencesOffset;
                        this.ModelReferences   = br.ReadIFFChunk <MapChunkModelReferences>();

                        this.ModelReferences.PostLoadReferences(this.Header.ModelReferenceCount, this.Header.WorldModelObjectReferenceCount);
                    }

                    if (this.Header.AlphaMapsOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.AlphaMapsOffset;
                        this.AlphaMaps         = br.ReadIFFChunk <MapChunkAlphaMaps>();
                    }

                    if (this.Header.BakedShadowsOffset > 0 && this.Header.Flags.HasFlag(MapChunkFlags.HasBakedShadows))
                    {
                        br.BaseStream.Position = this.Header.BakedShadowsOffset;
                        this.BakedShadows      = br.ReadIFFChunk <MapChunkBakedShadows>();
                    }

                    if (this.Header.SoundEmittersOffset > 0 && this.Header.SoundEmitterCount > 0)
                    {
                        br.BaseStream.Position = this.Header.SoundEmittersOffset;
                        this.SoundEmitters     = br.ReadIFFChunk <MapChunkSoundEmitters>();
                    }

                    if (this.Header.LiquidOffset > 0 && this.Header.LiquidSize > 8)
                    {
                        br.BaseStream.Position = this.Header.LiquidOffset;
                        this.Liquid            = br.ReadIFFChunk <MapChunkLiquids>();
                    }

                    if (this.Header.VertexShadingOffset > 0 && this.Header.Flags.HasFlag(MapChunkFlags.HasVertexShading))
                    {
                        br.BaseStream.Position = this.Header.SoundEmittersOffset;
                        this.VertexShading     = br.ReadIFFChunk <MapChunkVertexShading>();
                    }

                    if (this.Header.VertexLightingOffset > 0)
                    {
                        br.BaseStream.Position = this.Header.VertexLightingOffset;
                        this.VertexLighting    = br.ReadIFFChunk <MapChunkVertexLighting>();
                    }
                }
            }
        }