fCraft.VanillaMapGenState.MakeOreVeins C# (CSharp) Method

MakeOreVeins() private method

private MakeOreVeins ( Block oreTile, int density ) : void
oreTile Block
density int
return void
        void MakeOreVeins( Block oreTile, int density ) {
            if( density < 1 || density > 500 )
                throw new ArgumentOutOfRangeException( "density", "Ore density must be between 1 and 500" );
            Random oreVeinRand = new Random( random.Next() );
            int maxVeins = genParams.MapWidth*genParams.MapLength*genParams.MapHeight/256/64*density/100;

            for( int vein = 0; vein < maxVeins; vein++ ) {
                double startX = oreVeinRand.NextDouble()*genParams.MapWidth;
                double startY = oreVeinRand.NextDouble()*genParams.MapLength;
                double startZ = oreVeinRand.NextDouble()*genParams.MapHeight;
                double f4 = oreVeinRand.NextDouble()*Math.PI*2;
                double f5 = 0;
                double f6 = oreVeinRand.NextDouble()*Math.PI*2;
                double f7 = 0;
                int m = (int)((oreVeinRand.NextDouble() + oreVeinRand.NextDouble()) * 75 * density / 100);
                for( int n = 0; n < m; n++ ) {
                    startX += Math.Sin( f4 )*Math.Cos( f6 );
                    startY += Math.Cos( f4 )*Math.Sin( f6 );
                    startZ += Math.Sin( f6 );
                    f4 += f5*0.2;
                    f5 = (f5*0.9) + (oreVeinRand.NextDouble() - oreVeinRand.NextDouble());
                    f6 = (f6 + f7*0.5)*0.5;
                    f7 = (f7*0.9) + (oreVeinRand.NextDouble() - oreVeinRand.NextDouble());
                    double f8 = Math.Sin( n*Math.PI/m )*density/100 + 1;
                    for( int x = (int)(startX - f8); x <= (int)(startX + f8); x++ ) {
                        for( int z = (int)(startZ - f8); z <= (int)(startZ + f8); z++ ) {
                            for( int y = (int)(startY - f8); y <= (int)(startY + f8); y++ ) {
                                double f9 = x - startX;
                                double f10 = z - startZ;
                                double f11 = y - startY;
                                f9 = f9*f9 + f10*f10*2 + f11*f11;
                                if( (f9 >= f8*f8) || (x < 1) || (z < 1) || (y < 1) ||
                                    (x >= genParams.MapWidth - 1) || (z >= genParams.MapHeight - 1) ||
                                    (y >= genParams.MapLength - 1) )
                                    continue;
                                int index = Index( x, y, z );
                                if( (Block)blocks[index] == Block.Stone ) {
                                    blocks[index] = (byte)oreTile;
                                }
                            }
                        }
                    }
                }
            }
        }