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

◆ GetNPCLocation()

static bool Terraria.NPC.GetNPCLocation ( int i,
bool seekHead,
bool averageDirection,
out int index,
out Vector2 pos )
inlinestatic

Definition at line 12664 of file NPC.cs.

12665 {
12666 int num = Main.npc[i].type;
12667 int num2 = -1;
12668 int num3 = -1;
12669 switch (num)
12670 {
12671 case 13:
12672 num3 = 15;
12673 num2 = 0;
12674 break;
12675 case 14:
12676 case 15:
12677 num3 = 13;
12678 num2 = 1;
12679 break;
12680 case 134:
12681 num3 = 136;
12682 num2 = 0;
12683 break;
12684 case 135:
12685 case 136:
12686 num3 = 134;
12687 num2 = 1;
12688 break;
12689 case 454:
12690 num3 = 459;
12691 num2 = 0;
12692 break;
12693 case 455:
12694 case 456:
12695 case 457:
12696 case 458:
12697 case 459:
12698 num3 = 454;
12699 num2 = 1;
12700 break;
12701 case 98:
12702 num3 = 100;
12703 num2 = 0;
12704 break;
12705 case 99:
12706 case 100:
12707 num3 = 98;
12708 num2 = 1;
12709 break;
12710 case 39:
12711 num3 = 41;
12712 num2 = 0;
12713 break;
12714 case 40:
12715 case 41:
12716 num3 = 39;
12717 num2 = 1;
12718 break;
12719 case 510:
12720 num3 = 512;
12721 num2 = 0;
12722 break;
12723 case 511:
12724 case 512:
12725 num3 = 510;
12726 num2 = 1;
12727 break;
12728 case 621:
12729 num3 = 623;
12730 num2 = 0;
12731 break;
12732 case 622:
12733 case 623:
12734 num3 = 621;
12735 num2 = 1;
12736 break;
12737 case 513:
12738 num3 = 515;
12739 num2 = 0;
12740 break;
12741 case 514:
12742 case 515:
12743 num3 = 513;
12744 num2 = 1;
12745 break;
12746 case 87:
12747 num3 = 92;
12748 num2 = 0;
12749 break;
12750 case 88:
12751 case 89:
12752 case 90:
12753 case 91:
12754 case 92:
12755 num3 = 87;
12756 num2 = 1;
12757 break;
12758 case 117:
12759 num3 = 119;
12760 num2 = 0;
12761 break;
12762 case 118:
12763 case 119:
12764 num3 = 117;
12765 num2 = 1;
12766 break;
12767 case 7:
12768 num3 = 9;
12769 num2 = 0;
12770 break;
12771 case 8:
12772 case 9:
12773 num3 = 7;
12774 num2 = 1;
12775 break;
12776 case 95:
12777 num3 = 97;
12778 num2 = 0;
12779 break;
12780 case 96:
12781 case 97:
12782 num3 = 95;
12783 num2 = 1;
12784 break;
12785 case 10:
12786 num3 = 12;
12787 num2 = 0;
12788 break;
12789 case 11:
12790 case 12:
12791 num3 = 10;
12792 num2 = 1;
12793 break;
12794 }
12795 if (num2 != -1)
12796 {
12797 if (seekHead && num2 == 1)
12798 {
12799 index = -1;
12800 pos = Vector2.Zero;
12801 return false;
12802 }
12803 Vector2 center = Main.npc[i].Center;
12804 int num4 = -1;
12805 float num5 = -1f;
12806 int num6 = -1;
12807 Vector2 center2 = Main.player[Main.myPlayer].Center;
12808 int num7 = (int)Main.npc[i].ai[num2];
12809 int num8 = 0;
12810 while (num7 >= 0 && num7 < 200 && ++num8 < 100 && Main.npc[num7].active)
12811 {
12812 if (!averageDirection && (num6 == -1 || Main.npc[num7].Distance(center2) < num5))
12813 {
12814 num5 = Main.npc[num7].Distance(center2);
12815 num6 = num7;
12816 }
12817 if (Main.npc[num7].type == num3)
12818 {
12819 num4 = num7;
12820 break;
12821 }
12822 num7 = (int)Main.npc[num7].ai[num2];
12823 }
12824 if (num4 >= 0)
12825 {
12826 if (!averageDirection)
12827 {
12828 pos = Main.npc[num6].Center;
12829 index = num6;
12830 }
12831 else
12832 {
12833 center += Main.npc[num4].Center;
12834 pos = center / 2f;
12835 index = num4;
12836 }
12837 return true;
12838 }
12839 pos = Vector2.Zero;
12840 index = -1;
12841 return false;
12842 }
12843 pos = Main.npc[i].Center;
12844 index = i;
12845 return true;
12846 }

References System.index, Terraria.Main.myPlayer, Terraria.Main.npc, Terraria.Main.player, and Microsoft.Xna.Framework.Vector2.Zero.

Referenced by Terraria.GameInput.LockOnHelper.Draw(), and Terraria.Main.DrawInterface_14_EntityHealthBars().