Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIAction.c
Go to the documentation of this file.
1
3{
4 UNKNOWN, // Unknown or unspecified
5 CANCELLED, // Cancelled by SCR_AIMessage_Cancel or something else
8 ENTITY_DELETED // Some crucial related entity got deleted
9}
10
11class SCR_AIActionBase : AIActionBase
12{
13 // Priority levels
14 const static float PRIORITY_LEVEL_NORMAL = 0;
15 const static float PRIORITY_LEVEL_PLAYER = 1000;
16 const static float PRIORITY_LEVEL_GAMEMASTER = 2000;
17 // Unit behaviors
18 const static float PRIORITY_BEHAVIOR_RETREAT_MELEE = 190 + PRIORITY_LEVEL_PLAYER;
19 const static float PRIORITY_BEHAVIOR_AVOID_CHARACTER = 180 + PRIORITY_LEVEL_PLAYER;
20 const static float PRIORITY_BEHAVIOR_GET_OUT_VEHICLE_HIGH_PRIORITY = 162 + PRIORITY_LEVEL_PLAYER; // High priority get out for evacuations of vehicles
21 const static float PRIORITY_BEHAVIOR_MOVE_FROM_DANGER = 160 + PRIORITY_LEVEL_PLAYER;
22 const static float PRIORITY_BEHAVIOR_ATTACK_HIGH_PRIORITY = 120 + PRIORITY_LEVEL_PLAYER; // Attack high priority
23 const static float PRIORITY_BEHAVIOR_HEAL_HIGH_PRIORITY = 115 + PRIORITY_LEVEL_PLAYER; // Heal yourself in critical situation
24 const static float PRIORITY_BEHAVIOR_OBSERVE_UNKNOWN_FIRE_HIGH_PRIORITY = 113 + PRIORITY_LEVEL_PLAYER; // Unknown fire at close range
25 const static float PRIORITY_BEHAVIOR_GET_IN_VEHICLE = 130;
26 const static float PRIORITY_BEHAVIOR_GET_OUT_VEHICLE = 125;
27 const static float PRIORITY_BEHAVIOR_PICKUP_INVENTORY_ITEMS = 118;
28 const static float PRIORITY_BEHAVIOR_STATIC_ARTILLERY = 114;
29 const static float PRIORITY_BEHAVIOR_FIRE_ILLUM_FLARE = 113;
30 const static float PRIORITY_BEHAVIOR_THROW_GRENADE = 112;
31 const static float PRIORITY_BEHAVIOR_MEDIC_HEAL = 111;
32 const static float PRIORITY_BEHAVIOR_RETREAT_FROM_TARGET = 110; // (when attack exists, retreat does not, and the other way)
33 const static float PRIORITY_BEHAVIOR_PROVIDE_AMMO = 100;
34 const static float PRIORITY_BEHAVIOR_ATTACK_SELECTED = 90; // Attack selected
35 const static float PRIORITY_BEHAVIOR_HEAL_WAIT = 83;
36 const static float PRIORITY_BEHAVIOR_MOVE_FROM_VEHICLE_HORN = 72;
37 const static float PRIORITY_BEHAVIOR_ATTACK_NOT_SELECTED = 70; // Attack not selected
38 const static float PRIORITY_BEHAVIOR_OBSERVE_THREATS_HIGH_PRIORITY = 69; // Look at threats (gunshots), before safety is reached. !!! Priority of this must be higher than move and investigate!
39 const static float PRIORITY_BEHAVIOR_MOVE_FROM_UNKNOWN_FIRE = 68;
40 const static float PRIORITY_BEHAVIOR_OBSERVE_UNKNOWN_FIRE = 66; // ! Obsolete ! Stare at gunfire origin. !!! Priority of this must be higher than move and investigate!
41 const static float PRIORITY_BEHAVIOR_HEAL = 65;
42 const static float PRIORITY_BEHAVIOR_MOVE_AND_INVESTIGATE = 64;
43 const static float PRIORITY_BEHAVIOR_SUPPRESS = 63;
44 const static float PRIORITY_BEHAVIOR_DEFEND = 61; // Defend selected waypoint
45 const static float PRIORITY_BEHAVIOR_FIND_FIRE_POSITION = 60;
46 const static float PRIORITY_BEHAVIOR_OBSERVE_LOW_PRIORITY = 59; // ! Obsolete ! After observe executed looking once
47 const static float PRIORITY_BEHAVIOR_MOVE_INDIVIDUALLY = 58;
48 const static float PRIORITY_BEHAVIOR_OPEN_NAVLINK_DOOR = 54; // Handling of door within group movement
49 const static float PRIORITY_BEHAVIOR_PERFORM_ACTION = 30;
50 const static float PRIORITY_BEHAVIOR_MOVE = 30;
51 const static float PRIORITY_BEHAVIOR_MOVE_IN_FORMATION = 30;
52 const static float PRIORITY_BEHAVIOR_ATTACK_DISREGARD_THREATS = 20; // Attack, but when we are forbidden to shoot
53 const static float PRIORITY_BEHAVIOR_WAIT = 10;
54 const static float PRIORITY_BEHAVIOR_OBSERVE_THREATS_LOW_PRIORITY = 4;
55 const static float PRIORITY_BEHAVIOR_MOVE_IN_FORMATION_LOW_PRIORITY = 3; // When we're close to leader who isn't moving
56 const static float PRIORITY_BEHAVIOR_IDLE_DRIVER = 2;
57 const static float PRIORITY_BEHAVIOR_ANIMATE = 1.5;
58 const static float PRIORITY_BEHAVIOR_IDLE = 1;
59 //const static float PRIORITY_BEHAVIOR_
60
61 // Sequence of actions specific for dismounting turret and getting back
62 const static float PRIORITY_BEHAVIOR_DISMOUNT_TURRET = 300;
63 const static float PRIORITY_BEHAVIOR_DISMOUNT_TURRET_INVESTIGATE = 21;
64 const static float PRIORITY_BEHAVIOR_DISMOUNT_TURRET_GET_IN = 20;
65
66 // Group activities
67 const static float PRIORITY_ACTIVITY_GET_IN = 130;
68 const static float PRIORITY_ACTIVITY_FOLLOW = 130;
69 const static float PRIORITY_ACTIVITY_RESUPPLY = 100;
70 const static float PRIORITY_ACTIVITY_COMBAT_WITH_VEHICLES = 85;
71 const static float PRIORITY_ACTIVITY_HEAL = 80;
72 const static float PRIORITY_ACTIVITY_ARTILLERY_SUPPORT = 75;
73 const static float PRIORITY_ACTIVITY_ATTACK_CLUSTER = 70;
74 const static float PRIORITY_ACTIVITY_SEEK_AND_DESTROY = 60;
75 const static float PRIORITY_ACTIVITY_INVESTIGATE_CLUSTER = 55;
76 const static float PRIORITY_ACTIVITY_DEFEND_FROM_CLUSTER = 55;
77 const static float PRIORITY_ACTIVITY_MOVE = 50;
78 const static float PRIORITY_ACTIVITY_PERFORM_ACTION = 50;
79 const static float PRIORITY_ACTIVITY_DEFEND = 50;
80 const static float PRIORITY_ACTIVITY_GET_OUT = 50;
81 const static float PRIORITY_ACTIVITY_SUPPRESS = 40;
82 const static float PRIORITY_ACTIVITY_ANIMATE = 10;
83
84
85 // TODO: Get rid of flags we don't neccesarily need
86 bool m_bIsInterruptable = true;
87 protected ref SCR_BTParam<float> m_fPriorityLevel = new SCR_BTParam<float>(SCR_AIActionTask.PRIORITY_LEVEL_PORT); // used when utility component calls Evaluate() on action, adds level of priority
88
90
93
94 // Array with parameters which must be exposed to scripts.
95 // For example see how m_bPrioritize is used here.
96 ref array<SCR_BTParamBase> m_aParams = {};
97
99
100 //-------------------------------------------------------------------------------------
101 override float EvaluatePriorityLevel()
102 {
103 return m_fPriorityLevel.m_Value;
104 }
105
106 //---------------------------------------------------------------------------------------------------------------------------------
107 void SetPriorityLevel(int priority)
108 {
109 m_fPriorityLevel.m_Value = priority;
110 }
111
112 //---------------------------------------------------------------------------------------------------------------------------------
117
118 //---------------------------------------------------------------------------------------------------------------------------------
121 {
122 m_eFailReason = failReason;
123 }
124
125 //---------------------------------------------------------------------------------------------------------------------------------
130 {
131 return 0;
132 }
133
134 //-------------------------------------------------------------------------------------
135
136 #ifdef AI_DEBUG
137 protected void AddDebugMessage(string str);
138 #endif
139
140 //-------------------------------------------------------------------------------------
141 override void OnSetActionState(EAIActionState state)
142 {
143 #ifdef AI_DEBUG
144 AddDebugMessage(string.Format("SetActionState: %1, %2", typename.EnumToString(EAIActionState, state), GetActionDebugInfo()));
145 #endif
146 }
147
148 //-------------------------------------------------------------------------------------
149 override void OnSetSuspended(bool suspended)
150 {
151 #ifdef AI_DEBUG
152 AddDebugMessage(string.Format("SetSuspended: %1, %2", suspended, GetActionDebugInfo()));
153 #endif
154 }
155
156 //-------------------------------------------------------------------------------------
157 override void OnComplete()
158 {
159 #ifdef AI_DEBUG
160 AddDebugMessage(string.Format("Complete: %1", GetActionDebugInfo()));
161 #endif
163 m_OnActionCompleted.Invoke(this);
164 }
165
166 //-------------------------------------------------------------------------------------
167 override void OnFail()
168 {
169 #ifdef AI_DEBUG
170 AddDebugMessage(string.Format("Fail: Reason: %1, %2", m_eFailReason, GetActionDebugInfo()));
171 #endif
173 m_OnActionFailed.Invoke(this);
174 }
175
176 //-------------------------------------------------------------------------------------
177 override void OnActionRemoved()
178 {
179 #ifdef AI_DEBUG
180 AddDebugMessage(string.Format("Remove: %1", GetActionDebugInfo()));
181 #endif
182 }
183
184 // Called for basic info to print out for specific behaviors - to override
186 {
187 return this.ToString();
188 }
189
190 string GetDebugPanelText() { return string.Empty; }
191
192 // Called after behavior was selected after different behavior
193 override void OnActionSelected() {SetActionState(EAIActionState.RUNNING);}
194
195 // Called after behavior different behavior was selected instead of this one
196 override void OnActionDeselected() {SetActionState(EAIActionState.EVALUATED);}
197
198 // Called each frame behavior was selected, before it's executed in the behavior tree
200
201 // Called when utility component recognizes completion of the behavior
202 void OnActionCompleted() {SetActionState(EAIActionState.COMPLETED);}
203
204 // Called when utility component recognizes failure of the behavior
205 void OnActionFailed() {SetActionState(EAIActionState.FAILED);}
206
207 //-------------------------------------------------------------------------------------
209 {
210 return m_bIsInterruptable || GetActionState() != EAIActionState.RUNNING;
211 }
212
213 //-------------------------------------------------------------------------------------
214 void SetActionInterruptable(bool IsInterruptable)
215 {
216 m_bIsInterruptable = IsInterruptable;
217 }
218
219 //---------------------------------------------------------------------------------------------------
220 // These methods are used by SCR_AIGetActionParameters and SCR_AISetActionParameters.
221 // They help move data between action and behavior tree variables.
222
224 {
225 foreach (SCR_BTParamBase param : m_aParams)
226 param.SetVariableOut(node);
227 }
228
229 //-------------------------------------------------------------------------------------
231 {
232 foreach (SCR_BTParamBase param : m_aParams)
233 param.GetVariableIn(node);
234 }
235
236 //-------------------------------------------------------------------------------------
237 // Returns array with port names of all parameters of this action.
239 {
240 TStringArray namesOut = {};
241 foreach (SCR_BTParamBase p : m_aParams)
242 namesOut.Insert(p.m_sPortName);
243 return namesOut;
244 }
245
246 //-------------------------------------------------------------------------------------
249 {
250 return Math.Clamp(Math.Max(EvaluatePriorityLevel(), minimumLevel), PRIORITY_LEVEL_NORMAL, PRIORITY_LEVEL_PLAYER);
251 }
252};
ref array< SCR_BTParamBase > m_aParams
ref ScriptInvoker m_OnActionFailed
ref SCR_BTParam< float > m_fPriorityLevel
void SetPriorityLevel(int priority)
void OnActionCompleted()
override void OnComplete()
bool m_bIsInterruptable
enum EAIActionFailReason PRIORITY_LEVEL_NORMAL
override void OnSetSuspended(bool suspended)
override float EvaluatePriorityLevel()
override void OnSetActionState(EAIActionState state)
float GetRestrictedPriorityLevel(float minimumLevel=PRIORITY_LEVEL_NORMAL)
Limits priority level for actions such that those are performed in "NORMAL" and "PLAYER" priority lev...
bool IsActionInterruptable()
ref ScriptInvoker m_OnActionCompleted
override void OnActionDeselected()
void OnActionExecuted()
EAIActionFailReason GetFailReason()
TStringArray GetPortNames()
EAIActionFailReason m_eFailReason
ResourceName m_sBehaviorTree
void GetParametersFromBTVariables(SCR_AIActionTask node)
override void OnActionRemoved()
override void OnActionSelected()
void OnActionFailed()
string GetDebugPanelText()
EAIActionFailReason
Fail reasons of actions. They can be generic or specific to some behavior.
Definition SCR_AIAction.c:3
@ TARGET_UNREACHABLE
Definition SCR_AIAction.c:6
@ ENTITY_DELETED
Definition SCR_AIAction.c:8
@ NO_AMMO
Definition SCR_AIAction.c:7
@ CANCELLED
Definition SCR_AIAction.c:5
string GetActionDebugInfo()
int GetCause()
void SetActionInterruptable(bool IsInterruptable)
void SetParametersToBTVariables(SCR_AIActionTask node)
override void OnFail()
void SetFailReason(EAIActionFailReason failReason)
Fail reason is an optional value which can be used to figure out why action failed.
Definition Math.c:13
Base BT parameter class to be used in SCR_AIActionParams.
Definition SCR_BTParam.c:8
EAIActionState
@ UNKNOWN
Definition EPlatform.c:24
array< string > TStringArray
Definition Types.c:385
proto external string ToString()
Plain C++ pointer, no weak pointers, no memory management.
ScriptInvokerBase< func > ScriptInvoker
Definition tools.c:134