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

◆ AI_019_Spears()

void Terraria.Projectile.AI_019_Spears ( )
inlineprivate

Definition at line 37830 of file Projectile.cs.

37831 {
37832 Player player = Main.player[owner];
37833 Vector2 center = player.RotatedRelativePoint(player.MountedCenter);
37834 direction = player.direction;
37835 player.heldProj = whoAmI;
37836 player.MatchItemTimeToItemAnimation();
37837 base.Center = center;
37838 bool flag = Main.player[owner].itemAnimation < Main.player[owner].itemAnimationMax / 3;
37839 int itemAnimationMax = player.itemAnimationMax;
37840 int itemAnimation = player.itemAnimation;
37841 int num = Main.player[owner].itemAnimationMax / 3;
37842 float num2 = MathHelper.Min(itemAnimation, num);
37843 float num3 = (float)itemAnimation - num2;
37844 float num4 = 0f;
37845 float num5 = 0f;
37846 float num6 = 0f;
37847 bool flag2 = false;
37849 switch (type)
37850 {
37851 case 46:
37852 num4 = 3f;
37853 num6 = 1.6f;
37854 num5 = 1.4f;
37855 break;
37856 case 105:
37857 num4 = 3f;
37858 num6 = 2.4f;
37859 num5 = 2.1f;
37860 break;
37861 case 367:
37862 num4 = 3f;
37863 num6 = 1.6f;
37864 num5 = 1.5f;
37865 break;
37866 case 368:
37867 num4 = 3f;
37868 num6 = 1.5f;
37869 num5 = 1.4f;
37870 break;
37871 case 222:
37872 num4 = 3f;
37873 num6 = 2.4f;
37874 num5 = 2.1f;
37875 break;
37876 case 342:
37877 num4 = 3f;
37878 num6 = 2.4f;
37879 num5 = 2.1f;
37880 break;
37881 case 47:
37882 num4 = 4f;
37883 num6 = 1.2f;
37884 num5 = 0.9f;
37885 break;
37886 case 153:
37887 num4 = 4f;
37888 num6 = 1.5f;
37889 num5 = 1.3f;
37890 break;
37891 case 49:
37892 num4 = 4f;
37893 num6 = 1.1f;
37894 num5 = 0.85f;
37895 break;
37896 case 730:
37897 num4 = 8f;
37898 num6 = 1.5f;
37899 num5 = 1.2f;
37900 break;
37901 case 877:
37902 case 878:
37903 case 879:
37904 alpha -= 40;
37905 if (alpha < 0)
37906 {
37907 alpha = 0;
37908 }
37909 num4 = 28f;
37910 num6 = 0.4f;
37911 num5 = 0.4f;
37912 flag2 = true;
37913 break;
37914 case 64:
37915 case 215:
37917 num4 = 3f;
37918 num6 = 1.9f;
37919 num5 = 1.7f;
37920 break;
37921 case 66:
37922 case 97:
37923 case 212:
37924 case 218:
37925 num4 = 3f;
37926 num6 = 2.1f;
37927 num5 = 1.9f;
37928 break;
37929 case 130:
37930 num4 = 3f;
37931 num6 = 1.3f;
37932 num5 = 1f;
37933 break;
37934 }
37935 float num7 = (float)(itemAnimationMax - num) - num3;
37936 float num8 = (float)num - num2;
37937 float num9 = num4 + num5 * num7 - num6 * num8;
37938 position += velocity * num9;
37939 switch (type)
37940 {
37941 case 47:
37942 if (Main.player[owner].wet && Main.rand.Next(2) == 0)
37943 {
37944 int num10 = Dust.NewDust(Main.player[owner].position, Main.player[owner].width, Main.player[owner].height, 15, 0f, 0f, 100, default(Color), 0.8f);
37945 Main.dust[num10].velocity *= 0.1f;
37946 }
37947 break;
37948 case 130:
37949 if ((localAI[0] == 0f || localAI[0] == 4f || localAI[0] == 8f || localAI[0] == 12f || localAI[0] == 16f || localAI[0] == 20f || localAI[0] == 24f) && owner == Main.myPlayer)
37950 {
37951 NewProjectile(GetProjectileSource_FromThis(), base.Center.X, base.Center.Y, velocity.X, velocity.Y, 131, damage / 3, 0f, owner);
37952 }
37953 localAI[0] += 1f;
37954 break;
37955 case 730:
37956 if (localAI[0] == 0f && Main.myPlayer == owner)
37957 {
37958 localAI[0] = 1f;
37959 Vector2 vector = velocity * 4f;
37960 NewProjectile(GetProjectileSource_FromThis(), base.Center.X, base.Center.Y, vector.X, vector.Y, 732, (int)((double)damage * 1.5), knockBack * 0.5f, owner);
37961 }
37962 break;
37963 case 342:
37964 if (flag && localAI[0] == 0f && Main.myPlayer == owner)
37965 {
37966 localAI[0] = 1f;
37967 if (Collision.CanHit(player.position, player.width, player.height, position, width, height))
37968 {
37969 NewProjectile(GetProjectileSource_FromThis(), base.Center.X, base.Center.Y, velocity.X * 2.4f, velocity.Y * 2.4f, 343, damage, knockBack * 0.85f, owner);
37970 }
37971 }
37972 break;
37973 case 222:
37974 if (flag && localAI[0] == 0f && Main.myPlayer == owner)
37975 {
37976 localAI[0] = 1f;
37978 }
37979 break;
37980 }
37981 if (flag2 && player.channel && player.itemAnimation < num)
37982 {
37983 player.SetDummyItemTime(num);
37984 }
37985 rotation = (float)Math.Atan2(velocity.Y, velocity.X) + (float)Math.PI / 2f + (float)Math.PI / 4f;
37986 if (spriteDirection == -1)
37987 {
37988 rotation -= (float)Math.PI / 2f;
37989 }
37991 if (type == 878 || type == 879)
37992 {
37993 float num11 = 6f;
37994 float num12 = 0.8f;
37995 float num13 = Vector2.Dot(velocity.SafeNormalize(Vector2.UnitX * player.direction), player.velocity.SafeNormalize(Vector2.UnitX * player.direction));
37996 float num14 = player.velocity.Length();
37997 if (num14 > num11 && num13 > num12)
37998 {
37999 int num15 = 8;
38000 if (num14 > num11 + 1f)
38001 {
38002 num15 = 5;
38003 }
38004 if (num14 > num11 + 2f)
38005 {
38006 num15 = 2;
38007 }
38008 int num16 = 14;
38009 int num17 = 27;
38010 int num18 = 4;
38011 if (type == 879)
38012 {
38013 num16 = 43;
38014 num17 = 57;
38015 }
38016 if (Main.rand.Next(num15 + 3) == 0)
38017 {
38018 Dust.NewDust(base.Center - new Vector2(num18, num18), num18 * 2, num18 * 2, num16, 0f, 0f, 150, default(Color), 1.4f);
38019 }
38020 if (Main.rand.Next(num15) == 0)
38021 {
38022 int num19 = Dust.NewDust(base.Center - new Vector2(num18, num18), num18 * 2, num18 * 2, num17, velocity.X * 0.2f + (float)(direction * 3), velocity.Y * 0.2f, 100, default(Color), 1.2f);
38023 Main.dust[num19].noGravity = true;
38024 Main.dust[num19].velocity *= 0.25f;
38025 num19 = Dust.NewDust(base.Center - new Vector2(num18, num18), num18 * 2, num18 * 2, num17, 0f, 0f, 150, default(Color), 1.4f);
38026 Main.dust[num19].velocity *= 0.25f;
38027 }
38028 }
38029 }
38030 if (type == 46)
38031 {
38032 if (Main.rand.Next(5) == 0)
38033 {
38034 Dust.NewDust(position, width, height, 14, 0f, 0f, 150, default(Color), 1.4f);
38035 }
38036 int num20 = Dust.NewDust(position, width, height, 27, velocity.X * 0.2f + (float)(direction * 3), velocity.Y * 0.2f, 100, default(Color), 1.2f);
38037 Main.dust[num20].noGravity = true;
38038 Main.dust[num20].velocity /= 2f;
38039 num20 = Dust.NewDust(position - velocity * 2f, width, height, 27, 0f, 0f, 150, default(Color), 1.4f);
38040 Main.dust[num20].velocity /= 5f;
38041 }
38042 if (type == 730)
38043 {
38044 if (Main.rand.Next(5) == 0)
38045 {
38046 Dust dust = Dust.NewDustDirect(position, width, height, 226, 0f, 0f, 150, default(Color), 0.7f);
38047 dust.noGravity = true;
38048 dust.velocity *= 1.4f;
38049 }
38050 if (Main.rand.Next(5) == 0)
38051 {
38052 Dust.NewDustDirect(position, width, height, 226, 0f, 0f, 150, default(Color), 0.5f).velocity.Y -= 0.5f;
38053 }
38054 }
38055 else if (type == 105)
38056 {
38057 if (Main.rand.Next(3) == 0)
38058 {
38059 int num21 = Dust.NewDust(position, width, height, 57, velocity.X * 0.2f, velocity.Y * 0.2f, 200, default(Color), 1.2f);
38060 Main.dust[num21].velocity += velocity * 0.3f;
38061 Main.dust[num21].velocity *= 0.2f;
38062 }
38063 if (Main.rand.Next(4) == 0)
38064 {
38065 int num22 = Dust.NewDust(position, width, height, 43, 0f, 0f, 254, default(Color), 0.3f);
38066 Main.dust[num22].velocity += velocity * 0.5f;
38067 Main.dust[num22].velocity *= 0.5f;
38068 }
38069 }
38070 else if (type == 153)
38071 {
38072 int num23 = Dust.NewDust(position - velocity * 3f, width, height, 115, velocity.X * 0.4f, velocity.Y * 0.4f, 140);
38073 Main.dust[num23].noGravity = true;
38074 Main.dust[num23].fadeIn = 1.25f;
38075 Main.dust[num23].velocity *= 0.25f;
38076 }
38077 if (type == 342)
38078 {
38079 Lighting.AddLight(base.Center, 0.65f, 0.9f, 1f);
38080 if (timeLeft % 2 == 0)
38081 {
38082 int num24 = 10;
38083 int num25 = Dust.NewDust(position - velocity * 3f - new Vector2(num24, num24), width + num24 * 2, height + num24 * 2, 135, velocity.X * 0.4f, velocity.Y * 0.4f, 50, default(Color), 1.2f);
38084 Main.dust[num25].velocity *= 0.5f;
38085 Main.dust[num25].velocity += velocity * 0.25f;
38086 }
38087 }
38088 ai[0] += 1f;
38089 bool flag3 = ai[0] >= (float)itemAnimationMax;
38090 if (flag2)
38091 {
38092 flag3 &= !player.channel;
38093 }
38094 if (flag3)
38095 {
38096 Kill();
38097 }
38098 }
static float Min(float value1, float value2)
Definition MathHelper.cs:36
static double Atan2(double y, double x)
const double PI
Definition Math.cs:16
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
IEntitySource GetProjectileSource_FromThis()
bool AI_019_Spears_GetExtensionHitbox(out Rectangle extensionBox)
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)
static float Dot(Vector2 value1, Vector2 value2)
Definition Vector2.cs:121

References Terraria.Lighting.AddLight(), System.Math.Atan2(), Terraria.Collision.CanHit(), Terraria.Player.channel, Terraria.Entity.direction, Microsoft.Xna.Framework.Vector2.Dot(), Terraria.Main.dust, Terraria.Entity.height, Terraria.Player.itemAnimation, Terraria.Player.itemAnimationMax, Microsoft.Xna.Framework.Vector2.Length(), Terraria.Player.MatchItemTimeToItemAnimation(), Microsoft.Xna.Framework.MathHelper.Min(), Terraria.Player.MountedCenter, Terraria.Main.myPlayer, Terraria.Dust.NewDust(), Terraria.Dust.NewDustDirect(), System.Math.PI, Terraria.Main.player, Terraria.Entity.position, Terraria.Main.rand, Terraria.Player.RotatedRelativePoint(), Terraria.Player.SetDummyItemTime(), System.type, Microsoft.Xna.Framework.Vector2.UnitX, Terraria.Entity.velocity, and Terraria.Entity.width.