private static void RetargetSurfaceHistory(SurfaceHistory history, int targetX, double targetHeight) { for (int i = 0; i < history.Length / 2; i++) { if (history[history.Length - 1] <= targetHeight) { break; } for (int j = 0; j < history.Length - i * 2; j++) { double num = history[history.Length - j - 1]; num -= 1.0; history[history.Length - j - 1] = num; if (num <= targetHeight) { break; } } } for (int k = 0; k < history.Length; k++) { double worldSurface = history[history.Length - k - 1]; RetargetColumn(targetX - k, worldSurface); } }
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; }