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

◆ AI_134_Ballista_FindTarget()

int Terraria.Projectile.AI_134_Ballista_FindTarget ( float shot_range,
float deadBottomAngle,
Vector2 shootingSpot )
inlineprivate

Definition at line 57701 of file Projectile.cs.

57702 {
57703 int num = -1;
57705 if (ownerMinionAttackTargetNPC != null && ownerMinionAttackTargetNPC.CanBeChasedBy(this))
57706 {
57707 for (int i = 0; i < 1; i++)
57708 {
57709 if (!ownerMinionAttackTargetNPC.CanBeChasedBy(this))
57710 {
57711 continue;
57712 }
57714 if (!(num2 > shot_range))
57715 {
57716 Vector2 vector = (ownerMinionAttackTargetNPC.Center - shootingSpot).SafeNormalize(Vector2.UnitY);
57717 if ((!(Math.Abs(vector.X) < Math.Abs(vector.Y) * deadBottomAngle) || !(vector.Y > 0f)) && (num == -1 || num2 < Vector2.Distance(shootingSpot, Main.npc[num].Center)) && Collision.CanHitLine(shootingSpot, 0, 0, ownerMinionAttackTargetNPC.Center, 0, 0))
57718 {
57719 num = ownerMinionAttackTargetNPC.whoAmI;
57720 }
57721 }
57722 }
57723 if (num != -1)
57724 {
57725 return num;
57726 }
57727 }
57728 for (int j = 0; j < 200; j++)
57729 {
57730 NPC nPC = Main.npc[j];
57731 if (!nPC.CanBeChasedBy(this))
57732 {
57733 continue;
57734 }
57735 float num3 = Vector2.Distance(shootingSpot, nPC.Center);
57736 if (!(num3 > shot_range))
57737 {
57738 Vector2 vector2 = (nPC.Center - shootingSpot).SafeNormalize(Vector2.UnitY);
57739 if ((!(Math.Abs(vector2.X) < Math.Abs(vector2.Y) * deadBottomAngle) || !(vector2.Y > 0f)) && (num == -1 || num3 < Vector2.Distance(shootingSpot, Main.npc[num].Center)) && Collision.CanHitLine(shootingSpot, 0, 0, nPC.Center, 0, 0))
57740 {
57741 num = j;
57742 }
57743 }
57744 }
57745 return num;
57746 }
static double Abs(double value)
static float Distance(Vector2 value1, Vector2 value2)
Definition Vector2.cs:91

References System.Math.Abs(), Terraria.Collision.CanHitLine(), Microsoft.Xna.Framework.Vector2.Distance(), Terraria.Main.npc, and Microsoft.Xna.Framework.Vector2.UnitY.