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

◆ TargetClosestUpgraded()

void Terraria.NPC.TargetClosestUpgraded ( bool faceTarget = true,
Vector2? checkPosition = null )
inline

Definition at line 69833 of file NPC.cs.

69834 {
69835 int num = -1;
69836 int num2 = -1;
69837 int num3 = -1;
69838 Vector2 center = base.Center;
69839 if (checkPosition.HasValue)
69840 {
69841 center = checkPosition.Value;
69842 }
69843 bool flag = direction == 0;
69844 float num4 = 9999999f;
69845 for (int i = 0; i < 255; i++)
69846 {
69847 Player player = Main.player[i];
69848 if (!player.active || player.dead || player.ghost)
69849 {
69850 continue;
69851 }
69852 float num5 = Vector2.Distance(center, player.Center);
69853 num5 -= (float)player.aggro;
69854 bool flag2 = player.npcTypeNoAggro[type];
69855 if (flag2 && !flag)
69856 {
69857 num5 += 1000f;
69858 }
69859 if (num5 < num4)
69860 {
69861 num = i;
69862 num2 = -1;
69863 num4 = num5;
69864 }
69865 if (player.tankPet >= 0 && !flag2)
69866 {
69867 num5 = Vector2.Distance(center, Main.projectile[player.tankPet].Center);
69868 num5 -= 200f;
69869 if (num5 < num4 && num5 < 200f && Collision.CanHit(base.Center, 0, 0, Main.projectile[player.tankPet].Center, 0, 0))
69870 {
69871 num2 = player.tankPet;
69872 num4 = num5;
69873 }
69874 }
69875 }
69876 for (int j = 0; j < 200; j++)
69877 {
69878 NPC nPC = Main.npc[j];
69879 if (nPC.active && nPC.type == 548)
69880 {
69881 float num6 = Vector2.Distance(center, nPC.Center);
69882 if (num4 > num6)
69883 {
69884 num3 = j;
69885 num = -1;
69886 num2 = -1;
69887 num4 = num6;
69888 }
69889 }
69890 }
69891 if (num4 == 9999999f)
69892 {
69893 return;
69894 }
69895 if (num3 >= 0)
69896 {
69897 target = Main.npc[num3].WhoAmIToTargettingIndex;
69898 targetRect = Main.npc[num3].Hitbox;
69899 direction = ((!((float)targetRect.Center.X < base.Center.X)) ? 1 : (-1));
69900 directionY = ((!((float)targetRect.Center.Y < base.Center.Y)) ? 1 : (-1));
69901 return;
69902 }
69903 if (num2 >= 0)
69904 {
69905 target = Main.projectile[num2].owner;
69906 targetRect = Main.projectile[num2].Hitbox;
69907 direction = ((!((float)targetRect.Center.X < base.Center.X)) ? 1 : (-1));
69908 directionY = ((!((float)targetRect.Center.Y < base.Center.Y)) ? 1 : (-1));
69909 return;
69910 }
69911 if (num < 0 || num >= 255)
69912 {
69913 num = 0;
69914 }
69915 Player player2 = Main.player[num];
69916 targetRect = player2.Hitbox;
69917 target = num;
69918 if (player2.dead || (player2.npcTypeNoAggro[type] && !flag))
69919 {
69920 faceTarget = false;
69921 }
69922 if (faceTarget)
69923 {
69924 float num7 = (float)(player2.width + player2.height + width + height) / 4f + 800f;
69925 float num8 = num4 - (float)player2.aggro;
69926 if (player2.itemAnimation != 0 || player2.aggro >= 0 || !(num8 > num7) || oldTarget < 0 || oldTarget >= 255)
69927 {
69928 direction = ((!((float)targetRect.Center.X < base.Center.X)) ? 1 : (-1));
69929 directionY = ((!((float)targetRect.Center.Y < base.Center.Y)) ? 1 : (-1));
69930 }
69931 }
69932 }
Rectangle targetRect
Definition NPC.cs:481
int type
Definition NPC.cs:445
int directionY
Definition NPC.cs:443
int target
Definition NPC.cs:459
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References Terraria.Entity.active, Terraria.Player.aggro, Terraria.Collision.CanHit(), Microsoft.Xna.Framework.Rectangle.Center, Terraria.Entity.Center, Terraria.Player.dead, Terraria.Entity.direction, Terraria.NPC.directionY, Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Player.ghost, Terraria.Entity.height, Terraria.Main.npc, Terraria.Player.npcTypeNoAggro, Terraria.Main.player, Terraria.Main.projectile, Terraria.Player.tankPet, Terraria.NPC.target, Terraria.NPC.targetRect, Terraria.NPC.type, Terraria.Entity.width, Microsoft.Xna.Framework.Point.X, and Microsoft.Xna.Framework.Point.Y.