Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_AIGroupUtilityComponent.c
Go to the documentation of this file.
1 void ScriptInvoker_GroupMoveFailed_Callback(int moveResult, IEntity vehicleUsed, bool isWaypointRelated, vector moveLocation);
3 typedef ScriptInvokerBase<ScriptInvoker_GroupMoveFailed_Callback> ScriptInvoker_GroupMoveFailed;
4 
5 [ComponentEditorProps(category: "GameScripted/AI", description: "Component for utility AI system for groups")]
7 {
8 }
9 
10 class SCR_AIGroupUtilityComponent : SCR_AIBaseUtilityComponent
11 {
13  SCR_AIConfigComponent m_ConfigComponent;
14  SCR_AIGroupInfoComponent m_GroupInfo;
15  SCR_MailboxComponent m_Mailbox;
16  ref array<SCR_AIInfoComponent> m_aInfoComponents = {};
17 
19 
20  protected float m_fLastUpdateTime = -1.0;
21  protected float m_fPerceptionUpdateTimer_ms;
22 
23  // Update interval of group perception and target clusters and their processing
24  protected const float PERCEPTION_UPDATE_TIMER_MS = 2000.0;
25 
26  protected bool m_bNewGroupMemberAdded;
28 
29  // Waypoint state
31 
32  // Group perception and clusters
34 
36 
37  // Fireteams
39 
40  // Used by SCR_AIGetMemberByGoal nodes
42 
43  //------------------------------------------------------------------------------------------------
47  SCR_AIActionBase EvaluateActivity(out bool restartActivity)
48  {
49  SCR_AIActionBase activity;
50  restartActivity = false;
51 
52  if (!m_ConfigComponent)
53  return null;
54 
55  float currentTime = GetGame().GetWorld().GetWorldTime();
56  float deltaTime_ms = 0;
57  if (m_fLastUpdateTime != -1.0)
58  deltaTime_ms = currentTime - m_fLastUpdateTime;
59 
60  #ifdef AI_DEBUG
61  AddDebugMessage("EvaluateActivity START");
62  if (m_bEvaluationBreakpoint)
63  {
64  Print("EvaluateActivity breakpoint triggered");
65  debug;
66  m_bEvaluationBreakpoint = false;
67  }
68  #endif
69 
70  // Read messages
71  AIMessage msgBase = m_Mailbox.ReadMessage(true);
72  if (msgBase)
73  {
74  SCR_AIMessageGoal msgGoal = SCR_AIMessageGoal.Cast(msgBase);
75  if (msgGoal)
76  {
77  // Process goal message
78  #ifdef AI_DEBUG
79  AddDebugMessage(string.Format("PerformGoalReaction: %1, from BT: %2", msgGoal, msgGoal.m_sSentFromBt));
80  #endif
81  m_ConfigComponent.PerformGoalReaction(this, msgGoal);
82  }
83  else
84  {
85  SCR_AIMessageInfo msgInfo = SCR_AIMessageInfo.Cast(msgBase);
86  if (msgInfo)
87  {
88  // Process info message
89 
90  bool overrideReaction = CallActionsOnMessage(msgInfo);
91 
92  if (!overrideReaction)
93  {
94  #ifdef AI_DEBUG
95  AddDebugMessage(string.Format("PerformInfoReaction: %1, from BT: %2", msgInfo, msgInfo.m_sSentFromBt));
96  #endif
97 
98  m_ConfigComponent.PerformInfoReaction(this, msgInfo);
99  }
100  #ifdef AI_DEBUG
101  else
102  {
103  #ifdef AI_DEBUG
104  AddDebugMessage(string.Format("InfoMessage consumed by action: %1, from BT: %2", msgInfo, msgInfo.m_sSentFromBt));
105  #endif
106  }
107  #endif
108  }
109  }
110  }
111 
113 
114  activity = SCR_AIActionBase.Cast(EvaluateActions());
115  #ifdef AI_DEBUG
117  DebugLogActionsPriority();
118  #endif
119 
120  if (activity && (!m_CurrentActivity || (m_CurrentActivity != activity && m_CurrentActivity.IsActionInterruptable())))
121  restartActivity = true;
122  else if (m_bNewGroupMemberAdded && activity)
123  restartActivity = true;
124 
125  if (restartActivity)
126  {
127  SetCurrentAction(activity);
128  UpdateGroupControlMode(activity);
129  m_CurrentActivity = activity;
130 
131 #ifdef WORKBENCH
132  if (DiagMenu.GetBool(SCR_DebugMenuID.DEBUGUI_AI_PRINT_ACTIVITY))
133  PrintFormat("Agent %1 activity %2",m_Owner,m_CurrentActivity.GetActionDebugInfo());
134 #endif
135  }
136 
137  #ifdef AI_DEBUG
138  AddDebugMessage("EvaluateActivity END\n");
139  #endif
140 
141  // Rebalance fireteams if needed
142  if (m_FireteamMgr.m_bRebalanceFireteams)
143  {
144  if (CanRebalanceFireteams()) // In some cases we can't rebalance fireteams yet
145  {
146  m_FireteamMgr.RebalanceFireteams();
147  }
148  }
149 
150  // Perception and clusters
151  m_fPerceptionUpdateTimer_ms += deltaTime_ms;
153  {
154  m_Perception.Update();
155  if (!m_Perception.m_aTargetClusters.IsEmpty())
157 
159  }
160 
161  m_fLastUpdateTime = currentTime;
162  m_bNewGroupMemberAdded = false; // resetting reaction on group member added
163 
164  return m_CurrentActivity;
165  }
166 
167  //------------------------------------------------------------------------------------------------
170  void OnAgentAdded(AIAgent agent)
171  {
172  // Add to array of AIInfo
173  SCR_ChimeraAIAgent chimeraAgent = SCR_ChimeraAIAgent.Cast(agent);
174  if (!chimeraAgent)
175  return;
176 
177  SCR_AIInfoComponent info = chimeraAgent.m_InfoComponent;
178 
179  if (!info)
180  return;
181 
182  m_aInfoComponents.Insert(info);
183 
184  m_FireteamMgr.OnAgentAdded(agent, info);
185 
186  m_bNewGroupMemberAdded = true;
187 
188  return;
189  }
190 
191  //------------------------------------------------------------------------------------------------
194  void OnAgentRemoved(SCR_AIGroup group, AIAgent agent)
195  {
196  // Remove from array of AIInfo
197  for (int i = m_aInfoComponents.Count() - 1; i >= 0; i--)
198  {
199  if (!m_aInfoComponents[i])
200  {
201  Debug.Error("Null AI info occured"); // investigate when this happens!
202  m_aInfoComponents.RemoveOrdered(i);
203  }
204  else if (m_aInfoComponents[i].IsOwnerAgent(agent))
205  {
206  m_aInfoComponents.RemoveOrdered(i);
207  break;
208  }
209  }
210 
211  m_FireteamMgr.OnAgentRemoved(agent);
212  }
213 
214  //------------------------------------------------------------------------------------------------
216  void OnWaypointCompleted(AIWaypoint waypoint)
217  {
218  if (m_WaypointState && waypoint)
219  m_WaypointState.OnDeselected();
220 
221  m_WaypointState = null;
222  }
223 
224  //------------------------------------------------------------------------------------------------
227  void OnWaypointRemoved(AIWaypoint waypoint, bool isCurrentWaypoint)
228  {
229  // Remove old wp state, if it existed
230  if (isCurrentWaypoint)
231  {
232  if (waypoint && m_WaypointState)
233  m_WaypointState.OnDeselected();
234 
235  m_WaypointState = null;
236  }
237  }
238 
239  //------------------------------------------------------------------------------------------------
242  void OnCurrentWaypointChanged(AIWaypoint currentWp, AIWaypoint prevWp)
243  {
244  // Remove old wp state, if it existed
245  if (m_WaypointState && prevWp)
246  m_WaypointState.OnDeselected();
247 
248  m_WaypointState = null;
249 
250  // Create new wp state
251  if (currentWp)
252  {
253  SCR_AIWaypoint scrCurrentWp = SCR_AIWaypoint.Cast(currentWp);
254  if (scrCurrentWp)
255  {
256  SCR_AIWaypointState wpState = scrCurrentWp.CreateWaypointState(this);
257  if (wpState)
258  {
259  m_WaypointState = wpState;
260  m_WaypointState.OnSelected();
261  }
262  }
263  }
264  }
265 
266  //------------------------------------------------------------------------------------------------
268  {
269  if (m_WaypointState)
270  m_WaypointState.OnExecuteWaypointTree();
271  }
272 
273  //------------------------------------------------------------------------------------------------
275  void OnEnemyDetectedFiltered(SCR_AIGroup group, SCR_AITargetInfo target, AIAgent reporter)
276  {
277  SCR_ChimeraAIAgent agent = SCR_ChimeraAIAgent.Cast(reporter);
278  if (!agent)
279  return;
280 
281  SCR_AICommsHandler commsHandler = agent.m_UtilityComponent.m_CommsHandler;
282 
283  // Ignore if the talk request can be optimized out
284  if (commsHandler.CanBypass())
285  return;
286 
287  SCR_AITalkRequest rq = new SCR_AITalkRequest(ECommunicationType.REPORT_CONTACT, target.m_Entity, target.m_vWorldPos,
288  enumSignal: 0, transmitIfNoReceivers: true, transmitIfPassenger: true, preset: SCR_EAITalkRequestPreset.MEDIUM);
289  commsHandler.AddRequest(rq);
290  }
291 
292  //------------------------------------------------------------------------------------------------
297  {
298  // If we've lost enemies at some place, make the assigned fireteams report that
299  if (newState == EAITargetClusterState.LOST &&
300  (prevState == EAITargetClusterState.INVESTIGATING || prevState == EAITargetClusterState.ATTACKING) &&
301  state.m_Activity)
302  {
303  SCR_AIFireteamsActivity ftActivity = SCR_AIFireteamsActivity.Cast(state.m_Activity);
304  if (ftActivity)
305  {
306  TFireteamLockRefArray fireteamLocks = {};
307  ftActivity.GetAssignedFireteams(fireteamLocks);
308  foreach (SCR_AIGroupFireteamLock ftLock : fireteamLocks)
309  {
310  AIAgent reporterAgent = ftLock.GetFireteam().GetMember(0);
311  if (!reporterAgent)
312  continue;
313  SCR_AICommsHandler commsHandler = SCR_AISoundHandling.FindCommsHandler(reporterAgent);
314  if (!commsHandler)
315  continue;
316  if (commsHandler.CanBypass())
317  continue;
318 
319  SCR_AITalkRequest rq = new SCR_AITalkRequest(ECommunicationType.REPORT_CLEAR, null, vector.Zero, 0, false, false, SCR_EAITalkRequestPreset.MEDIUM);
320  commsHandler.AddRequest(rq);
321  }
322  }
323  }
324  }
325 
326  //------------------------------------------------------------------------------------------------
330  void CancelActivitiesRelatedToWaypoint(notnull AIWaypoint waypoint, typename activityType = typename.Empty)
331  {
332  array<ref AIActionBase> actions = {};
333  GetActions(actions);
334  bool checkType = activityType != typename.Empty;
335  foreach (AIActionBase action : actions)
336  {
337  SCR_AIActivityBase activity = SCR_AIActivityBase.Cast(action);
338 
339  if (!activity || (checkType && !activity.IsInherited(activityType)))
340  continue;
341 
342  if (activity.m_RelatedWaypoint == waypoint)
343  activity.Fail();
344  }
345  }
346 
347  //------------------------------------------------------------------------------------------------
349  protected bool CanRebalanceFireteams()
350  {
351  // Can't rebalance fireteams if there is any fireteams-related activity
352  array<ref AIActionBase> allActions = {};
353  GetActions(allActions);
354 
355  array<AIActionBase> subactions = {};
356  foreach (AIActionBase action : allActions)
357  {
358  if (SCR_AIFireteamsActivity.Cast(action))
359  return false;
361  if (parallel)
362  {
363  parallel.GetSubactions(subactions);
364  foreach (AIActionBase subaction : subactions)
365  {
366  if (SCR_AIFireteamsActivity.Cast(subaction))
367  return false;
368  }
369  }
370  }
371 
372  return true;
373  }
374 
375  //------------------------------------------------------------------------------------------------
376  void OnMoveFailed(int moveResult, IEntity vehicleUsed, bool isWaypointReleated, vector moveLocation)
377  {
378  if (m_OnMoveFailed)
379  m_OnMoveFailed.Invoke(moveResult, vehicleUsed, isWaypointReleated, moveLocation);
380  }
381 
382  //------------------------------------------------------------------------------------------------
384  {
385  if (!m_OnMoveFailed)
387 
388  return m_OnMoveFailed;
389  }
390 
391  //---------------------------------------------------------------------------------------------------
392  override void EOnInit(IEntity owner)
393  {
394  super.EOnInit(owner);
395  m_Owner = SCR_AIGroup.Cast(owner);
396  if (!m_Owner)
397  return;
398 
399  m_ConfigComponent = SCR_AIConfigComponent.Cast(m_Owner.FindComponent(SCR_AIConfigComponent));
400 
401  m_ConfigComponent.AddDefaultActivities(this);
402  //AddAction(new SCR_AIIdleActivity(this))
403 
404  m_Owner.GetOnAgentAdded().Insert(OnAgentAdded);
405  m_Owner.GetOnAgentRemoved().Insert(OnAgentRemoved);
406  m_Owner.GetOnWaypointCompleted().Insert(OnWaypointCompleted);
407  m_Owner.GetOnWaypointRemoved().Insert(OnWaypointRemoved);
408  m_Owner.GetOnCurrentWaypointChanged().Insert(OnCurrentWaypointChanged);
409 
410  m_GroupInfo = SCR_AIGroupInfoComponent.Cast(m_Owner.FindComponent(SCR_AIGroupInfoComponent));
411 
413  m_TargetClusterProcessor.m_OnClusterStateChanged.Insert(OnTargetClusterStateChanged);
414 
416 
418  m_Perception.GetOnEnemyDetectedFiltered().Insert(OnEnemyDetectedFiltered);
419 
420  m_Mailbox = SCR_MailboxComponent.Cast(m_Owner.FindComponent(SCR_MailboxComponent));
421 
423  }
424 
425  //------------------------------------------------------------------------------------------------
426  override void EOnDiag(IEntity owner, float timeSlice)
427  {
428  if (DiagMenu.GetBool(SCR_DebugMenuID.DEBUGUI_AI_TARGET_CLUSTERS))
429  m_Perception.DiagDrawClusters();
430 
431  if (DiagMenu.GetBool(SCR_DebugMenuID.DEBUGUI_AI_FIRETEAMS))
432  m_FireteamMgr.DiagDrawFireteams();
433  }
434 
435  //------------------------------------------------------------------------------------------------
439  {
440  #ifdef AI_DEBUG
441  AddDebugMessage("UpdateGroupControlMode");
442  #endif
443 
444  if (m_GroupInfo)
445  {
446  SCR_AIActivityBase currentActivity = SCR_AIActivityBase.Cast(currentAction);
447 
448  if (currentActivity && currentActivity.m_bIsWaypointRelated.m_Value)
449  m_GroupInfo.SetGroupControlMode(EGroupControlMode.FOLLOWING_WAYPOINT);
450  else if (SCR_AIIdleActivity.Cast(currentActivity))
451  m_GroupInfo.SetGroupControlMode(EGroupControlMode.IDLE);
452  else
453  m_GroupInfo.SetGroupControlMode(EGroupControlMode.AUTONOMOUS);
454  }
455  }
456 
457  //------------------------------------------------------------------------------------------------
460  void UpdateClustersState(float deltaTime_ms)
461  {
462  foreach (SCR_AIGroupTargetCluster cluster : m_Perception.m_aTargetClusters)
463  {
464  m_TargetClusterProcessor.UpdateCluster(cluster, cluster.m_State, deltaTime_ms);
465  }
466  }
467 
468  //------------------------------------------------------------------------------------------------
472  bool IsPositionAllowed(vector pos)
473  {
474  AIWaypoint wp = m_Owner.GetCurrentWaypoint();
475 
476  // If there is no waypoint, we can go anywhere
477  if (!wp)
478  return true;
479 
480  // If we have a defend wp, we can go only inside of it
481  SCR_DefendWaypoint defendWp = SCR_DefendWaypoint.Cast(wp);
482  if (defendWp)
483  return vector.Distance(defendWp.GetOrigin(), pos) < defendWp.GetCompletionRadius();
484 
485  return true;
486  }
487 
488  // Diagnostics and debugging below
489 }
ComponentEditorProps
SCR_FragmentEntityClass ComponentEditorProps
SCR_AIBaseUtilityComponentClass
Definition: SCR_AIBaseUtilityComponent.c:2
m_iGetMemberByGoalNextIndex
int m_iGetMemberByGoalNextIndex
Definition: SCR_AIGroupUtilityComponent.c:41
SCR_AIIdleActivity
Definition: SCR_AIActivity.c:72
SetCurrentAction
proto external void SetCurrentAction(AIActionBase executed)
OnWaypointCompleted
void OnWaypointCompleted(AIWaypoint waypoint)
Definition: SCR_AIGroupUtilityComponent.c:216
RemoveObsoleteActions
proto external bool RemoveObsoleteActions()
Removes actions which are failed or completed.
SCR_AIFireteamsActivity
Definition: SCR_AIFireteamsActivity.c:6
m_OnMoveFailed
ref ScriptInvoker_GroupMoveFailed m_OnMoveFailed
Definition: SCR_AIGroupUtilityComponent.c:18
SCR_AIActionBase
Definition: SCR_AIAction.c:1
OnCurrentWaypointChanged
void OnCurrentWaypointChanged(AIWaypoint currentWp, AIWaypoint prevWp)
Definition: SCR_AIGroupUtilityComponent.c:242
OnExecuteWaypointTree
void OnExecuteWaypointTree()
Definition: SCR_AIGroupUtilityComponent.c:267
GetGame
ArmaReforgerScripted GetGame()
Definition: game.c:1424
SCR_AIWaypoint
Definition: SCR_AIWaypoint.c:5
GetOnMoveFailed
ScriptInvoker_GroupMoveFailed GetOnMoveFailed()
Definition: SCR_AIGroupUtilityComponent.c:383
SCR_AIWaypointState
Definition: SCR_AIWaypointState.c:6
m_CurrentActivity
protected ref SCR_AIActionBase m_CurrentActivity
Definition: SCR_AIGroupUtilityComponent.c:27
m_TargetClusterProcessor
protected ref SCR_AIGroupTargetClusterProcessor m_TargetClusterProcessor
Definition: SCR_AIGroupUtilityComponent.c:35
SCR_DefendWaypoint
Definition: SCR_DefendWaypoint.c:18
m_Perception
ref SCR_AIGroupPerception m_Perception
Definition: SCR_AIGroupUtilityComponent.c:33
SCR_AIGroupTargetClusterProcessor
Definition: SCR_AIGroupTargetClusterProcessor.c:6
func
func
Definition: SCR_AIThreatSystem.c:5
SCR_AIMessageGoal
Definition: SCR_AIMessage.c:69
AIActionBase
Definition: AIActionBase.c:12
SCR_AIActivityBase
Definition: SCR_AIActivity.c:1
SCR_AIGroupUtilityComponentClass
Definition: SCR_AIGroupUtilityComponent.c:6
m_fPerceptionUpdateTimer_ms
protected float m_fPerceptionUpdateTimer_ms
Definition: SCR_AIGroupUtilityComponent.c:21
SCR_AIGroupFireteamManager
Definition: SCR_AIGroupFireteamManager.c:4
OnTargetClusterStateChanged
void OnTargetClusterStateChanged(SCR_AITargetClusterState state, EAITargetClusterState prevState, EAITargetClusterState newState)
Definition: SCR_AIGroupUtilityComponent.c:296
m_bNewGroupMemberAdded
protected bool m_bNewGroupMemberAdded
Definition: SCR_AIGroupUtilityComponent.c:26
CanRebalanceFireteams
protected bool CanRebalanceFireteams()
Determines when we can rebalance fireteams. We don't want to do that when fighting for example.
Definition: SCR_AIGroupUtilityComponent.c:349
ScriptInvoker_GroupMoveFailed_Callback
func ScriptInvoker_GroupMoveFailed_Callback
Definition: SCR_AIGroupUtilityComponent.c:2
SCR_AITalkRequest
void SCR_AITalkRequest(ECommunicationType type, IEntity entity, vector pos, int enumSignal, bool transmitIfNoReceivers, bool transmitIfPassenger, SCR_EAITalkRequestPreset preset)
Definition: SCR_AITalkRequest.c:37
m_fLastUpdateTime
protected float m_fLastUpdateTime
Definition: SCR_AIGroupUtilityComponent.c:20
SCR_ChimeraAIAgent
Definition: SCR_ChimeraAIAgent.c:5
EvaluateActivity
SCR_AIActionBase EvaluateActivity(out bool restartActivity)
Definition: SCR_AIGroupUtilityComponent.c:47
m_WaypointState
protected ref SCR_AIWaypointState m_WaypointState
Definition: SCR_AIGroupUtilityComponent.c:30
SCR_AIGroupTargetCluster
Definition: SCR_AIGroupTargetCluster.c:41
m_FireteamMgr
ref SCR_AIGroupFireteamManager m_FireteamMgr
Definition: SCR_AIGroupUtilityComponent.c:38
OnAgentAdded
void OnAgentAdded(AIAgent agent)
Definition: SCR_AIGroupUtilityComponent.c:170
TFireteamLockRefArray
array< ref SCR_AIGroupFireteamLock > TFireteamLockRefArray
Definition: SCR_AIGroupFireteamLock.c:6
ECommunicationType
ECommunicationType
Definition: SCR_AISoundHandling.c:1
GetActions
int GetActions(out notnull array< SCR_BaseEditorAction > actions)
Definition: SCR_BaseActionsEditorComponent.c:168
PERCEPTION_UPDATE_TIMER_MS
const protected float PERCEPTION_UPDATE_TIMER_MS
Definition: SCR_AIGroupUtilityComponent.c:24
EOnDiag
override void EOnDiag(IEntity owner, float timeSlice)
Definition: SCR_AIGroupUtilityComponent.c:426
SCR_AIGroupFireteamLock
Definition: SCR_AIGroupFireteamLock.c:9
m_GroupInfo
SCR_AIGroupInfoComponent m_GroupInfo
Definition: SCR_AIGroupUtilityComponent.c:14
OnWaypointRemoved
void OnWaypointRemoved(AIWaypoint waypoint, bool isCurrentWaypoint)
Definition: SCR_AIGroupUtilityComponent.c:227
EOnInit
override void EOnInit(IEntity owner)
Definition: SCR_AIGroupUtilityComponent.c:392
ScriptInvoker_GroupMoveFailed
ScriptInvokerBase< ScriptInvoker_GroupMoveFailed_Callback > ScriptInvoker_GroupMoveFailed
Definition: SCR_AIGroupUtilityComponent.c:3
OnMoveFailed
void OnMoveFailed(int moveResult, IEntity vehicleUsed, bool isWaypointReleated, vector moveLocation)
Definition: SCR_AIGroupUtilityComponent.c:376
UpdateClustersState
void UpdateClustersState(float deltaTime_ms)
Definition: SCR_AIGroupUtilityComponent.c:460
SCR_AICompositeActionParallel
Definition: SCR_AICompositeActionParallel.c:1
UpdateGroupControlMode
void UpdateGroupControlMode(SCR_AIActionBase currentAction)
Definition: SCR_AIGroupUtilityComponent.c:438
SCR_AIGroup
Definition: SCR_AIGroup.c:68
m_ConfigComponent
SCR_AIConfigComponent m_ConfigComponent
Definition: SCR_AIGroupUtilityComponent.c:13
SCR_AIMessageInfo
Definition: SCR_AIMessage.c:95
SCR_AICommsHandler
Definition: SCR_AICommsHandler.c:19
OnEnemyDetectedFiltered
void OnEnemyDetectedFiltered(SCR_AIGroup group, SCR_AITargetInfo target, AIAgent reporter)
Called from m_Perception.
Definition: SCR_AIGroupUtilityComponent.c:275
EvaluateActions
void EvaluateActions(notnull array< SCR_BaseEditorAction > actions, vector cursorWorldPosition, out notnull array< ref SCR_EditorActionData > filteredActions, out int flags=0)
Definition: SCR_BaseActionsEditorComponent.c:184
m_aInfoComponents
ref array< SCR_AIInfoComponent > m_aInfoComponents
Definition: SCR_AIGroupUtilityComponent.c:16
CallActionsOnMessage
proto external bool CallActionsOnMessage(AIMessage msg)
SCR_DebugMenuID
SCR_DebugMenuID
This enum contains all IDs for DiagMenu entries added in script.
Definition: DebugMenuID.c:3
SCR_AITargetClusterState
void SCR_AITargetClusterState(SCR_AIGroupTargetCluster cluster)
Definition: SCR_AITargetClusterState.c:38
m_Mailbox
SCR_MailboxComponent m_Mailbox
Definition: SCR_AIGroupUtilityComponent.c:15
DiagIncreaseCounter
void DiagIncreaseCounter()
Definition: SCR_AIBaseUtilityComponent.c:44
EAITargetClusterState
EAITargetClusterState
Definition: SCR_AITargetClusterState.c:6
CancelActivitiesRelatedToWaypoint
void CancelActivitiesRelatedToWaypoint(notnull AIWaypoint waypoint, typename activityType=typename.Empty)
Definition: SCR_AIGroupUtilityComponent.c:330
IsPositionAllowed
bool IsPositionAllowed(vector pos)
Definition: SCR_AIGroupUtilityComponent.c:472
m_Owner
SCR_AIGroupUtilityComponentClass m_Owner
SCR_AIGroupPerception
Definition: SCR_AIGroupPerception.c:13
OnAgentRemoved
void OnAgentRemoved(SCR_AIGroup group, AIAgent agent)
Definition: SCR_AIGroupUtilityComponent.c:194
category
params category
Definition: SCR_VehicleDamageManagerComponent.c:180