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

◆ ProvideCandidate()

bool Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ProvideCandidate ( SmartInteractScanSettings settings,
out ISmartInteractCandidate candidate )
inline

Implements Terraria.GameContent.ObjectInteractions.ISmartInteractCandidateProvider.

Definition at line 33 of file NPCSmartInteractCandidateProvider.cs.

34 {
35 candidate = null;
36 if (!settings.FullInteraction)
37 {
38 return false;
39 }
40 Rectangle value = Utils.CenteredRectangle(settings.player.Center, new Vector2(Player.tileRangeX, Player.tileRangeY) * 16f * 2f);
41 Vector2 mousevec = settings.mousevec;
42 mousevec.ToPoint();
43 bool flag = false;
44 int num = -1;
45 float npcDistanceFromCursor = -1f;
46 for (int i = 0; i < 200; i++)
47 {
48 NPC nPC = Main.npc[i];
49 if (nPC.active && nPC.townNPC && nPC.Hitbox.Intersects(value) && !flag)
50 {
51 float num2 = nPC.Hitbox.Distance(mousevec);
52 if (num == -1 || Main.npc[num].Hitbox.Distance(mousevec) > num2)
53 {
54 num = i;
55 npcDistanceFromCursor = num2;
56 }
57 if (num2 == 0f)
58 {
59 flag = true;
60 num = i;
61 npcDistanceFromCursor = num2;
62 break;
63 }
64 }
65 }
66 if (settings.DemandOnlyZeroDistanceTargets && !flag)
67 {
68 return false;
69 }
70 if (num != -1)
71 {
72 _candidate.Reuse(num, npcDistanceFromCursor);
73 candidate = _candidate;
74 return true;
75 }
76 return false;
77 }

References Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider._candidate, Terraria.Entity.active, Terraria.Entity.Center, Terraria.Utils.CenteredRectangle(), Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.DemandOnlyZeroDistanceTargets, Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.FullInteraction, Terraria.Entity.Hitbox, Microsoft.Xna.Framework.Rectangle.Intersects(), Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.mousevec, Terraria.Main.npc, Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.player, Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate.Reuse(), Terraria.Player.tileRangeX, Terraria.Player.tileRangeY, and Terraria.NPC.townNPC.