Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        //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;
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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);
        }