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

◆ AI_009_MagicMissiles_Old()

void Terraria.Projectile.AI_009_MagicMissiles_Old ( )
inlineprivate

Definition at line 35496 of file Projectile.cs.

35497 {
35498 if (Main.myPlayer == owner && ai[0] <= 0f)
35499 {
35500 if (Main.player[owner].channel && Main.player[owner].HeldItem.shoot == type)
35501 {
35502 float num = 12f;
35503 if (type == 16)
35504 {
35505 num = 15f;
35506 }
35507 if (type == 491)
35508 {
35509 num = 20f;
35510 }
35511 Vector2 vector = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
35512 Vector2 pointPoisition = Main.MouseWorld;
35513 Main.player[owner].LimitPointToPlayerReachableArea(ref pointPoisition);
35514 float num2 = pointPoisition.X - vector.X;
35515 float num3 = pointPoisition.Y - vector.Y;
35516 float num4 = (float)Math.Sqrt(num2 * num2 + num3 * num3);
35517 if (ai[0] < 0f)
35518 {
35519 ai[0] += 1f;
35520 }
35521 if (type == 491 && num4 < 100f)
35522 {
35523 if (velocity.Length() < num)
35524 {
35525 velocity *= 1.1f;
35526 if (velocity.Length() > num)
35527 {
35529 velocity *= num;
35530 }
35531 }
35532 if (ai[0] == 0f)
35533 {
35534 ai[0] = -10f;
35535 }
35536 }
35537 else if (num4 > num)
35538 {
35539 num4 = num / num4;
35540 num2 *= num4;
35541 num3 *= num4;
35542 int num5 = (int)(num2 * 1000f);
35543 int num6 = (int)(velocity.X * 1000f);
35544 int num7 = (int)(num3 * 1000f);
35545 int num8 = (int)(velocity.Y * 1000f);
35546 if (num5 != num6 || num7 != num8)
35547 {
35548 netUpdate = true;
35549 }
35550 if (type == 491)
35551 {
35553 velocity = (velocity * 4f + vector2) / 5f;
35554 }
35555 else
35556 {
35557 velocity.X = num2;
35558 velocity.Y = num3;
35559 }
35560 }
35561 else
35562 {
35563 int num9 = (int)(num2 * 1000f);
35564 int num10 = (int)(velocity.X * 1000f);
35565 int num11 = (int)(num3 * 1000f);
35566 int num12 = (int)(velocity.Y * 1000f);
35567 if (num9 != num10 || num11 != num12)
35568 {
35569 netUpdate = true;
35570 }
35571 velocity.X = num2;
35572 velocity.Y = num3;
35573 }
35574 }
35575 else if (ai[0] <= 0f)
35576 {
35577 netUpdate = true;
35578 if (type != 491)
35579 {
35580 Vector2 vector3 = new Vector2(position.X + (float)width * 0.5f, position.Y + (float)height * 0.5f);
35581 float num13 = (float)Main.mouseX + Main.screenPosition.X - vector3.X;
35582 float num14 = (float)Main.mouseY + Main.screenPosition.Y - vector3.Y;
35583 if (Main.player[owner].gravDir == -1f)
35584 {
35585 num14 = Main.screenPosition.Y + (float)Main.screenHeight - (float)Main.mouseY - vector3.Y;
35586 }
35587 float num15 = (float)Math.Sqrt(num13 * num13 + num14 * num14);
35588 if (num15 == 0f || ai[0] < 0f)
35589 {
35590 vector3 = new Vector2(Main.player[owner].position.X + (float)(Main.player[owner].width / 2), Main.player[owner].position.Y + (float)(Main.player[owner].height / 2));
35591 num13 = position.X + (float)width * 0.5f - vector3.X;
35592 num14 = position.Y + (float)height * 0.5f - vector3.Y;
35593 num15 = (float)Math.Sqrt(num13 * num13 + num14 * num14);
35594 }
35595 num15 = 12f / num15;
35596 num13 *= num15;
35597 num14 *= num15;
35598 velocity.X = num13;
35599 velocity.Y = num14;
35600 if (velocity.X == 0f && velocity.Y == 0f)
35601 {
35602 Kill();
35603 }
35604 }
35605 ai[0] = 1f;
35606 }
35607 }
35608 bool flag = false;
35609 if (type == 491)
35610 {
35611 localAI[0] += 1f;
35612 if (ai[0] > 0f && localAI[0] > 15f)
35613 {
35614 tileCollide = false;
35615 Vector2 vector4 = Main.player[owner].Center - base.Center;
35616 if (vector4.Length() < 20f)
35617 {
35618 Kill();
35619 }
35620 vector4.Normalize();
35621 vector4 *= 25f;
35622 velocity = (velocity * 5f + vector4) / 6f;
35623 }
35624 flag = true;
35625 if (ai[0] < 0f || (velocity.X == 0f && velocity.Y == 0f))
35626 {
35627 rotation += 0.3f;
35628 }
35629 else if (ai[0] > 0f)
35630 {
35631 rotation += 0.3f * (float)direction;
35632 }
35633 else
35634 {
35635 rotation = (float)Math.Atan2(velocity.Y, velocity.X) + 1.57f;
35636 }
35637 if (Vector2.Distance(base.Center, Main.player[owner].Center) > 2000f)
35638 {
35639 Kill();
35640 }
35641 if (Main.rand.Next(2) == 0)
35642 {
35643 int num16 = Main.rand.Next(3);
35644 int num17 = Dust.NewDust(position, width, height, num16 switch
35645 {
35646 0 => 15,
35647 1 => 57,
35648 _ => 58,
35649 }, velocity.X * 0.25f, velocity.Y * 0.25f, 255, default(Color), 0.7f);
35650 Main.dust[num17].velocity *= 0.25f;
35651 Main.dust[num17].position = (Main.dust[num17].position + position) / 2f;
35652 }
35653 }
35654 if (type == 79)
35655 {
35656 if (soundDelay == 0 && Math.Abs(velocity.X) + Math.Abs(velocity.Y) > 2f)
35657 {
35658 soundDelay = 10;
35660 }
35661 for (int i = 0; i < 1; i++)
35662 {
35663 int num18 = Dust.NewDust(new Vector2(position.X, position.Y), width, height, 66, 0f, 0f, 100, new Color(Main.DiscoR, Main.DiscoG, Main.DiscoB), 2.5f);
35664 Main.dust[num18].velocity *= 0.1f;
35665 Main.dust[num18].velocity += velocity * 0.2f;
35666 Main.dust[num18].position.X = position.X + (float)(width / 2) + 4f + (float)Main.rand.Next(-2, 3);
35667 Main.dust[num18].position.Y = position.Y + (float)(height / 2) + (float)Main.rand.Next(-2, 3);
35668 Main.dust[num18].noGravity = true;
35669 }
35670 }
35671 if (type == 16)
35672 {
35673 if (soundDelay == 0 && Math.Abs(velocity.X) + Math.Abs(velocity.Y) > 2f)
35674 {
35675 soundDelay = 10;
35677 }
35678 if (Main.rand.Next(9) == 0)
35679 {
35680 int num19 = Dust.NewDust(position, width, height, 15, 0f, 0f, 100, default(Color), 2f);
35681 Main.dust[num19].velocity *= 0.3f;
35682 Main.dust[num19].position.X = position.X + (float)(width / 2) + 4f + (float)Main.rand.Next(-4, 5);
35683 Main.dust[num19].position.Y = position.Y + (float)(height / 2) + (float)Main.rand.Next(-4, 5);
35684 Main.dust[num19].noGravity = true;
35685 Main.dust[num19].velocity += Main.rand.NextVector2Circular(2f, 2f);
35686 }
35687 flag = true;
35688 if (velocity != Vector2.Zero)
35689 {
35690 rotation = velocity.ToRotation();
35691 }
35692 }
35693 if (type == 34)
35694 {
35695 if (Main.rand.Next(12) == 0)
35696 {
35697 Dust dust = Dust.NewDustDirect(base.Center, 0, 0, 6, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 3.5f);
35698 dust.noGravity = true;
35699 dust.velocity *= 1.4f;
35700 dust.velocity += Main.rand.NextVector2Circular(1f, 1f);
35701 dust.velocity += velocity * 0.15f;
35702 }
35703 if (Main.rand.Next(24) == 0)
35704 {
35705 Dust dust2 = Dust.NewDustDirect(base.Center, 0, 0, 6, velocity.X * 0.2f, velocity.Y * 0.2f, 100, default(Color), 1.5f);
35706 dust2.velocity += Main.rand.NextVector2Circular(1f, 1f);
35707 dust2.velocity += velocity * 0.15f;
35708 }
35709 flag = true;
35710 if (velocity != Vector2.Zero)
35711 {
35712 rotation = velocity.ToRotation();
35713 }
35714 }
35715 if (!flag && velocity != Vector2.Zero)
35716 {
35717 rotation = velocity.ToRotation() - (float)Math.PI + (float)Math.PI / 4f;
35718 }
35719 if (velocity.Y > 16f)
35720 {
35721 velocity.Y = 16f;
35722 }
35723 }
static double Atan2(double y, double x)
static double Sqrt(double d)
static double Abs(double value)
const double PI
Definition Math.cs:16
static void PlaySound(int type, Vector2 position, int style=1)
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static readonly LegacySoundStyle Item9
Definition SoundID.cs:432
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References System.Math.Abs(), System.Math.Atan2(), Terraria.Main.DiscoB, Terraria.Main.DiscoG, Terraria.Main.DiscoR, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.dust, Terraria.ID.SoundID.Item9, Terraria.Main.MouseWorld, Terraria.Main.mouseX, Terraria.Main.mouseY, Terraria.Main.myPlayer, Terraria.Dust.NewDust(), Terraria.Dust.NewDustDirect(), System.Math.PI, Terraria.Main.player, Terraria.Audio.SoundEngine.PlaySound(), Terraria.Main.rand, Terraria.Main.screenHeight, Terraria.Main.screenPosition, System.Math.Sqrt(), System.type, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector2.Y, and Microsoft.Xna.Framework.Vector2.Zero.