private static void ReadChunkLiquidHeights(BinaryReader br, ExtractedADTChunk chunk) { var liquidHeights = new float[TerrainConstants.UnitsPerChunkSide + 1, TerrainConstants.UnitsPerChunkSide + 1]; for (var x = 0; x <= TerrainConstants.UnitsPerChunkSide + 1; x++) { for (var y = 0; y <= TerrainConstants.UnitsPerChunkSide + 1; y++) { liquidHeights[y, x] = br.ReadSingle(); } } chunk.LiquidHeights = liquidHeights; }
//private static void ReadChunkHolesMap(BinaryReader br, ExtractedADTChunk chunk) //{ // chunk.HolesMap = new bool[4,4]; // for (var x = 0; x < 4; x++) // { // for (var y = 0; y < 4; y++) // { // chunk.HolesMap[y, x] = br.ReadBoolean(); // } // } //} //private static void ReadChunkHeightMap(BinaryReader br, ExtractedADTChunk chunk) //{ // var heightMap = new float[TerrainConstants.UnitsPerChunkSide + 1,TerrainConstants.UnitsPerChunkSide + 1]; // for (var x = 0; x < TerrainConstants.UnitsPerChunkSide + 1; x++) // { // for (var y = 0; y < TerrainConstants.UnitsPerChunkSide + 1; y++) // { // heightMap[y, x] = br.ReadSingle(); // } // } // chunk.HeightMap = heightMap; //} private static void ReadChunkLiquidMap(BinaryReader br, ExtractedADTChunk chunk) { var liquidMap = new bool[TerrainConstants.UnitsPerChunkSide, TerrainConstants.UnitsPerChunkSide]; for (var x = 0; x < TerrainConstants.UnitsPerChunkSide; x++) { for (var y = 0; y < TerrainConstants.UnitsPerChunkSide; y++) { liquidMap[y, x] = br.ReadBoolean(); } } chunk.LiquidMap = liquidMap; }
private static void ReadADTChunks(BinaryReader br, ExtractedADT adt) { var chunks = new ExtractedADTChunk[TerrainConstants.ChunksPerTileSide, TerrainConstants.ChunksPerTileSide]; for (var x = 0; x < TerrainConstants.ChunksPerTileSide; x++) { for (var y = 0; y < TerrainConstants.ChunksPerTileSide; y++) { chunks[y, x] = ReadADTChunk(br); } } adt.Chunks = chunks; }
private static ExtractedADTChunk ReadADTChunk(BinaryReader br) { var chunk = new ExtractedADTChunk { NodeId = br.ReadInt32(), IsFlat = br.ReadBoolean(), MedianHeight = br.ReadSingle(), M2References = br.ReadInt32List(), WMOReferences = br.ReadInt32List(), TerrainTris = br.ReadIndex3List(), HasLiquid = br.ReadBoolean() //HasHoles = br.ReadBoolean() }; //if (chunk.HasHoles) //{ // ReadChunkHolesMap(br, chunk); //} //if (!chunk.IsFlat) //{ // ReadChunkHeightMap(br, chunk); //} if (!chunk.HasLiquid) { return(chunk); } chunk.LiquidFlags = (MH2OFlags)br.ReadUInt16(); chunk.LiquidType = (FluidType)br.ReadUInt16(); chunk.IsLiquidFlat = br.ReadBoolean(); chunk.MedianLiquidHeight1 = br.ReadSingle(); chunk.MedianLiquidHeight2 = br.ReadSingle(); if (chunk.LiquidFlags.HasFlag(MH2OFlags.Ocean)) { return(chunk); } ReadChunkLiquidMap(br, chunk); if (chunk.IsLiquidFlat) { return(chunk); } ReadChunkLiquidHeights(br, chunk); return(chunk); }