Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateGroundExplosion()

void Terraria.Projectile.CreateGroundExplosion ( float MAX_SPREAD,
int fluff,
int distFluff,
int layerStart,
int layerEnd,
int layerJump )
inlineprivate

Definition at line 43572 of file Projectile.cs.

43573 {
43574 Point point = base.TopLeft.ToTileCoordinates();
43575 Point point2 = base.BottomRight.ToTileCoordinates();
43576 point.X -= fluff;
43577 point.Y -= fluff;
43578 point2.X += fluff;
43579 point2.Y += fluff;
43580 int num = point.X / 2 + point2.X / 2;
43581 int num2 = width / 2 + distFluff;
43582 for (int i = layerStart; i < layerEnd; i += layerJump)
43583 {
43584 int num3 = i;
43585 for (int j = point.X; j <= point2.X; j++)
43586 {
43587 for (int k = point.Y; k <= point2.Y; k++)
43588 {
43589 if (!WorldGen.InWorld(j, k, 10))
43590 {
43591 return;
43592 }
43593 if (Vector2.Distance(base.Center, new Vector2(j * 16, k * 16)) > (float)num2)
43594 {
43595 continue;
43596 }
43597 Tile tileSafely = Framing.GetTileSafely(j, k);
43598 if (!tileSafely.active() || !Main.tileSolid[tileSafely.type] || Main.tileSolidTop[tileSafely.type] || Main.tileFrameImportant[tileSafely.type])
43599 {
43600 continue;
43601 }
43602 Tile tileSafely2 = Framing.GetTileSafely(j, k - 1);
43603 if (tileSafely2.active() && Main.tileSolid[tileSafely2.type] && !Main.tileSolidTop[tileSafely2.type])
43604 {
43605 continue;
43606 }
43607 int num4 = WorldGen.KillTile_GetTileDustAmount(fail: true, tileSafely);
43608 for (int l = 0; l < num4; l++)
43609 {
43610 Dust obj = Main.dust[WorldGen.KillTile_MakeTileDust(j, k, tileSafely)];
43611 obj.velocity.Y -= 3f + (float)num3 * 1.5f;
43612 obj.velocity.Y *= Main.rand.NextFloat();
43613 obj.scale += (float)num3 * 0.03f;
43614 }
43615 if (num3 >= 2)
43616 {
43617 for (int m = 0; m < num4 - 1; m++)
43618 {
43619 Dust obj2 = Main.dust[WorldGen.KillTile_MakeTileDust(j, k, tileSafely)];
43620 obj2.velocity.Y -= 1f + (float)num3;
43621 obj2.velocity.Y *= Main.rand.NextFloat();
43622 }
43623 }
43624 if (num4 > 0 && Main.rand.Next(3) != 0)
43625 {
43626 float num5 = (float)Math.Abs(num - j) / (MAX_SPREAD / 2f);
43627 Gore gore = Gore.NewGoreDirect(position, Vector2.Zero, 61 + Main.rand.Next(3), 1f - (float)num3 * 0.15f + num5 * 0.5f);
43628 gore.velocity.Y -= 0.1f + (float)num3 * 0.5f + num5 * (float)num3 * 1f;
43629 gore.velocity.Y *= Main.rand.NextFloat();
43630 gore.position = new Vector2(j * 16 + 20, k * 16 + 20);
43631 }
43632 }
43633 }
43634 }
43635 }
static double Abs(double value)
Vector2 position
Definition Entity.cs:14
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References System.Math.Abs(), Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.dust, Terraria.Framing.GetTileSafely(), Terraria.WorldGen.InWorld(), Terraria.WorldGen.KillTile_GetTileDustAmount(), Terraria.WorldGen.KillTile_MakeTileDust(), Terraria.Gore.NewGoreDirect(), System.obj, Terraria.Main.rand, Terraria.Main.tileFrameImportant, Terraria.Main.tileSolid, Terraria.Main.tileSolidTop, Microsoft.Xna.Framework.Point.X, Microsoft.Xna.Framework.Point.Y, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.Projectile.MakeBoulderOfEarthExplosion().