private static double GenerateWorldSurfaceOffset(TerrainFeatureType featureType) { double num = 0.0; if (WorldGen.drunkWorldGen && WorldGen.genRand.Next(2) == 0) { switch (featureType) { case TerrainFeatureType.Plateau: while (GenBase._random.Next(0, 6) == 0) { num += (double)GenBase._random.Next(-1, 2); } break; case TerrainFeatureType.Hill: while (GenBase._random.Next(0, 3) == 0) { num -= 1.0; } while (GenBase._random.Next(0, 10) == 0) { num += 1.0; } break; case TerrainFeatureType.Dale: while (GenBase._random.Next(0, 3) == 0) { num += 1.0; } while (GenBase._random.Next(0, 10) == 0) { num -= 1.0; } break; case TerrainFeatureType.Mountain: while (GenBase._random.Next(0, 3) != 0) { num -= 1.0; } while (GenBase._random.Next(0, 6) == 0) { num += 1.0; } break; case TerrainFeatureType.Valley: while (GenBase._random.Next(0, 3) != 0) { num += 1.0; } while (GenBase._random.Next(0, 5) == 0) { num -= 1.0; } break; } } else { switch (featureType) { case TerrainFeatureType.Plateau: while (GenBase._random.Next(0, 7) == 0) { num += (double)GenBase._random.Next(-1, 2); } break; case TerrainFeatureType.Hill: while (GenBase._random.Next(0, 4) == 0) { num -= 1.0; } while (GenBase._random.Next(0, 10) == 0) { num += 1.0; } break; case TerrainFeatureType.Dale: while (GenBase._random.Next(0, 4) == 0) { num += 1.0; } while (GenBase._random.Next(0, 10) == 0) { num -= 1.0; } break; case TerrainFeatureType.Mountain: while (GenBase._random.Next(0, 2) == 0) { num -= 1.0; } while (GenBase._random.Next(0, 6) == 0) { num += 1.0; } break; case TerrainFeatureType.Valley: while (GenBase._random.Next(0, 2) == 0) { num += 1.0; } while (GenBase._random.Next(0, 5) == 0) { num -= 1.0; } break; } } return(num); }
protected override void ApplyPass(GenerationProgress progress, GameConfiguration configuration) { int num = configuration.Get <int>("FlatBeachPadding"); progress.Message = Lang.gen[0].Value; TerrainFeatureType terrainFeatureType = TerrainFeatureType.Plateau; int num2 = 0; double num3 = (double)Main.maxTilesY * 0.3; num3 *= (double)GenBase._random.Next(90, 110) * 0.005; double num4 = num3 + (double)Main.maxTilesY * 0.2; num4 *= (double)GenBase._random.Next(90, 110) * 0.01; double num5 = num3; double num6 = num3; double num7 = num4; double num8 = num4; double num9 = (double)Main.maxTilesY * 0.23; SurfaceHistory surfaceHistory = new SurfaceHistory(500); num2 = LeftBeachSize + num; for (int i = 0; i < Main.maxTilesX; i++) { progress.Set((float)i / (float)Main.maxTilesX); num5 = Math.Min(num3, num5); num6 = Math.Max(num3, num6); num7 = Math.Min(num4, num7); num8 = Math.Max(num4, num8); if (num2 <= 0) { terrainFeatureType = (TerrainFeatureType)GenBase._random.Next(0, 5); num2 = GenBase._random.Next(5, 40); if (terrainFeatureType == TerrainFeatureType.Plateau) { num2 *= (int)((double)GenBase._random.Next(5, 30) * 0.2); } } num2--; if ((double)i > (double)Main.maxTilesX * 0.45 && (double)i < (double)Main.maxTilesX * 0.55 && (terrainFeatureType == TerrainFeatureType.Mountain || terrainFeatureType == TerrainFeatureType.Valley)) { terrainFeatureType = (TerrainFeatureType)GenBase._random.Next(3); } if ((double)i > (double)Main.maxTilesX * 0.48 && (double)i < (double)Main.maxTilesX * 0.52) { terrainFeatureType = TerrainFeatureType.Plateau; } num3 += GenerateWorldSurfaceOffset(terrainFeatureType); float num10 = 0.17f; float num11 = 0.26f; if (WorldGen.drunkWorldGen) { num10 = 0.15f; num11 = 0.28f; } if (i < LeftBeachSize + num || i > Main.maxTilesX - RightBeachSize - num) { num3 = Utils.Clamp(num3, (double)Main.maxTilesY * 0.17, num9); } else if (num3 < (double)((float)Main.maxTilesY * num10)) { num3 = (float)Main.maxTilesY * num10; num2 = 0; } else if (num3 > (double)((float)Main.maxTilesY * num11)) { num3 = (float)Main.maxTilesY * num11; num2 = 0; } while (GenBase._random.Next(0, 3) == 0) { num4 += (double)GenBase._random.Next(-2, 3); } if (num4 < num3 + (double)Main.maxTilesY * 0.06) { num4 += 1.0; } if (num4 > num3 + (double)Main.maxTilesY * 0.35) { num4 -= 1.0; } surfaceHistory.Record(num3); FillColumn(i, num3, num4); if (i == Main.maxTilesX - RightBeachSize - num) { if (num3 > num9) { RetargetSurfaceHistory(surfaceHistory, i, num9); } terrainFeatureType = TerrainFeatureType.Plateau; num2 = Main.maxTilesX - i; } } Main.worldSurface = (int)(num6 + 25.0); Main.rockLayer = num8; double num12 = (int)((Main.rockLayer - Main.worldSurface) / 6.0) * 6; Main.rockLayer = (int)(Main.worldSurface + num12); int num13 = (int)(Main.rockLayer + (double)Main.maxTilesY) / 2; num13 += GenBase._random.Next(-100, 20); int lavaLine = num13 + GenBase._random.Next(50, 80); int num14 = 20; if (num7 < num6 + (double)num14) { double num15 = (num7 + num6) / 2.0; double num16 = Math.Abs(num7 - num6); if (num16 < (double)num14) { num16 = num14; } num7 = num15 + num16 / 2.0; num6 = num15 - num16 / 2.0; } RockLayer = num4; RockLayerHigh = num8; RockLayerLow = num7; WorldSurface = num3; WorldSurfaceHigh = num6; WorldSurfaceLow = num5; WaterLine = num13; LavaLine = lavaLine; }