Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_AISoundHandling.c
Go to the documentation of this file.
2 {
3  NONE,
27 }
28 
29 
30 class SCR_AISoundHandling
31 {
32  static const int NORMAL_PRIORITY = 50; // priority of signals
33  static const int SIGNAL_VALUE_SOLDIER_ALL = 1000;
34  static const int DISTANCE_TYPE_MID = 50;
35  static const int DISTANCE_TYPE_LONG = 2500;
36 
37  //--------------------------------------------------------------------------------------------
38  static bool SetSignalsAndTransmit(SCR_AITalkRequest request, IEntity speakerEntity, VoNComponent von, SignalsManagerComponent signalsMgr)
39  {
40  ref array<float> signals = {};
41  SCR_CallsignCharacterComponent callsignComponent;
42  int SN_Seed = signalsMgr.FindSignal("Seed");
43  // randomize variant of the signal
44  SetSignal(SN_Seed, Math.RandomFloat(0, 1), signals);
45  // different signals depending on cummunication type
46  if (request.m_Entity)
47  callsignComponent = SCR_CallsignCharacterComponent.Cast(request.m_Entity.FindComponent(SCR_CallsignCharacterComponent));
48 
49  ECommunicationType commType = request.m_eCommType;
50  switch (commType)
51  {
52  case ECommunicationType.REPORT_TARGET:
53  {
54  if (!request.m_Entity)
55  {
56  ErrorMissingEntity(commType);
57  return false;
58  }
59  SetSignal_TargetValues(request.m_Entity, signalsMgr, signals);
60  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
61  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_TARGET, signals, NORMAL_PRIORITY);
62  break;
63  }
64  case ECommunicationType.REPORT_MOVE:
65  {
66  if (request.m_vPosition == vector.Zero)
67  {
68  ErrorMissingPosition(commType);
69  return false;
70  }
71  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
72 
73  float distanceType = SetSignal_PositionValues(request.m_Entity, signalsMgr, request.m_vPosition, speakerEntity.GetOrigin(), signals);
74  if (distanceType < DISTANCE_TYPE_MID) // close range distance
75  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOVE_CLOSE, signals, NORMAL_PRIORITY);
76  else if (distanceType < DISTANCE_TYPE_LONG) // mid range distance
77  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOVE_MID, signals, NORMAL_PRIORITY);
78  else // long range distance
79  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOVE_LONG, signals, NORMAL_PRIORITY);
80 
81  break;
82  }
83  case ECommunicationType.REPORT_CONTACT:
84  {
85  if (!request.m_Entity || request.m_vPosition == vector.Zero)
86  {
87  ErrorMissingEntityOrPosition(commType);
88  return false;
89  }
90  SetSignal_TargetFactionValues(request.m_Entity, signalsMgr, signals);
91  float distanceType = SetSignal_PositionValues(request.m_Entity, signalsMgr, request.m_vPosition, speakerEntity.GetOrigin(), signals);
92  SetSignal_FactionValues(signalsMgr, 1, signals);
93  if (distanceType < DISTANCE_TYPE_MID)
94  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_SPOTTED_CLOSE, signals, NORMAL_PRIORITY);
95  else if (distanceType < DISTANCE_TYPE_LONG)
96  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_SPOTTED_MID, signals, NORMAL_PRIORITY);
97  else
98  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_SPOTTED_LONG, signals, NORMAL_PRIORITY);
99  break;
100  }
101  case ECommunicationType.REPORT_RETURN:
102  {
103  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
104  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_RETURN, signals, NORMAL_PRIORITY);
105  break;
106  }
107  case ECommunicationType.REPORT_MOUNT:
108  {
109  if (!request.m_Entity)
110  {
111  ErrorMissingEntity(commType);
112  return false;
113  }
114  SetSignal_TargetValues(request.m_Entity, signalsMgr, signals);
115  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
116  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOUNT_BOARD, signals, NORMAL_PRIORITY);
117  break;
118  }
119  case ECommunicationType.REPORT_MOUNT_AS:
120  {
121  if (!callsignComponent)
122  {
123  ErrorMissingCallsign(commType);
124  return false;
125  }
126  SetSignal_MountAsValues(signalsMgr, callsignComponent.GetCharacterCallsignIndex(), RoleInVehicleToSoundRoleEnum(request.m_EnumSignal), signals);
127  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOUNT_ROLE, signals, NORMAL_PRIORITY);
128  break;
129  }
130  case ECommunicationType.REPORT_MOUNT_NEAREST:
131  {
132  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
133  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOUNT_NEAREST, signals, NORMAL_PRIORITY);
134  break;
135  }
136  case ECommunicationType.REPORT_UNMOUNT:
137  {
138  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
139  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_MOUNT_GETOUT, signals, NORMAL_PRIORITY);
140  break;
141  }
142  case ECommunicationType.REPORT_STOP:
143  {
144  if (callsignComponent)
145  SetSignal_SoldierCalledValues(signalsMgr, callsignComponent.GetCharacterCallsignIndex(), signals);
146  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_STOP, signals, NORMAL_PRIORITY);
147  break;
148  }
149  case ECommunicationType.REPORT_FLANK:
150  {
151  if (!callsignComponent)
152  {
153  ErrorMissingCallsign(commType);
154  return false;
155  }
156  SetSignal_SoldierCalledValues(signalsMgr, callsignComponent.GetCharacterCallsignIndex(), signals);
157  SetSignal_FlankValues(signalsMgr, request.m_EnumSignal, signals);
158  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_FLANK, signals, NORMAL_PRIORITY);
159  break;
160  }
161  case ECommunicationType.REPORT_SEARCH_AND_DESTROY:
162  {
163  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
164  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_SEARCH_AND_DESTROY, signals, NORMAL_PRIORITY);
165  break;
166  }
167  case ECommunicationType.REPORT_NO_AMMO:
168  {
169  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_STATUS_NOAMMO, signals, NORMAL_PRIORITY);
170  break;
171  }
172  case ECommunicationType.REPORT_CLEAR:
173  {
174  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_STATUS_CLEAR, signals, NORMAL_PRIORITY);
175  break;
176  }
177  case ECommunicationType.REPORT_ENGAGING:
178  {
179  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_STATUS_ENGAGING, signals, NORMAL_PRIORITY);
180  break;
181  }
182  case ECommunicationType.REPORT_TARGET_DOWN:
183  {
184  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_STATUS_TARGETDOWN, signals, NORMAL_PRIORITY);
185  break;
186  }
187  case ECommunicationType.REPORT_RELOADING:
188  {
189  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_ACTIONSTATUS_RELOAD, signals, NORMAL_PRIORITY);
190  break;
191  }
192  case ECommunicationType.REPORT_MOVING:
193  {
194  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_ACTIONSTATUS_MOVE, signals, NORMAL_PRIORITY);
195  break;
196  }
197  case ECommunicationType.REPORT_COVERING:
198  {
199  von.SoundEventPriority(SCR_SoundEvent.SOUND_REPORTS_ACTIONSTATUS_COVER, signals, NORMAL_PRIORITY);
200  break;
201  }
202  case ECommunicationType.REPORT_DEFEND:
203  {
204  SetSignal_SoldierCalledValues(signalsMgr, SIGNAL_VALUE_SOLDIER_ALL, signals);
205  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_DEFEND_POSITION, signals, NORMAL_PRIORITY);
206  break;
207  }
208  case ECommunicationType.REPORT_NEGATIVE:
209  {
210  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_NEGATIVEFEEDBACK_NEGATIVE, signals, NORMAL_PRIORITY);
211  break;
212  }
213  case ECommunicationType.REPORT_IDLE:
214  {
215  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_IDLE_SPEECH, signals, NORMAL_PRIORITY);
216  break;
217  }
218  case ECommunicationType.REPORT_TARGET_LOST:
219  {
220  if (callsignComponent)
221  SetSignal_SoldierCalledValues(signalsMgr, callsignComponent.GetCharacterCallsignIndex(), signals);
222  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_REPORTS_AREACLEAR, signals, NORMAL_PRIORITY);
223  break;
224  }
225  case ECommunicationType.REPORT_UNDER_FIRE:
226  {
227  if (callsignComponent)
228  SetSignal_SoldierCalledValues(signalsMgr, callsignComponent.GetCharacterCallsignIndex(), signals);
229  von.SoundEventPriority(SCR_SoundEvent.SOUND_CP_REPORTS_UNDER_FIRE, signals, NORMAL_PRIORITY);
230  break;
231  }
232  }
233  return true;
234  }
235 
236  //--------------------------------------------------------------------------------------------
237  static void ErrorMissingCallsign(ECommunicationType commType)
238  {
239  Print(string.Format("SCR_AISoundHandling: SetSignalsAndTransmit: Missing callsign for: %1", typename.EnumToString(ECommunicationType, commType)), LogLevel.ERROR);
240  }
241 
242  //--------------------------------------------------------------------------------------------
243  static void ErrorMissingEntity(ECommunicationType commType)
244  {
245  Print(string.Format("SCR_AISoundHandling: SetSignalsAndTransmit: Missing entity for: %1", typename.EnumToString(ECommunicationType, commType)), LogLevel.ERROR);
246  }
247 
248  //--------------------------------------------------------------------------------------------
249  static void ErrorMissingPosition(ECommunicationType commType)
250  {
251  Print(string.Format("SCR_AISoundHandling: SetSignalsAndTransmit: Missing position for: %1", typename.EnumToString(ECommunicationType, commType)), LogLevel.ERROR);
252  }
253 
254  //--------------------------------------------------------------------------------------------
255  static void ErrorMissingEntityOrPosition(ECommunicationType commType)
256  {
257  Print(string.Format("SCR_AISoundHandling: SetSignalsAndTransmit: Missing entity or position for: %1", typename.EnumToString(ECommunicationType, commType)), LogLevel.ERROR);
258  }
259 
260  //--------------------------------------------------------------------------------------------
261  static SCR_AIInfoComponent GetInfoComponent(IEntity entity)
262  {
263  if (!entity)
264  return null;
265  SCR_ChimeraAIAgent agent = SCR_ChimeraAIAgent.Cast(entity);
266  if (entity && !agent)
267  {
268  AIControlComponent cc = AIControlComponent.Cast(entity.FindComponent(AIControlComponent));
269  if (!cc)
270  return null;
271  agent = SCR_ChimeraAIAgent.Cast(cc.GetAIAgent());
272  if (!agent)
273  return null;
274  }
275  return agent.m_InfoComponent;
276  }
277 
278  //--------------------------------------------------------------------------------------------
279  static int InfoUnitRoleToSoundCharacterEnum(SCR_AIInfoComponent info)
280  {
281  if (!info)
282  return ECP_Characters.MAN;
283  else if (info.HasRole(EUnitRole.MACHINEGUNNER))
284  return ECP_Characters.MACHINE_GUNNER;
285  else if (info.HasRole(EUnitRole.AT_SPECIALIST))
286  return ECP_Characters.AT_SOLDIER;
287  else if (info.HasRole(EUnitRole.SNIPER))
288  return ECP_Characters.SNIPER;
289  else if (info.HasRole(EUnitRole.RIFLEMAN))
290  return ECP_Characters.SOLDIER;
291  return ECP_Characters.MAN;
292  }
293 
294  //--------------------------------------------------------------------------------------------
295  static int RoleInVehicleToSoundRoleEnum(int role)
296  {
297  switch (role)
298  {
299  case ECompartmentType.Pilot:
300  {
301  return ECP_VehicleRoles.DRIVER;
302  }
303  case ECompartmentType.Turret:
304  {
305  return ECP_VehicleRoles.GUNNER;
306  }
307  case ECompartmentType.Cargo:
308  {
309  return ECP_VehicleRoles.PASSANGER;
310  }
311  }
312  return role;
313  }
314 
315  //--------------------------------------------------------------------------------------------
316  static int VehicleTypeToSoundVehicleFactionEnum(int role)
317  {
318  switch (role)
319  {
320  case EVehicleType.VEHICLE:
321  {
322  return ECP_VehicleTypes.VEHICLE;
323  }
324  case EVehicleType.CAR:
325  {
326  return ECP_VehicleTypes.CAR;
327  }
328  case EVehicleType.TRUCK:
329  {
330  return ECP_VehicleTypes.TRUCK;
331  }
332  case EVehicleType.APC:
333  {
334  return ECP_VehicleTypes.APC;
335  }
336  case EVehicleType.COMM_TRUCK:
337  {
338  return ECP_VehicleTypes.COMM_TRUCK;
339  }
340  case EVehicleType.FUEL_TRUCK:
341  {
342  return ECP_VehicleTypes.FUEL_TRUCK;
343  }
344  case EVehicleType.SUPPLY_TRUCK:
345  {
346  return ECP_VehicleTypes.SUPPLY_TRUCK;
347  }
348  case EVehicleType.MORTAR:
349  {
350  return ECP_VehicleTypes.MORTAR;
351  }
352  default:
353  {
354  return ECP_VehicleTypes.HELICOPTER;
355  }
356  }
357  return role;
358  }
359 
360  //--------------------------------------------------------------------------------------------
361  static void SetSignal_TargetValues(IEntity target, SignalsManagerComponent signalsManagerComponent, array<float> signals)
362  {
363  if (target.IsInherited(Vehicle))
364  {
365  int SN_Vehicle = signalsManagerComponent.FindSignal("Vehicle");
366 
367  SetSignal(SN_Vehicle, Vehicle.Cast(target).m_eVehicleType, signals);
368  }
369 
370  else if (target.IsInherited(ChimeraCharacter))
371  {
372  int SN_Character = signalsManagerComponent.FindSignal("Character");
373  SCR_AIInfoComponent targetInfoComponent = GetInfoComponent(target);
374  int unitRole = InfoUnitRoleToSoundCharacterEnum(targetInfoComponent);
375 
376  SetSignal(SN_Character, unitRole, signals);
377  }
378  //TODO: do Miscellaneous - now not objects to attacks
379  }
380 
381  //--------------------------------------------------------------------------------------------
382  static void SetSignal_TargetFactionValues(IEntity target, SignalsManagerComponent signalsManagerComponent, array<float> signals)
383  {
384  if (target.IsInherited(Vehicle))
385  {
386  int SN_VehicleFaction = signalsManagerComponent.FindSignal("VehicleFaction");
387 
388  SetSignal(SN_VehicleFaction, 100 + VehicleTypeToSoundVehicleFactionEnum(Vehicle.Cast(target).m_eVehicleType), signals);
389  }
390 
391  else if (target.IsInherited(ChimeraCharacter))
392  {
393  int SN_CharacterFaction = signalsManagerComponent.FindSignal("CharacterFaction");
394  SCR_AIInfoComponent targetInfoComponent = GetInfoComponent(target);
395  int unitRole = InfoUnitRoleToSoundCharacterEnum(targetInfoComponent) + 100;
396 
397  SetSignal(SN_CharacterFaction, unitRole, signals);
398  }
399  //TODO: do Miscellaneous - now not objects to attacks
400  }
401 
402  //--------------------------------------------------------------------------------------------
403  static float SetSignal_PositionValues(IEntity target, SignalsManagerComponent signalsManagerComponent, vector locationTarget, vector locationSelf, array<float> signals)
404  {
405  if (target)
406  locationTarget = target.GetOrigin();
407 
408  float distance = vector.Distance(locationTarget,locationSelf);
409  if (distance < DISTANCE_TYPE_MID)
410  {
411  vector dirVec = locationTarget - locationSelf;
412  float directionAngle = dirVec.ToYaw();
413  int SN_DirectionClose = signalsManagerComponent.FindSignal("DirectionClose");
414  SetSignal(SN_DirectionClose, directionAngle, signals);
415  }
416  else if (distance < DISTANCE_TYPE_LONG)
417  {
418  vector dirVec = locationTarget - locationSelf;
419  float directionAngle = dirVec.ToYaw();
420 
421  int SN_TargetDistance = signalsManagerComponent.FindSignal("TargetDistance");
422  int SN_DirectionAngle = signalsManagerComponent.FindSignal("DirectionAngle");
423 
424  SetSignal(SN_TargetDistance, distance, signals);
425  SetSignal(SN_DirectionAngle, directionAngle, signals);
426  }
427  else if (distance >= DISTANCE_TYPE_LONG)
428  {
429  SetSignal_GridValues(locationTarget, signalsManagerComponent, signals);
430  }
431  return distance;
432  }
433 
434  //--------------------------------------------------------------------------------------------
435  static void SetSignal_GridValues(vector locationTarget, SignalsManagerComponent signalsManagerComponent, array<float> signals)
436  {
437  array<int> gridXcoords = {};
438  array<int> gridZcoords = {};
439  int gridX, gridZ;
440  SCR_MapEntity.GetGridPos(locationTarget, gridX: gridX, gridZ: gridZ);
441 
442  int SN_Grid = signalsManagerComponent.FindSignal("Grid");
443  for (int i = 2; i >= 0; i--)
444  {
445  int mod = Math.Pow(10, i);
446  gridXcoords.Insert(gridX / mod);
447  gridZcoords.Insert(gridZ / mod);
448  gridX = gridX % mod;
449  gridZ = gridZ % mod;
450  };
451  for (int i = 0; i < 3; i++)
452  SetSignal(SN_Grid, gridXcoords[i], signals);
453  for (int i = 0; i < 3; i++)
454  SetSignal(SN_Grid, gridZcoords[i], signals);
455  }
456 
457  //--------------------------------------------------------------------------------------------
458  static void SetSignal_SoldierCalledValues(SignalsManagerComponent signalsManagerComponent, int soldierCalled, array<float> signals)
459  {
460  int SN_SoldierCalled = signalsManagerComponent.FindSignal("SoldierCalled");
461 
462  SetSignal(SN_SoldierCalled, soldierCalled, signals);
463  }
464 
465  //--------------------------------------------------------------------------------------------
466  static void SetSignal_MountAsValues(SignalsManagerComponent signalsManagerComponent, int soldierCalledId, int soldierRole, array<float> signals)
467  {
468  int SN_SoldierCalled = signalsManagerComponent.FindSignal("SoldierCalled");
469  int SN_Role = signalsManagerComponent.FindSignal("Role");
470 
471  SetSignal(SN_SoldierCalled, soldierCalledId, signals);
472  SetSignal(SN_Role, soldierRole, signals);
473  }
474 
475  //--------------------------------------------------------------------------------------------
476  static void SetSignal_FlankValues(SignalsManagerComponent signalsManagerComponent, int flank, array<float> signals)
477  {
478  int SN_Flank = signalsManagerComponent.FindSignal("Flank");
479 
480  SetSignal(SN_Flank, flank, signals);
481  }
482 
483  //--------------------------------------------------------------------------------------------
484  static void SetSignal_FactionValues(SignalsManagerComponent signalsManagerComponent, int faction, array<float> signals)
485  {
486  int SN_Faction = signalsManagerComponent.FindSignal("Faction");
487 
488  SetSignal(SN_Faction, faction, signals);
489  }
490 
491  //--------------------------------------------------------------------------------------------
492  static void SetSignal(int index, float value, notnull array<float> signals)
493  {
494  signals.Insert(index);
495  signals.Insert(value);
496  }
497 
498  //--------------------------------------------------------------------------------------------
499  static SCR_AICommsHandler FindCommsHandler(AIAgent agent)
500  {
501  SCR_ChimeraAIAgent chimeraAgent = SCR_ChimeraAIAgent.Cast(agent);
502  if (!chimeraAgent)
503  return null;
504  return chimeraAgent.m_UtilityComponent.m_CommsHandler;
505  }
506 }
REPORT_ENGAGING
@ REPORT_ENGAGING
Definition: SCR_AISoundHandling.c:18
REPORT_UNMOUNT
@ REPORT_UNMOUNT
Definition: SCR_AISoundHandling.c:10
REPORT_MOUNT
@ REPORT_MOUNT
Definition: SCR_AISoundHandling.c:7
SCR_SoundEvent
Definition: SCR_SoundEvent.c:1
REPORT_RELOADING
@ REPORT_RELOADING
Definition: SCR_AISoundHandling.c:21
REPORT_MOVE
@ REPORT_MOVE
Definition: SCR_AISoundHandling.c:5
ECompartmentType
ECompartmentType
Definition: ECompartmentType.c:7
REPORT_NEGATIVE
@ REPORT_NEGATIVE
Definition: SCR_AISoundHandling.c:24
REPORT_RETURN
@ REPORT_RETURN
Definition: SCR_AISoundHandling.c:6
REPORT_TARGET_DOWN
@ REPORT_TARGET_DOWN
Definition: SCR_AISoundHandling.c:19
REPORT_SEARCH_AND_DESTROY
@ REPORT_SEARCH_AND_DESTROY
Definition: SCR_AISoundHandling.c:25
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
SCR_ChimeraAIAgent
Definition: SCR_ChimeraAIAgent.c:5
distance
float distance
Definition: SCR_DestructibleTreeV2.c:29
REPORT_COVERING
@ REPORT_COVERING
Definition: SCR_AISoundHandling.c:23
REPORT_MOUNT_AS
@ REPORT_MOUNT_AS
Definition: SCR_AISoundHandling.c:8
REPORT_DEFEND
@ REPORT_DEFEND
Definition: SCR_AISoundHandling.c:13
ECommunicationType
ECommunicationType
Definition: SCR_AISoundHandling.c:1
SCR_MapEntity
Map entity.
Definition: SCR_MapEntity.c:20
REPORT_MOUNT_NEAREST
@ REPORT_MOUNT_NEAREST
Definition: SCR_AISoundHandling.c:9
NORMAL_PRIORITY
enum ECommunicationType NORMAL_PRIORITY
REPORT_NO_AMMO
@ REPORT_NO_AMMO
Definition: SCR_AISoundHandling.c:15
index
SCR_DestructionSynchronizationComponentClass ScriptComponentClass int index
Definition: SCR_DestructionSynchronizationComponent.c:17
REPORT_MOVING
@ REPORT_MOVING
Definition: SCR_AISoundHandling.c:22
REPORT_TARGET_LOST
@ REPORT_TARGET_LOST
Definition: SCR_AISoundHandling.c:20
SCR_AICommsHandler
Definition: SCR_AICommsHandler.c:19
REPORT_CLEAR
@ REPORT_CLEAR
Definition: SCR_AISoundHandling.c:17
REPORT_IDLE
@ REPORT_IDLE
Definition: SCR_AISoundHandling.c:26
REPORT_TARGET
@ REPORT_TARGET
Definition: SCR_AISoundHandling.c:4
REPORT_FLANK
@ REPORT_FLANK
Definition: SCR_AISoundHandling.c:12
REPORT_CONTACT
@ REPORT_CONTACT
Definition: SCR_AISoundHandling.c:14
REPORT_UNDER_FIRE
@ REPORT_UNDER_FIRE
Definition: SCR_AISoundHandling.c:16
NONE
@ NONE
Definition: SCR_AISoundHandling.c:3
REPORT_STOP
@ REPORT_STOP
Definition: SCR_AISoundHandling.c:11