public bool Generate (IBlockManager blockMan, Random rand, int x, int y, int z) { float rpi = (float)(rand.NextDouble() * Math.PI); double x1 = x + 8 + MathHelper.Sin(rpi) * _size / 8.0F; double x2 = x + 8 - MathHelper.Sin(rpi) * _size / 8.0F; double z1 = z + 8 + MathHelper.Cos(rpi) * _size / 8.0F; double z2 = z + 8 - MathHelper.Cos(rpi) * _size / 8.0F; double y1 = y + rand.Next(3) + 2; double y2 = y + rand.Next(3) + 2; for (int i = 0; i <= _size; i++) { double xPos = x1 + (x2 - x1) * i / _size; double yPos = y1 + (y2 - y1) * i / _size; double zPos = z1 + (z2 - z1) * i / _size; double fuzz = rand.NextDouble() * _size / 16.0D; double fuzzXZ = (MathHelper.Sin((float)(i * Math.PI / _size)) + 1.0F) * fuzz + 1.0D; double fuzzY = (MathHelper.Sin((float)(i * Math.PI / _size)) + 1.0F) * fuzz + 1.0D; int xStart, yStart, zStart, xEnd, yEnd, zEnd; if (_mathFix) { xStart = (int)Math.Floor(xPos - fuzzXZ / 2.0D); yStart = (int)Math.Floor(yPos - fuzzY / 2.0D); zStart = (int)Math.Floor(zPos - fuzzXZ / 2.0D); xEnd = (int)Math.Floor(xPos + fuzzXZ / 2.0D); yEnd = (int)Math.Floor(yPos + fuzzY / 2.0D); zEnd = (int)Math.Floor(zPos + fuzzXZ / 2.0D); } else { xStart = (int)(xPos - fuzzXZ / 2.0D); yStart = (int)(yPos - fuzzY / 2.0D); zStart = (int)(zPos - fuzzXZ / 2.0D); xEnd = (int)(xPos + fuzzXZ / 2.0D); yEnd = (int)(yPos + fuzzY / 2.0D); zEnd = (int)(zPos + fuzzXZ / 2.0D); } for (int ix = xStart; ix <= xEnd; ix++) { double xThresh = (ix + 0.5D - xPos) / (fuzzXZ / 2.0D); if (xThresh * xThresh < 1.0D) { for (int iy = yStart; iy <= yEnd; iy++) { double yThresh = (iy + 0.5D - yPos) / (fuzzY / 2.0D); if (xThresh * xThresh + yThresh * yThresh < 1.0D) { for (int iz = zStart; iz <= zEnd; iz++) { double zThresh = (iz + 0.5D - zPos) / (fuzzXZ / 2.0D); if (xThresh * xThresh + yThresh * yThresh + zThresh * zThresh < 1.0D) { AlphaBlockRef block = blockMan.GetBlockRef(ix, iy, iz); if (block.IsValid) { block.ID = _blockId; block.Data = _blockData; } } } } } } } } return true; }
public bool Generate(IBlockManager blockMan, Random rand, int x, int y, int z) { float rpi = (float)(rand.NextDouble() * Math.PI); double x1 = x + 8 + MathHelper.Sin(rpi) * _size / 8.0F; double x2 = x + 8 - MathHelper.Sin(rpi) * _size / 8.0F; double z1 = z + 8 + MathHelper.Cos(rpi) * _size / 8.0F; double z2 = z + 8 - MathHelper.Cos(rpi) * _size / 8.0F; double y1 = y + rand.Next(3) + 2; double y2 = y + rand.Next(3) + 2; for (int i = 0; i <= _size; i++) { double xPos = x1 + (x2 - x1) * i / _size; double yPos = y1 + (y2 - y1) * i / _size; double zPos = z1 + (z2 - z1) * i / _size; double fuzz = rand.NextDouble() * _size / 16.0D; double fuzzXZ = (MathHelper.Sin((float)(i * Math.PI / _size)) + 1.0F) * fuzz + 1.0D; double fuzzY = (MathHelper.Sin((float)(i * Math.PI / _size)) + 1.0F) * fuzz + 1.0D; int xStart, yStart, zStart, xEnd, yEnd, zEnd; if (_mathFix) { xStart = (int)Math.Floor(xPos - fuzzXZ / 2.0D); yStart = (int)Math.Floor(yPos - fuzzY / 2.0D); zStart = (int)Math.Floor(zPos - fuzzXZ / 2.0D); xEnd = (int)Math.Floor(xPos + fuzzXZ / 2.0D); yEnd = (int)Math.Floor(yPos + fuzzY / 2.0D); zEnd = (int)Math.Floor(zPos + fuzzXZ / 2.0D); } else { xStart = (int)(xPos - fuzzXZ / 2.0D); yStart = (int)(yPos - fuzzY / 2.0D); zStart = (int)(zPos - fuzzXZ / 2.0D); xEnd = (int)(xPos + fuzzXZ / 2.0D); yEnd = (int)(yPos + fuzzY / 2.0D); zEnd = (int)(zPos + fuzzXZ / 2.0D); } for (int ix = xStart; ix <= xEnd; ix++) { double xThresh = (ix + 0.5D - xPos) / (fuzzXZ / 2.0D); if (xThresh * xThresh < 1.0D) { for (int iy = yStart; iy <= yEnd; iy++) { double yThresh = (iy + 0.5D - yPos) / (fuzzY / 2.0D); if (xThresh * xThresh + yThresh * yThresh < 1.0D) { for (int iz = zStart; iz <= zEnd; iz++) { double zThresh = (iz + 0.5D - zPos) / (fuzzXZ / 2.0D); if (xThresh * xThresh + yThresh * yThresh + zThresh * zThresh < 1.0D) { AlphaBlockRef block = blockMan.GetBlockRef(ix, iy, iz); if (block.IsValid) { block.ID = _blockId; block.Data = _blockData; } } } } } } } } return(true); }