public override bool Place(Point origin, StructureMap structures) { if (_slabs == null) { _slabs = new Slab[56, 26]; } int num1 = GenBase._random.Next(80, 150) / 3; int num2 = GenBase._random.Next(40, 60) / 3; int num3 = (num2 * 3 - GenBase._random.Next(20, 30)) / 3; origin.X -= num1 * 3 / 2; origin.Y -= num2 * 3 / 2; for (int index1 = -1; index1 < num1 + 1; ++index1) { float num4 = (float)((index1 - num1 / 2) / num1 + 0.5); int num5 = (int)((0.5 - (double)Math.Abs(num4 - 0.5f)) * 5.0) - 2; for (int index2 = -1; index2 < num2 + 1; ++index2) { bool hasWall = true; bool flag1 = false; bool flag2 = IsGroupSolid(index1 * 3 + origin.X, index2 * 3 + origin.Y, 3); int num6 = Math.Abs(index2 - num2 / 2) - num3 / 4 + num5; if (num6 > 3) { flag1 = flag2; hasWall = false; } else if (num6 > 0) { flag1 = index2 - num2 / 2 > 0 || flag2; hasWall = index2 - num2 / 2 < 0 || num6 <= 2; } else if (num6 == 0) { flag1 = GenBase._random.Next(2) == 0 && (index2 - num2 / 2 > 0 || flag2); } if ((double)Math.Abs(num4 - 0.5f) > 0.349999994039536 + (double)Utils.NextFloat(GenBase._random) * 0.100000001490116 && !flag2) { hasWall = false; flag1 = false; } _slabs[index1 + 1, index2 + 1] = Slab.Create(flag1 ? new SlabState(SlabStates.Solid) : new SlabState(SlabStates.Empty), hasWall); } } for (int index1 = 0; index1 < num1; ++index1) { for (int index2 = 0; index2 < num2; ++index2) { SmoothSlope(index1 + 1, index2 + 1); } } int num7 = num1 / 2; int val1 = num2 / 2; int num8 = (val1 + 1) * (val1 + 1); float num9 = (float)(Utils.NextFloat(GenBase._random) * 2.0 - 1.0); float num10 = (float)(Utils.NextFloat(GenBase._random) * 2.0 - 1.0); float num11 = (float)(Utils.NextFloat(GenBase._random) * 2.0 - 1.0); float num12 = 0.0f; for (int index1 = 0; index1 <= num1; ++index1) { float num4 = (float)val1 / (float)num7 * (float)(index1 - num7); int num5 = Math.Min(val1, (int)Math.Sqrt(Math.Max(0.0f, (float)num8 - num4 * num4))); if (index1 < num1 / 2) { num12 += MathHelper.Lerp(num9, num10, (float)index1 / (float)(num1 / 2)); } else { num12 += MathHelper.Lerp(num10, num11, (float)(index1 / (num1 / 2) - 1.0)); } for (int index2 = val1 - num5; index2 <= val1 + num5; ++index2) { PlaceSlab(_slabs[index1 + 1, index2 + 1], index1 * 3 + origin.X, index2 * 3 + origin.Y + (int)num12, 3); } } return(true); }
public override bool Place(Point origin, StructureMap structures) { if (_slabs == null) { _slabs = new Slab[56, 26]; } int num = GenBase._random.Next(80, 150) / 3; int num2 = GenBase._random.Next(40, 60) / 3; int num3 = (num2 * 3 - GenBase._random.Next(20, 30)) / 3; origin.X -= num * 3 / 2; origin.Y -= num2 * 3 / 2; for (int i = -1; i < num + 1; i++) { float num4 = (float)(i - num / 2) / (float)num + 0.5f; int num5 = (int)((0.5f - Math.Abs(num4 - 0.5f)) * 5f) - 2; for (int j = -1; j < num2 + 1; j++) { bool hasWall = true; bool flag = false; bool flag2 = IsGroupSolid(i * 3 + origin.X, j * 3 + origin.Y, 3); int num6 = Math.Abs(j - num2 / 2); int num7 = num6 - num3 / 4 + num5; if (num7 > 3) { flag = flag2; hasWall = false; } else if (num7 > 0) { flag = (j - num2 / 2 > 0 || flag2); hasWall = (j - num2 / 2 < 0 || num7 <= 2); } else if (num7 == 0) { flag = (GenBase._random.Next(2) == 0 && (j - num2 / 2 > 0 || flag2)); } if (Math.Abs(num4 - 0.5f) > 0.35f + GenBase._random.NextFloat() * 0.1f && !flag2) { hasWall = false; flag = false; } _slabs[i + 1, j + 1] = Slab.Create(flag ? new SlabState(SlabStates.Solid) : new SlabState(SlabStates.Empty), hasWall); } } for (int k = 0; k < num; k++) { for (int l = 0; l < num2; l++) { SmoothSlope(k + 1, l + 1); } } int num8 = num / 2; int num9 = num2 / 2; int num10 = (num9 + 1) * (num9 + 1); float value = GenBase._random.NextFloat() * 2f - 1f; float num11 = GenBase._random.NextFloat() * 2f - 1f; float value2 = GenBase._random.NextFloat() * 2f - 1f; float num12 = 0f; for (int m = 0; m <= num; m++) { float num13 = (float)num9 / (float)num8 * (float)(m - num8); int num14 = Math.Min(num9, (int)Math.Sqrt(Math.Max(0f, (float)num10 - num13 * num13))); num12 = ((m >= num / 2) ? (num12 + MathHelper.Lerp(num11, value2, (float)m / (float)(num / 2) - 1f)) : (num12 + MathHelper.Lerp(value, num11, (float)m / (float)(num / 2)))); for (int n = num9 - num14; n <= num9 + num14; n++) { PlaceSlab(_slabs[m + 1, n + 1], m * 3 + origin.X, n * 3 + origin.Y + (int)num12, 3); } } return(true); }
public override bool Place(Point origin, StructureMap structures) { if (WorldGen.BiomeTileCheck(origin.X, origin.Y)) { return(false); } if (_slabs == null) { _slabs = new Slab[56, 26]; } int num = GenBase._random.Next(80, 150) / 3; int num2 = GenBase._random.Next(40, 60) / 3; int num3 = (num2 * 3 - GenBase._random.Next(20, 30)) / 3; origin.X -= num * 3 / 2; origin.Y -= num2 * 3 / 2; for (int i = -1; i < num + 1; i++) { double num4 = (double)(i - num / 2) / (double)num + 0.5; int num5 = (int)((0.5 - Math.Abs(num4 - 0.5)) * 5.0) - 2; for (int j = -1; j < num2 + 1; j++) { bool hasWall = true; bool flag = false; bool flag2 = IsGroupSolid(i * 3 + origin.X, j * 3 + origin.Y, 3); int num6 = Math.Abs(j - num2 / 2) - num3 / 4 + num5; if (num6 > 3) { flag = flag2; hasWall = false; } else if (num6 > 0) { flag = j - num2 / 2 > 0 || flag2; hasWall = j - num2 / 2 < 0 || num6 <= 2; } else if (num6 == 0) { flag = GenBase._random.Next(2) == 0 && (j - num2 / 2 > 0 || flag2); } if (Math.Abs(num4 - 0.5) > (double)(0.35f + GenBase._random.NextFloat() * 0.1f) && !flag2) { hasWall = false; flag = false; } _slabs[i + 1, j + 1] = Slab.Create(flag ? new SlabState(SlabStates.Solid) : new SlabState(SlabStates.Empty), hasWall); } } for (int k = 0; k < num; k++) { for (int l = 0; l < num2; l++) { SmoothSlope(k + 1, l + 1); } } int num7 = num / 2; int num8 = num2 / 2; int num9 = (num8 + 1) * (num8 + 1); float value = GenBase._random.NextFloat() * 2f - 1f; float num10 = GenBase._random.NextFloat() * 2f - 1f; float value2 = GenBase._random.NextFloat() * 2f - 1f; float num11 = 0f; for (int m = 0; m <= num; m++) { float num12 = (float)num8 / (float)num7 * (float)(m - num7); int num13 = Math.Min(num8, (int)Math.Sqrt(Math.Max(0f, (float)num9 - num12 * num12))); num11 = ((m >= num / 2) ? (num11 + MathHelper.Lerp(num10, value2, (float)m / (float)(num / 2) - 1f)) : (num11 + MathHelper.Lerp(value, num10, (float)m / (float)(num / 2)))); for (int n = num8 - num13; n <= num8 + num13; n++) { PlaceSlab(_slabs[m + 1, n + 1], m * 3 + origin.X, n * 3 + origin.Y + (int)num11, 3); } } structures.AddStructure(new Rectangle(origin.X, origin.Y, num * 3, num2 * 3), 8); return(true); }