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>(); } } } }
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>(); } } } }