Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ AI_142_MonkStaffT2And3()

void Terraria.Projectile.AI_142_MonkStaffT2And3 ( )
inlineprivate

Definition at line 58704 of file Projectile.cs.

58705 {
58706 Player player = Main.player[owner];
58707 Vector2 vector = player.RotatedRelativePoint(player.MountedCenter);
58708 direction = player.direction;
58709 player.heldProj = whoAmI;
58710 base.Center = vector;
58711 if (player.dead)
58712 {
58713 Kill();
58714 return;
58715 }
58716 if (!player.frozen)
58717 {
58718 if (type == 699)
58719 {
58720 spriteDirection = (direction = player.direction);
58722 alpha -= 127;
58723 if (alpha < 0)
58724 {
58725 alpha = 0;
58726 }
58727 if (localAI[0] > 0f)
58728 {
58729 localAI[0] -= 1f;
58730 }
58731 float num = (float)player.itemAnimation / (float)player.itemAnimationMax;
58732 float num2 = 1f - num;
58733 float num3 = velocity.ToRotation();
58734 float num4 = velocity.Length();
58735 float num5 = 22f;
58736 Vector2 spinningpoint = new Vector2(1f, 0f).RotatedBy((float)Math.PI + num2 * ((float)Math.PI * 2f)) * new Vector2(num4, ai[0]);
58737 position += spinningpoint.RotatedBy(num3) + new Vector2(num4 + num5, 0f).RotatedBy(num3);
58738 Vector2 target = vector2 + spinningpoint.RotatedBy(num3) + new Vector2(num4 + num5 + 40f, 0f).RotatedBy(num3);
58739 rotation = vector2.AngleTo(target) + (float)Math.PI / 4f * (float)player.direction;
58740 if (spriteDirection == -1)
58741 {
58742 rotation += (float)Math.PI;
58743 }
58744 vector2.DirectionTo(base.Center);
58745 Vector2 vector3 = vector2.DirectionTo(target);
58746 Vector2 vector4 = velocity.SafeNormalize(Vector2.UnitY);
58747 float num6 = 2f;
58748 for (int i = 0; (float)i < num6; i++)
58749 {
58750 Dust dust = Dust.NewDustDirect(base.Center, 14, 14, 228, 0f, 0f, 110);
58751 dust.velocity = vector2.DirectionTo(dust.position) * 2f;
58752 dust.position = base.Center + vector4.RotatedBy(num2 * ((float)Math.PI * 2f) * 2f + (float)i / num6 * ((float)Math.PI * 2f)) * 10f;
58753 dust.scale = 1f + 0.6f * Main.rand.NextFloat();
58754 dust.velocity += vector4 * 3f;
58755 dust.noGravity = true;
58756 }
58757 for (int j = 0; j < 1; j++)
58758 {
58759 if (Main.rand.Next(3) == 0)
58760 {
58761 Dust dust2 = Dust.NewDustDirect(base.Center, 20, 20, 228, 0f, 0f, 110);
58762 dust2.velocity = vector2.DirectionTo(dust2.position) * 2f;
58763 dust2.position = base.Center + vector3 * -110f;
58764 dust2.scale = 0.45f + 0.4f * Main.rand.NextFloat();
58765 dust2.fadeIn = 0.7f + 0.4f * Main.rand.NextFloat();
58766 dust2.noGravity = true;
58767 dust2.noLight = true;
58768 }
58769 }
58770 }
58771 else if (type == 708)
58772 {
58773 Lighting.AddLight(player.Center, 0.75f, 0.9f, 1.15f);
58774 spriteDirection = (direction = player.direction);
58775 alpha -= 127;
58776 if (alpha < 0)
58777 {
58778 alpha = 0;
58779 }
58780 float num7 = (float)player.itemAnimation / (float)player.itemAnimationMax;
58781 float num8 = 1f - num7;
58782 float num9 = velocity.ToRotation();
58783 float num10 = velocity.Length();
58784 float num11 = 22f;
58785 Vector2 spinningpoint2 = new Vector2(1f, 0f).RotatedBy((float)Math.PI + num8 * ((float)Math.PI * 2f)) * new Vector2(num10, ai[0]);
58786 position += spinningpoint2.RotatedBy(num9) + new Vector2(num10 + num11, 0f).RotatedBy(num9);
58787 Vector2 vector5 = vector + spinningpoint2.RotatedBy(num9) + new Vector2(num10 + num11 + 40f, 0f).RotatedBy(num9);
58788 rotation = (vector5 - vector).SafeNormalize(Vector2.UnitX).ToRotation() + (float)Math.PI / 4f * (float)player.direction;
58789 if (spriteDirection == -1)
58790 {
58791 rotation += (float)Math.PI;
58792 }
58793 (base.Center - vector).SafeNormalize(Vector2.Zero);
58794 (vector5 - vector).SafeNormalize(Vector2.Zero);
58795 Vector2 vector6 = velocity.SafeNormalize(Vector2.UnitY);
58796 if ((player.itemAnimation == 2 || player.itemAnimation == 6 || player.itemAnimation == 10) && owner == Main.myPlayer)
58797 {
58798 Vector2 vector7 = vector6 + Main.rand.NextVector2Square(-0.2f, 0.2f);
58799 vector7 *= 12f;
58800 switch (player.itemAnimation)
58801 {
58802 case 2:
58803 vector7 = vector6.RotatedBy(0.3839724659919739);
58804 break;
58805 case 6:
58806 vector7 = vector6.RotatedBy(-0.3839724659919739);
58807 break;
58808 case 10:
58809 vector7 = vector6.RotatedBy(0.0);
58810 break;
58811 }
58812 vector7 *= 10f + (float)Main.rand.Next(4);
58814 }
58815 for (int k = 0; k < 3; k += 2)
58816 {
58817 float num12 = 1f;
58818 float num13 = 1f;
58819 switch (k)
58820 {
58821 case 1:
58822 num13 = -1f;
58823 break;
58824 case 2:
58825 num13 = 1.25f;
58826 num12 = 0.5f;
58827 break;
58828 case 3:
58829 num13 = -1.25f;
58830 num12 = 0.5f;
58831 break;
58832 }
58833 if (Main.rand.Next(6) != 0)
58834 {
58835 num13 *= 1.2f;
58836 Dust dust3 = Dust.NewDustDirect(position, width, height, 226, 0f, 0f, 100);
58837 dust3.velocity = vector6 * (4f + 4f * Main.rand.NextFloat()) * num13 * num12;
58838 dust3.noGravity = true;
58839 dust3.noLight = true;
58840 dust3.scale = 0.75f;
58841 dust3.fadeIn = 0.8f;
58842 dust3.customData = this;
58843 if (Main.rand.Next(3) == 0)
58844 {
58845 dust3.noGravity = false;
58846 dust3.fadeIn = 0f;
58847 }
58848 }
58849 }
58850 }
58851 }
58852 if (player.whoAmI == Main.myPlayer && player.itemAnimation <= 2)
58853 {
58854 Kill();
58855 player.reuseDelay = 2;
58856 }
58857 }
const double PI
Definition Math.cs:16
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
IEntitySource GetProjectileSource_FromThis()
static int NewProjectile(IEntitySource spawnSource, Vector2 position, Vector2 velocity, int Type, int Damage, float KnockBack, int Owner=-1, float ai0=0f, float ai1=0f, float ai2=0f)

References Terraria.Lighting.AddLight(), Terraria.Entity.Center, Terraria.Player.dead, Terraria.Entity.direction, Terraria.Player.frozen, Terraria.Player.itemAnimation, Terraria.Player.itemAnimationMax, Terraria.Player.MountedCenter, Terraria.Main.myPlayer, Terraria.Dust.NewDustDirect(), System.Math.PI, Terraria.Main.player, Terraria.Dust.position, Terraria.Main.rand, Terraria.Player.RotatedRelativePoint(), System.type, Microsoft.Xna.Framework.Vector2.UnitX, Microsoft.Xna.Framework.Vector2.UnitY, Terraria.Entity.whoAmI, and Microsoft.Xna.Framework.Vector2.Zero.