fCraft.VanillaMapGenState.FloodFill C# (CSharp) Method

FloodFill() private method

private FloodFill ( int x, int y, int z, Block newBlock ) : void
x int
y int
z int
newBlock Block
return void
        void FloodFill( int x, int y, int z, Block newBlock ) {
            if( blocks[Index( x, y, z )] != (byte)Block.Air ) return;
            Vector3I coord = new Vector3I( x, y, z );
            Stack<Vector3I> stack = new Stack<Vector3I>();
            stack.Push( coord );
            while( stack.Count > 0 ) {
                coord = stack.Pop();
                blocks[Index( coord.X, coord.Y, coord.Z )] = (byte)newBlock;
                if( coord.X + 1 < genParams.MapWidth && blocks[Index( coord.X + 1, coord.Y, coord.Z )] == (byte)Block.Air ) {
                    stack.Push( new Vector3I( coord.X + 1, coord.Y, coord.Z ) );
                }
                if( coord.X - 1 >= 0 && blocks[Index( coord.X - 1, coord.Y, coord.Z )] == (byte)Block.Air ) {
                    stack.Push( new Vector3I( coord.X - 1, coord.Y, coord.Z ) );
                }
                if( coord.Y + 1 < genParams.MapLength && blocks[Index( coord.X, coord.Y + 1, coord.Z )] == (byte)Block.Air ) {
                    stack.Push( new Vector3I( coord.X, coord.Y + 1, coord.Z ) );
                }
                if( coord.Y - 1 >= 0 && blocks[Index( coord.X, coord.Y - 1, coord.Z )] == (byte)Block.Air ) {
                    stack.Push( new Vector3I( coord.X, coord.Y - 1, coord.Z ) );
                }
                if( coord.Z - 1 >= 0 && blocks[Index( coord.X, coord.Y, coord.Z - 1 )] == (byte)Block.Air ) {
                    stack.Push( new Vector3I( coord.X, coord.Y, coord.Z - 1 ) );
                }
            }
        }