Terraria
v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
NPCSmartInteractCandidateProvider.cs
Go to the documentation of this file.
1
using
Microsoft.Xna.Framework
;
2
3
namespace
Terraria.GameContent.ObjectInteractions
;
4
5
public
class
NPCSmartInteractCandidateProvider
:
ISmartInteractCandidateProvider
6
{
7
private
class
ReusableCandidate
:
ISmartInteractCandidate
8
{
9
private
int
_npcIndexToTarget
;
10
11
public
float
DistanceFromCursor
{
get
;
private
set
; }
12
13
public
void
WinCandidacy
()
14
{
15
Main.SmartInteractNPC =
_npcIndexToTarget
;
16
Main.SmartInteractShowingGenuine =
true
;
17
}
18
19
public
void
Reuse
(
int
npcIndex,
float
npcDistanceFromCursor)
20
{
21
_npcIndexToTarget
= npcIndex;
22
DistanceFromCursor
= npcDistanceFromCursor;
23
}
24
}
25
26
private
ReusableCandidate
_candidate
=
new
ReusableCandidate
();
27
28
public
void
ClearSelfAndPrepareForCheck
()
29
{
30
Main.SmartInteractNPC = -1;
31
}
32
33
public
bool
ProvideCandidate
(
SmartInteractScanSettings
settings, out
ISmartInteractCandidate
candidate)
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
}
78
}
Terraria.Entity.Center
Vector2 Center
Definition
Entity.cs:43
Terraria.Entity.Hitbox
Rectangle Hitbox
Definition
Entity.cs:164
Terraria.Entity.active
bool active
Definition
Entity.cs:10
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate.Reuse
void Reuse(int npcIndex, float npcDistanceFromCursor)
Definition
NPCSmartInteractCandidateProvider.cs:19
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate.DistanceFromCursor
float DistanceFromCursor
Definition
NPCSmartInteractCandidateProvider.cs:11
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate.WinCandidacy
void WinCandidacy()
Definition
NPCSmartInteractCandidateProvider.cs:13
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate._npcIndexToTarget
int _npcIndexToTarget
Definition
NPCSmartInteractCandidateProvider.cs:9
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ReusableCandidate
Definition
NPCSmartInteractCandidateProvider.cs:8
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ProvideCandidate
bool ProvideCandidate(SmartInteractScanSettings settings, out ISmartInteractCandidate candidate)
Definition
NPCSmartInteractCandidateProvider.cs:33
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider._candidate
ReusableCandidate _candidate
Definition
NPCSmartInteractCandidateProvider.cs:26
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider.ClearSelfAndPrepareForCheck
void ClearSelfAndPrepareForCheck()
Definition
NPCSmartInteractCandidateProvider.cs:28
Terraria.GameContent.ObjectInteractions.NPCSmartInteractCandidateProvider
Definition
NPCSmartInteractCandidateProvider.cs:6
Terraria.Main.npc
static NPC[] npc
Definition
Main.cs:1685
Terraria.Main
Definition
Main.cs:79
Terraria.NPC.townNPC
bool townNPC
Definition
NPC.cs:537
Terraria.NPC
Definition
NPC.cs:30
Terraria.Player.tileRangeX
static int tileRangeX
Definition
Player.cs:2075
Terraria.Player.tileRangeY
static int tileRangeY
Definition
Player.cs:2077
Terraria.Player
Definition
Player.cs:42
Terraria.Utils.CenteredRectangle
static Rectangle CenteredRectangle(Vector2 center, Vector2 size)
Definition
Utils.cs:604
Terraria.Utils
Definition
Utils.cs:29
Terraria.GameContent.ObjectInteractions.ISmartInteractCandidateProvider
Definition
ISmartInteractCandidateProvider.cs:4
Terraria.GameContent.ObjectInteractions.ISmartInteractCandidate
Definition
ISmartInteractCandidate.cs:4
Microsoft.Xna.Framework
Definition
AlphaTestEffect.cs:1
Terraria.GameContent.ObjectInteractions
Definition
AHoverInteractionChecker.cs:5
Microsoft.Xna.Framework.Rectangle.Intersects
bool Intersects(Rectangle value)
Definition
Rectangle.cs:129
Microsoft.Xna.Framework.Rectangle
Definition
Rectangle.cs:12
Microsoft.Xna.Framework.Vector2
Definition
Vector2.cs:12
Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.DemandOnlyZeroDistanceTargets
bool DemandOnlyZeroDistanceTargets
Definition
SmartInteractScanSettings.cs:9
Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.player
Player player
Definition
SmartInteractScanSettings.cs:7
Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.mousevec
Vector2 mousevec
Definition
SmartInteractScanSettings.cs:13
Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings.FullInteraction
bool FullInteraction
Definition
SmartInteractScanSettings.cs:11
Terraria.GameContent.ObjectInteractions.SmartInteractScanSettings
Definition
SmartInteractScanSettings.cs:6
source
Terraria.GameContent.ObjectInteractions
NPCSmartInteractCandidateProvider.cs
Generated by
1.10.0