Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AICheckEntityStance.c
Go to the documentation of this file.
2{
3 static const string PORT_ENTITY = "Entity";
4 static const string PORT_STANCE = "Stance";
5
6 [Attribute("0", UIWidgets.ComboBox, enums: ParamEnumArray.FromEnum(ECharacterStance))]
8
9 [Attribute("10")]
10 protected float m_fMaxDistance;
11
14 protected bool m_bIsAborted;
15 protected AIGroup m_Group;
16 protected SCR_AIGroupInfoComponent m_GroupInfo;
17
18 protected float m_fNextUpdate_ms;
19 [Attribute("500")]
20 protected float m_fUpdateInterval_ms;
21
22 override void OnInit(AIAgent owner)
23 {
24 m_bIsAborted = false;
25 m_Group = AIGroup.Cast(owner);
26 if (!m_Group)
27 return SCR_AgentMustBeAIGroup(this, owner);
28 m_GroupInfo = SCR_AIGroupInfoComponent.Cast(m_Group.FindComponent(SCR_AIGroupInfoComponent));
29 if (!m_GroupInfo)
30 return;
31 m_eStanceLimit = m_GroupInfo.GetStanceLimit();
33 }
34
35 //------------------------------------------------------------------------------------------------
36 override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
37 {
38 float currentTime_ms = GetGame().GetWorld().GetWorldTime();
39 if (currentTime_ms < m_fNextUpdate_ms)
40 return ENodeResult.RUNNING;
41 m_fNextUpdate_ms = currentTime_ms + m_fUpdateInterval_ms;
42
43 if (!m_Group || !m_GroupInfo)
44 return ENodeResult.FAIL;
45
46 IEntity entityToCopy;
47 if (!GetVariableIn(PORT_ENTITY, entityToCopy))
48 return NodeError(this, owner, "No entity provided!");
49
50 if (!entityToCopy)
51 return ENodeResult.FAIL;
52
53 // keep running if agents are too far from entityToCopy
54 vector entityPos = entityToCopy.GetOrigin();
55 vector agentPos = owner.GetOrigin();
56 float distSq = vector.DistanceSq(entityPos, agentPos);
57
58 if (distSq >= (m_fMaxDistance * m_fMaxDistance))
59 return ENodeResult.RUNNING;
60
61 // get stance of entityToCopy
62 CharacterControllerComponent charCont = CharacterControllerComponent.Cast(entityToCopy.FindComponent(CharacterControllerComponent));
63 if (!charCont)
64 return NodeError(this, owner, "No character controller?!");
65
66 ECharacterStance stance = charCont.GetStance();
67 if (stance == m_eStance)
68 return ENodeResult.RUNNING;
69
70 m_GroupInfo.SetStanceLimit(stance);
71 m_eStance = stance;
72 SetVariableOut(PORT_STANCE, stance);
73 return ENodeResult.SUCCESS;
74 }
75
76 //------------------------------------------------------------------------------------------------
77 override void OnAbort(AIAgent owner, Node nodeCausingAbort)
78 {
79 if (m_bIsAborted)
80 return;
81 if (m_GroupInfo)
82 m_GroupInfo.SetStanceLimit(m_eStanceLimit);
83 m_bIsAborted = true;
84 }
85
86 //------------------------------------------------------------------------------------------------
87 static override bool VisibleInPalette() {return true;}
88
89 //------------------------------------------------------------------------------------------------
90 protected static ref TStringArray s_aVarsOut = {
91 PORT_STANCE
92 };
94 {
95 return s_aVarsOut;
96 }
97
98 //------------------------------------------------------------------------------------------------
99 protected static ref TStringArray s_aVarsIn = {
100 PORT_ENTITY
101 };
103 {
104 return s_aVarsIn;
105 }
106
107 //------------------------------------------------------------------------------------------------
108 static override string GetOnHoverDescription()
109 {
110 return "SCR_AICheckEntityStance: checks current entity stance. Returns running if stance doesn't change or leading entity is far away.";
111 }
112
113 static override bool CanReturnRunning()
114 {
115 return true;
116 }
117}
ArmaReforgerScripted GetGame()
Definition game.c:1398
ENodeResult NodeError(Node node, AIAgent owner, string msg)
Error call to be used in scripted BT nodes.
Definition NodeError.c:3
void SCR_AgentMustBeAIGroup(Node node, AIAgent owner)
Definition NodeError.c:14
proto external Managed FindComponent(typename typeName)
proto external vector GetOrigin()
Definition Node.c:13
proto void SetVariableOut(string name, void val)
proto bool GetVariableIn(string name, out void val)
static override string GetOnHoverDescription()
static override bool CanReturnRunning()
static ref TStringArray s_aVarsOut
override TStringArray GetVariablesIn()
override ENodeResult EOnTaskSimulate(AIAgent owner, float dt)
override void OnInit(AIAgent owner)
SCR_AIGroupInfoComponent m_GroupInfo
override TStringArray GetVariablesOut()
override void OnAbort(AIAgent owner, Node nodeCausingAbort)
static override bool VisibleInPalette()
static ref TStringArray s_aVarsIn
ENodeResult
Definition ENodeResult.c:13
ECharacterStance
SCR_FieldOfViewSettings Attribute
array< string > TStringArray
Definition Types.c:385