private static void PlaceClusters(DesertDescription description, ClusterGroup clusters) { Rectangle hive = description.Hive; hive.Inflate(20, 20); PostPlacementEffect[,] array = new PostPlacementEffect[hive.Width, hive.Height]; PlaceClustersArea(description, clusters, hive, array, Point.Zero); for (int i = hive.Left; i < hive.Right; i++) { for (int j = hive.Top; j < hive.Bottom; j++) { PostPlacementEffect postPlacementEffect = array[i - hive.Left, j - hive.Top]; if (postPlacementEffect.HasFlag(PostPlacementEffect.Smooth)) { Tile.SmoothSlope(i, j, applyToNeighbors: false); } } } }
private static void PlaceClustersArea(DesertDescription description, ClusterGroup clusters, Rectangle area, PostPlacementEffect[,] postEffectMap, Point postEffectMapOffset) { FastRandom fastRandom = new FastRandom(Main.ActiveWorldFileData.Seed).WithModifier(57005uL); Vector2 value = new Vector2(description.Hive.Width, description.Hive.Height); Vector2 value2 = new Vector2(clusters.Width, clusters.Height); Vector2 value3 = description.BlockScale / 2f; for (int i = area.Left; i < area.Right; i++) { for (int j = area.Top; j < area.Bottom; j++) { if (!WorldGen.InWorld(i, j, 1)) { continue; } float num = 0f; int num2 = -1; float num3 = 0f; ushort type = 53; if (fastRandom.Next(3) == 0) { type = 397; } int num4 = i - description.Hive.X; int num5 = j - description.Hive.Y; Vector2 value4 = (new Vector2(num4, num5) - value3) / value * value2; for (int k = 0; k < clusters.Count; k++) { Cluster cluster = clusters[k]; if (Math.Abs(cluster[0].Position.X - value4.X) > 10f || Math.Abs(cluster[0].Position.Y - value4.Y) > 10f) { continue; } float num6 = 0f; foreach (Block item in cluster) { num6 += 1f / Vector2.DistanceSquared(item.Position, value4); } if (num6 > num) { if (num > num3) { num3 = num; } num = num6; num2 = k; } else if (num6 > num3) { num3 = num6; } } float num7 = num + num3; Tile tile = Main.tile[i, j]; bool flag = ((new Vector2(num4, num5) - value3) / value * 2f - Vector2.One).Length() >= 0.8f; PostPlacementEffect postPlacementEffect = PostPlacementEffect.None; if (num7 > 3.5f) { postPlacementEffect = PostPlacementEffect.Smooth; tile.ClearEverything(); tile.wall = 187; if (num2 % 15 == 2) { tile.ResetToType(404); } } else if (num7 > 1.8f) { tile.wall = 187; if ((double)j < Main.worldSurface) { tile.liquid = 0; } else { tile.lava(lava: true); } if (!flag || tile.active()) { tile.ResetToType(396); postPlacementEffect = PostPlacementEffect.Smooth; } } else if (num7 > 0.7f || !flag) { tile.wall = 216; tile.liquid = 0; if (!flag || tile.active()) { tile.ResetToType(type); postPlacementEffect = PostPlacementEffect.Smooth; } } else if (num7 > 0.25f) { FastRandom fastRandom2 = fastRandom.WithModifier(num4, num5); float num8 = (num7 - 0.25f) / 0.45f; if (fastRandom2.NextFloat() < num8) { tile.wall = 187; if ((double)j < Main.worldSurface) { tile.liquid = 0; } else { tile.lava(lava: true); } if (tile.active()) { tile.ResetToType(type); postPlacementEffect = PostPlacementEffect.Smooth; } } } postEffectMap[i - area.X + postEffectMapOffset.X, j - area.Y + postEffectMapOffset.Y] = postPlacementEffect; } } }