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

◆ AI_124_DeerclopsLeg()

void Terraria.NPC.AI_124_DeerclopsLeg ( )
inlineprivate

Definition at line 37843 of file NPC.cs.

37844 {
37845 int num = (int)ai[0];
37846 if (num < 0 || num > 200)
37847 {
37848 active = false;
37849 if (Main.netMode != 1)
37850 {
37851 NetMessage.SendData(23, -1, -1, null, whoAmI);
37852 }
37853 return;
37854 }
37855 NPC nPC = Main.npc[num];
37856 if (!nPC.active || nPC.type != 668)
37857 {
37858 active = false;
37859 if (Main.netMode != 1)
37860 {
37861 NetMessage.SendData(23, -1, -1, null, whoAmI);
37862 }
37863 return;
37864 }
37865 NPCAimedTarget targetData = nPC.GetTargetData();
37866 Vector2 vector = targetData.Center - base.Center;
37867 float num2 = targetData.Center.X - (float)(width / 2);
37868 int num3 = Math.Sign(num2 - position.X);
37869 float val = Math.Abs(num2 - position.X);
37870 float num4 = Math.Min(50f, val);
37871 float num5 = num2 + (float)(-num3) * num4;
37872 Math.Abs(vector.X);
37873 if (Math.Abs(num5 - base.Center.X) >= 30f && localAI[0] == 0f)
37874 {
37875 localAI[0] = 1f;
37876 }
37877 float num6 = 4f;
37878 float num7 = 30f;
37879 if (localAI[0] < 0f)
37880 {
37881 localAI[0] += 1f;
37882 }
37883 if (localAI[0] > 0f)
37884 {
37885 localAI[0] += 1f;
37886 if (localAI[0] >= num7)
37887 {
37888 localAI[0] = 0f - num6;
37889 }
37890 }
37891 int num8 = ((ai[1] != 0f) ? 1 : (-1));
37892 if (localAI[0] > 0f)
37893 {
37894 Vector2 vector2 = new Vector2(num8 * 14, -20f);
37895 Vector2 searchStartPositionInWorld = nPC.Bottom + vector2 + new Vector2(0f, 30f);
37896 int searchRange = 16;
37897 int tilesTraveled = 0;
37899 float amount = 1f / 3f;
37901 float num10 = localAI[0] / num7;
37902 if (num9.HasValue && tilesTraveled > 2)
37903 {
37904 new Vector2(searchStartPositionInWorld.X, num9.Value * 16f);
37905 value = new Vector2(searchStartPositionInWorld.X, num9.Value * 16f);
37906 amount = num10;
37907 }
37908 value.Y -= (1f - num10) * 30f;
37909 Vector2 bottom = Vector2.Lerp(base.Bottom, value, amount);
37910 base.Bottom = bottom;
37911 }
37912 int num11 = num8;
37913 if (Math.Abs(vector.X) > 30f)
37914 {
37915 num11 = Math.Sign(vector.X);
37916 }
37918 }
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static double Abs(double value)
static int Sign(decimal value)
Definition Math.cs:1202
Vector2 position
Definition Entity.cs:14
float[] localAI
Definition NPC.cs:449
int spriteDirection
Definition NPC.cs:517
float[] ai
Definition NPC.cs:447
float value
Definition NPC.cs:523
static ? float TryFindingFloor(Vector2 searchStartPositionInWorld, int searchRange, out int tilesTraveled)
Definition NPC.cs:37920
static Vector2 Lerp(Vector2 value1, Vector2 value2, float amount)
Definition Vector2.cs:227

References System.Math.Abs(), Terraria.Entity.active, Terraria.NPC.ai, Microsoft.Xna.Framework.Vector2.Lerp(), Terraria.NPC.localAI, System.Math.Min(), Terraria.Main.netMode, Terraria.Main.npc, Terraria.Entity.position, Terraria.NetMessage.SendData(), System.Math.Sign(), Terraria.NPC.spriteDirection, Terraria.NPC.TryFindingFloor(), Terraria.NPC.value, Microsoft.Xna.Framework.Graphics.Vector2, Terraria.Entity.whoAmI, Terraria.Entity.width, and Microsoft.Xna.Framework.Vector2.X.