Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AIMessage.c
Go to the documentation of this file.
14
47
48//----------------- EXPAND MESSAGE TYPES
50{
51 int m_MessageType; // here is kept enum for message type, which enum it is depends on IsInherited()
52
53 #ifdef AI_DEBUG
54 // The Behavior Tree which has sent this message
55 string m_sSentFromBt;
56 #endif
57
58 void SetMessageParameters(SCR_AISendMessageBase node) // this method fills an existing message with content
59 {
60 string debugText;
61 if (!node.GetVariableIn(node.PORT_STRING,debugText))
62 debugText = node.m_string;
63 SetText(debugText);
64 SetReceiver(node.m_Receiver);
65 }
66
67 string GetDebugText()
68 {
69 return string.Format("\t%1", this);
70 }
71};
72
73//---------------------------------------------------------------------------------------------------
74class SCR_AIMessageGoal : SCR_AIMessageBase // MESSAGE_CLASS()
75{
76 [Attribute("0", UIWidgets.ComboBox, "Type of event generating the message", "", ParamEnumArray.FromEnum(EMessageType_Goal) )]
77 EMessageType_Goal m_eUIType;
78
79 ref SCR_AIActivityBase m_RelatedGroupActivity;
80 float m_fPriorityLevel; // VARIABLE(NodePort, PriorityLevel, NodeProperty, m_fPriorityLevel)
81 bool m_bIsWaypointRelated; // VARIABLE(NodePort, IsWaypointRelated, NodeProperty, m_bIsWaypointRelated)
82 AIWaypoint m_RelatedWaypoint;
83
84 void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
85 {
86 super.SetMessageParameters(node);
87 m_RelatedGroupActivity = relatedActivity;
88 if (!node.GetVariableIn(node.PORT_PRIORITY_LEVEL, m_fPriorityLevel))
89 m_fPriorityLevel = node.m_fPriorityLevel;
90 m_bIsWaypointRelated = node.m_bIsWaypointRelated;
91 }
92
93 override string GetDebugText()
94 {
95 return super.GetDebugText() + string.Format("\tType: %1\n", typename.EnumToString(EMessageType_Goal, m_eUIType));
96 }
97};
98
99//---------------------------------------------------------------------------------------------------
100class SCR_AIMessageInfo : SCR_AIMessageBase // MESSAGE_CLASS()
101{
102 [Attribute("0", UIWidgets.ComboBox, "Type of event generating the message", "", ParamEnumArray.FromEnum(EMessageType_Info) )]
103 EMessageType_Info m_eUIType;
104
105 override string GetDebugText()
106 {
107 return super.GetDebugText() + string.Format("\tType: %1\n", typename.EnumToString(EMessageType_Info, m_eUIType));
108 }
109};
110
111//----------------- EXPAND MESSAGE SUBTYPES - info type for relaying information
112
113class SCR_AIMessage_Target : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_Target)
114{
115 ref SCR_AITargetInfo m_TargetInfo; // VARIABLE(NodePort, TargetInfo)
116
117 override void SetMessageParameters(SCR_AISendMessageBase node)
118 {
119 super.SetMessageParameters(node);
120
121 SCR_AISendMessageGeneric genericNode = SCR_AISendMessageGeneric.Cast(node);
122
123 IEntity targetEntity;
124 vector pos;
125 float time;
126
127 genericNode.GetVariableIn(genericNode.PORT_ENTITY, targetEntity);
128 if (!genericNode.GetVariableIn(genericNode.PORT_VECTOR, pos))
129 pos = genericNode.m_vector;
130 genericNode.GetVariableIn(genericNode.PORT_FLOAT, time);
131 m_TargetInfo = new SCR_AITargetInfo();
132 m_TargetInfo.Init(targetEntity, worldPos: pos, timestamp: time);
133 }
134};
135
136class SCR_AIMessage_NoAmmo : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_NoAmmo)
137{
138 IEntity m_entityToSupply; // VARIABLE(NodePort, EntityToSupply)
139 typename m_MagazineWell; // VARIABLE(NodePort, MagazineWellType)
140
141 void SCR_AIMessage_NoAmmo()
142 {
143 m_MessageType = EMessageType_Info.NO_AMMO;
144 }
145
146 override void SetMessageParameters(SCR_AISendMessageBase node)
147 {
148 super.SetMessageParameters(node);
149
150 SCR_AISendMessageGeneric genericNode = SCR_AISendMessageGeneric.Cast(node);
151
152 genericNode.GetVariableIn(genericNode.PORT_ENTITY, m_entityToSupply);
153 genericNode.GetVariableIn(genericNode.PORT_TYPENAME, m_MagazineWell);
154 }
155
156 static SCR_AIMessage_NoAmmo Create(IEntity entityToResupply, typename magazineWell)
157 {
158 SCR_AIMessage_NoAmmo msg = new SCR_AIMessage_NoAmmo();
159
160 msg.m_entityToSupply = entityToResupply;
161 msg.m_MagazineWell = magazineWell;
162
163 return msg;
164 }
165};
166
167class SCR_AIMessage_UnderFire : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_UnderFire)
168{
169 vector m_vPosition; // VARIABLE(NodePort, Position)
170
171 void SCR_AIMessage_UnderFire()
172 {
173 m_MessageType = EMessageType_Info.UNDER_FIRE;
174 }
175
176 override void SetMessageParameters(SCR_AISendMessageBase node)
177 {
178 super.SetMessageParameters(node);
179
180 SCR_AISendMessageGeneric genericNode = SCR_AISendMessageGeneric.Cast(node);
181
182 if (!genericNode.GetVariableIn(genericNode.PORT_VECTOR, m_vPosition))
183 m_vPosition = genericNode.m_vector;
184 }
185};
186
187class SCR_AIMessage_FoundCorpse : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_FoundCorpse)
188{
189 vector m_vPosition; // VARIABLE(NodePort, Position)
190
191 void SCR_AIMessage_FoundCorpse()
192 {
193 m_MessageType = EMessageType_Info.FOUND_CORPSE;
194 }
195
196 override void SetMessageParameters(SCR_AISendMessageBase node)
197 {
198 super.SetMessageParameters(node);
199
200 SCR_AISendMessageGeneric genericNode = SCR_AISendMessageGeneric.Cast(node);
201
202 if (!genericNode.GetVariableIn(genericNode.PORT_VECTOR, m_vPosition))
203 m_vPosition = genericNode.m_vector;
204 }
205};
206
207class SCR_AIMessage_Wounded : SCR_AIMessage_FoundCorpse // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_Wounded)
208{
209 IEntity m_WoundedEntity; // VARIABLE(NodePort, WoundedEntity)
210
211 void SCR_AIMessage_Wounded()
212 {
213 m_MessageType = EMessageType_Info.WOUNDED;
214 }
215
216 static SCR_AIMessage_Wounded Create(IEntity woundedEntity)
217 {
218 SCR_AIMessage_Wounded m = new SCR_AIMessage_Wounded();
219 m.m_WoundedEntity = woundedEntity;
220 return m;
221 }
222
223 override void SetMessageParameters(SCR_AISendMessageBase node)
224 {
225 super.SetMessageParameters(node);
226
227 SCR_AISendMessageGeneric genericNode = SCR_AISendMessageGeneric.Cast(node);
228
229 genericNode.GetVariableIn(genericNode.PORT_ENTITY, m_WoundedEntity);
230 if (!genericNode.GetVariableIn(genericNode.PORT_VECTOR, m_vPosition))
231 m_vPosition = genericNode.m_vector;
232 }
233};
234
235class SCR_AIMessage_SitRep : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_SitRep)
236{
237 int m_MagazinesCount,m_BandagesCount;
238
239 void SCR_AIMessage_SitRep()
240 {
241 m_MessageType = EMessageType_Info.SIT_REP;
242 }
243};
244
245class SCR_AIMessage_ActionFailed : SCR_AIMessageInfo
246{
247 // The action which we have failed
248 typename m_ActionTypename;
249
250 void SCR_AIMessage_ActionFailed()
251 {
252 m_MessageType = EMessageType_Info.ACTION_FAILED;
253 }
254};
255
256class SCR_AIMessage_HealFailed : SCR_AIMessageInfo // MESSAGE_CLASS(GenerateSendInfoMessage, SCR_AISendInfoMessage_HealFailed)
257{
258 IEntity m_TargetEntity; // VARIABLE(NodePort, TargetEntity)
259
260 void SCR_AIMessage_HealFailed()
261 {
262 m_MessageType = EMessageType_Info.HEAL_FAILED;
263 }
264};
265
266//----------------- EXPAND MESSAGE SUBTYPES - goal type for issuing commands
267
268class SCR_AIMessage_Cancel : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Cancel)
269{
270 void SCR_AIMessage_Cancel()
271 {
272 m_MessageType = EMessageType_Goal.CANCEL;
273 }
274
275 static SCR_AIMessage_Cancel Create(SCR_AIActivityBase relatedActivity)
276 {
277 SCR_AIMessage_Cancel msg = new SCR_AIMessage_Cancel();
278 msg.m_RelatedGroupActivity = relatedActivity;
279
280 return msg;
281 }
282};
283
284class SCR_AIMessage_Attack : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Attack)
285{
286 ref SCR_AITargetInfo m_TargetInfo; // VARIABLE(NodePort, TargetInfo)
287
288 void SCR_AIMessage_Attack()
289 {
290 m_MessageType = EMessageType_Goal.ATTACK;
291 }
292
293 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
294 {
295 super.SetMessageParameters(node,relatedActivity);
296
297 IEntity targetEntity;
298 vector pos;
299 float time;
300
301 node.GetVariableIn(node.PORT_ENTITY, targetEntity);
302 if (!node.GetVariableIn(node.PORT_VECTOR, pos))
303 pos = node.m_vector;
304 node.GetVariableIn(node.PORT_FLOAT, time);
305 m_TargetInfo = new SCR_AITargetInfo();
306 m_TargetInfo.Init(targetEntity, worldPos: pos, timestamp: time);
307 }
308};
309
310class SCR_AIMessage_AttackCluster : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_AttackCluster)
311{
312 SCR_AITargetClusterState m_TargetClusterState; // VARIABLE(NodePort, TargetClusterState)
313 bool m_bAllowInvestigate; // VARIABLE(NodePort, AllowInvestigate)
314
316 {
317 m_MessageType = EMessageType_Goal.ATTACK_CLUSTER;
318 }
319
320 static SCR_AIMessage_AttackCluster Create(SCR_AITargetClusterState s, bool allowInvestigate)
321 {
322 SCR_AIMessage_AttackCluster msg = new SCR_AIMessage_AttackCluster();
323 msg.m_TargetClusterState = s;
324 msg.m_bAllowInvestigate = allowInvestigate;
325 return msg;
326 }
327}
328
329class SCR_AIMessage_AttackClusterDone : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_AttackClusterDone)
330{
333 m_MessageType = EMessageType_Goal.ATTACK_CLUSTER_DONE;
334 }
337 {
339 return msg;
340 }
341}
342
343class SCR_AIMessage_CoverCluster : SCR_AIMessageGoal
344{
346 {
347 m_MessageType = EMessageType_Goal.COVER_CLUSTER;
348 }
349}
350
351class SCR_AIMessage_KeepFormation : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_KeepFormation)
352{
355 m_MessageType = EMessageType_Goal.MOVE_IN_FORMATION;
356 }
357};
358
359class SCR_AIMessage_Move : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Move)
360{
361 IEntity m_FollowEntity; // VARIABLE(NodePort, FollowEntity)
362 vector m_MovePosition; // VARIABLE(NodePort, MovePosition)
363 EMovementType m_eMovementType; // VARIABLE(NodePropertyEnum, m_eMovementType)
364 bool m_bUseVehicles; // VARIABLE(NodePort, UseVehicles, NodeProperty, m_bUseVehicles)
365
366 void SCR_AIMessage_Move()
367 {
368 m_MessageType = EMessageType_Goal.MOVE;
369 }
370
371 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
372 {
373 super.SetMessageParameters(node, relatedActivity);
374 node.GetVariableIn(node.PORT_ENTITY, m_FollowEntity);
375 if (!node.GetVariableIn(node.PORT_VECTOR, m_MovePosition))
376 m_MovePosition = node.m_vector;
377 if (!node.GetVariableIn(node.PORT_BOOL, m_bUseVehicles))
378 m_bUseVehicles = node.m_bool;
379 if (!node.GetVariableIn(node.PORT_PRIORITY_LEVEL,m_fPriorityLevel))
380 m_fPriorityLevel = node.m_fPriorityLevel;
381 }
382
383 static SCR_AIMessage_Move Create(IEntity entity, vector position, EMovementType movementType, bool useVehicles, SCR_AIActivityBase relatedActivity)
384 {
385 SCR_AIMessage_Move msg = new SCR_AIMessage_Move();
386 msg.m_FollowEntity = entity;
387 msg.m_MovePosition = position;
388 msg.m_eMovementType = movementType;
389 msg.m_bUseVehicles = useVehicles;
390 msg.m_RelatedGroupActivity = relatedActivity;
391 return msg;
392 }
393};
394
395class SCR_AIMessage_Follow : SCR_AIMessage_Move // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Follow)
396{
397 float m_fDistance; // VARIABLE(NodePort, Distance)
398
399 void SCR_AIMessage_Follow()
400 {
401 m_MessageType = EMessageType_Goal.FOLLOW;
402 }
403
404 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
405 {
406 super.SetMessageParameters(node, relatedActivity);
407 node.GetVariableIn(node.PORT_ENTITY, m_FollowEntity);
408 node.GetVariableIn(node.PORT_FLOAT, m_fDistance);
409 if (!node.GetVariableIn(node.PORT_BOOL, m_bUseVehicles))
410 m_bUseVehicles = node.m_bool;
411 if (!node.GetVariableIn(node.PORT_PRIORITY_LEVEL,m_fPriorityLevel))
412 m_fPriorityLevel = node.m_fPriorityLevel;
413 }
414};
415
416class SCR_AIMessage_Investigate : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Investigate)
417{
418 IEntity m_ObjectEntity; // VARIABLE(NodePort, ObjectEntity)
419 vector m_vMovePosition; // VARIABLE(NodePort, MovePosition)
420 float m_fRadius; // VARIABLE(NodePort, Radius, NodeProperty, m_fRadius)
421 bool m_bIsDangerous; // VARIABLE(NodePort, IsDangerous, NodeProperty, m_bIsDangerous)
422 EAIUnitType m_eTargetUnitType = EAIUnitType.UnitType_Infantry; // VARIABLE(NodePropertyEnum, m_eTargetUnitType)
423 float m_fDuration = 10; // VARIABLE(NodePort, Duration, NodeProperty, m_fDuration)
424
425 void SCR_AIMessage_Investigate()
426 {
427 m_MessageType = EMessageType_Goal.INVESTIGATE;
428 }
429
430 static SCR_AIMessage_Investigate Create(SCR_AIActivityBase relatedActivity, vector pos, float radius, bool dangerous, EAIUnitType unitType = EAIUnitType.UnitType_Infantry, float duration = 10.0)
431 {
432 SCR_AIMessage_Investigate msg = new SCR_AIMessage_Investigate();
433 msg.m_fRadius = radius;
434 msg.m_vMovePosition = pos;
435 msg.m_bIsDangerous = dangerous;
436 msg.m_eTargetUnitType = unitType;
437 msg.m_fDuration = duration;
438 msg.m_RelatedGroupActivity = relatedActivity;
439 return msg;
440 }
441
442 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
443 {
444 super.SetMessageParameters(node, relatedActivity);
445 node.GetVariableIn(node.PORT_ENTITY, m_ObjectEntity);
446 node.GetVariableIn(node.PORT_VECTOR, m_vMovePosition);
447 if (!node.GetVariableIn(node.PORT_FLOAT, m_fRadius))
448 m_fRadius = 10.0;
449 if (!node.GetVariableIn(node.PORT_BOOL, m_bIsDangerous))
450 m_bIsDangerous = false;
451 if (!node.GetVariableIn(node.PORT_PRIORITY_LEVEL,m_fPriorityLevel))
452 m_fPriorityLevel = node.m_fPriorityLevel;
453 }
454};
455
456class SCR_AIMessage_SeekAndDestroy : SCR_AIMessage_Move // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_SeekAndDestroy)
457{
458 void SCR_AIMessage_SeekAndDestroy()
459 {
460 m_MessageType = EMessageType_Goal.SEEK_DESTROY;
461 }
462};
463
464class SCR_AIMessage_Heal : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Heal)
465{
466 IEntity m_EntityToHeal; // VARIABLE(NodePort, EntityToHeal)
467
468 void SCR_AIMessage_Heal()
469 {
470 m_MessageType = EMessageType_Goal.HEAL;
471 }
472};
473
474class SCR_AIMessage_ProvideAmmo : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_ProvideAmmo)
475{
476 IEntity m_AmmoConsumer; // VARIABLE(NodePort, AmmoConsumerEntity)
477 typename m_MagazineWell; // VARIABLE(NodePort, MagazineWellType)
478
479 void SCR_AIMessage_ProvideAmmo()
480 {
481 m_MessageType = EMessageType_Goal.PROVIDE_AMMO;
482 }
483
484 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
485 {
486 super.SetMessageParameters(node, relatedActivity);
487 node.GetVariableIn(SCR_AISendGoalMessage.PORT_ENTITY, m_AmmoConsumer);
488 node.GetVariableIn(SCR_AISendGoalMessage.PORT_TYPENAME, m_MagazineWell);
489 }
490}
491
492class SCR_AIMessage_PickupInventoryItems : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_PickupInventoryItems)
493{
494 vector m_vPickupPosition; // VARIABLE(NodePort, PickupPosition)
495 typename m_MagazineWellType; // VARIABLE(NodePort, MagazineWellType)
496
498 {
499 m_MessageType = EMessageType_Goal.PICKUP_INVENTORY_ITEMS;
500 }
501
503 {
504 super.SetMessageParameters(node, relatedActivity);
505 node.GetVariableIn(SCR_AISendGoalMessage.PORT_VECTOR, m_vPickupPosition);
506 node.GetVariableIn(SCR_AISendGoalMessage.PORT_TYPENAME, m_MagazineWellType);
507 }
508}
509
510class SCR_AIMessage_Defend : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Defend)
511{
512 vector m_vDefendDirection; // VARIABLE(NodePort, DefendDirection)
513 float m_fDefendAngularRange; // VARIABLE(NodePort, DefendAngularRange, NodeProperty, m_fDefendAngularRange)
514
515 void SCR_AIMessage_Defend()
516 {
517 m_MessageType = EMessageType_Goal.DEFEND;
518 }
519
520 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
521 {
522 super.SetMessageParameters(node, relatedActivity);
523 node.GetVariableIn(node.PORT_ENTITY, m_RelatedWaypoint);
524 }
525
526 static SCR_AIMessage_Defend Create(vector defendDirection, float defendAngularRange, bool waypointRelated,
527 float priorityLevel, AIWaypoint relatedWaypoint, SCR_AIActivityBase relatedActivity)
528 {
529 SCR_AIMessage_Defend msg = new SCR_AIMessage_Defend();
530 msg.m_vDefendDirection = defendDirection;
531 msg.m_fDefendAngularRange = defendAngularRange;
532 msg.m_bIsWaypointRelated = waypointRelated;
533 msg.m_fPriorityLevel = priorityLevel;
534 msg.m_RelatedWaypoint = relatedWaypoint;
535 msg.m_RelatedGroupActivity = relatedActivity;
536 return msg;
537 }
538};
539
540class SCR_AIMessage_Retreat : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Retreat)
541{
542 void SCR_AIMessage_Retreat()
543 {
544 m_MessageType = EMessageType_Goal.RETREAT;
545 }
546};
547
548class SCR_AIMessage_HealWait : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_HealWait)
549{
550 IEntity m_HealProvider; // VARIABLE(NodePort, HealProviderEntity)
551
552 void SCR_AIMessage_HealWait()
553 {
554 m_MessageType = EMessageType_Goal.HEAL_WAIT;
555 }
556
557 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
558 {
559 super.SetMessageParameters(node, relatedActivity);
560 node.GetVariableIn(node.PORT_ENTITY, m_HealProvider);
561 }
562};
563
564class SCR_AIMessage_PerformAction : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_PerformAction)
565{
566 SCR_AISmartActionComponent m_SmartActionComponent; // VARIABLE(NodePort, SmartAction)
567 IEntity m_SmartActionEntity; // VARIABLE(NodePort, SmartActionEntity)
568 string m_SmartActionTag; // VARIABLE(NodePort, SmartActionTag, NodeProperty, m_sSmartActionTag)
569
570 void SCR_AIMessage_PerformAction()
571 {
572 m_MessageType = EMessageType_Goal.PERFORM_ACTION;
573 }
574
575 override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
576 {
577 super.SetMessageParameters(node, relatedActivity);
578 node.GetVariableIn(node.PORT_ENTITY, m_SmartActionEntity);
579 node.GetVariableIn(node.PORT_STRING, m_SmartActionTag);
580 }
581
582 static SCR_AIMessage_PerformAction Create(IEntity sAEntity, string sATag, SCR_AISmartActionComponent sAComponent, bool waypointRelated,
583 float priorityLevel, AIWaypoint relatedWaypoint, SCR_AIActivityBase relatedActivity)
584 {
585 SCR_AIMessage_PerformAction msg = new SCR_AIMessage_PerformAction();
586 msg.m_SmartActionEntity = sAEntity;
587 msg.m_SmartActionTag = sATag;
588 msg.m_SmartActionComponent = sAComponent;
589 msg.m_bIsWaypointRelated = waypointRelated;
590 msg.m_fPriorityLevel = priorityLevel;
591 msg.m_RelatedWaypoint = relatedWaypoint;
592 msg.m_RelatedGroupActivity = relatedActivity;
593 return msg;
594 }
595};
596
597class SCR_AIMessage_OpenNavlinkDoor : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_OpenNavlinkDoor)
598{
599 IEntity m_DoorEntity; // VARIABLE(NodePort, DoorEntity)
600
601 void SCR_AIMessage_OpenNavlinkDoor()
602 {
603 m_MessageType = EMessageType_Goal.OPEN_NAVLINK_DOOR;
604 }
605};
606
607class SCR_AIMessage_Vehicle : SCR_AIMessageGoal // MESSAGE_CLASS()
608{
609 IEntity m_Vehicle; // VARIABLE(NodePort, VehicleEntity)
610 ref SCR_AIBoardingParameters m_BoardingParams; // VARIABLE(NodePort, BoardingParams)
611};
612
613class SCR_AIMessage_GetIn : SCR_AIMessage_Vehicle // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_GetIn)
614{
615 EAICompartmentType m_eRoleInVehicle; // VARIABLE(NodePort, RoleInVehicle, NodePropertyEnum, m_eRoleInVehicle)
616 BaseCompartmentSlot m_CompartmentSlot; // VARIABLE(NodePort, CompartmentSlot)
617
618 void SCR_AIMessage_GetIn()
619 {
620 m_MessageType = EMessageType_Goal.GET_IN_VEHICLE;
621 }
622
623 static SCR_AIMessage_GetIn Create(IEntity vehicle, SCR_AIBoardingParameters boardingParams, EAICompartmentType roleInVehicle, bool waypointRelated, float priorityLevel, AIWaypoint relatedWaypoint,
624 SCR_AIActivityBase relatedActivity, BaseCompartmentSlot compartmentSlot)
625 {
626 SCR_AIMessage_GetIn msg = new SCR_AIMessage_GetIn();
627 msg.m_Vehicle = vehicle;
628 msg.m_BoardingParams = boardingParams;
629 msg.m_eRoleInVehicle = roleInVehicle;
630 msg.m_bIsWaypointRelated = waypointRelated;
631 msg.m_fPriorityLevel = priorityLevel;
632 msg.m_RelatedWaypoint = relatedWaypoint;
633 msg.m_RelatedGroupActivity = relatedActivity;
634 msg.m_CompartmentSlot = compartmentSlot;
635 return msg;
636 }
637};
638
639class SCR_AIMessage_GetOut : SCR_AIMessage_Vehicle // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_GetOut)
640{
641 float m_fDelay_s;
642
643 void SCR_AIMessage_GetOut()
644 {
645 m_MessageType = EMessageType_Goal.GET_OUT_VEHICLE;
646 }
647
648 static SCR_AIMessage_GetOut Create(IEntity vehicle, SCR_AIBoardingParameters boardingParams, SCR_AIActivityBase relatedActivity, float delay_s = 0)
649 {
650 SCR_AIMessage_GetOut msg = new SCR_AIMessage_GetOut();
651 msg.m_Vehicle = vehicle;
652 msg.m_RelatedGroupActivity = relatedActivity;
653 msg.m_BoardingParams = boardingParams;
654 msg.m_fDelay_s = delay_s;
655 return msg;
656 }
657};
658
659class SCR_AIMessage_Flee : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Flee)
660{
661 void SCR_AIMessage_Flee()
662 {
663 m_MessageType = EMessageType_Goal.FLEE;
664 }
665};
666
667class SCR_AIMessage_ThrowGrenadeTo : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_ThrowGrenadeTo)
668{
669 vector m_vTargetPosition; // VARIABLE(NodePort, TargetPosition)
670 EWeaponType e_WeaponType; // VARIABLE(NodePort, WeaponType)
671 float m_fDelay; // VARIABLE(NodePort, Delay)
672
673 void SCR_AIMessage_ThrowGrenadeTo()
674 {
675 m_MessageType = EMessageType_Goal.THROW_GRENADE_TO;
676 }
677
678 static SCR_AIMessage_ThrowGrenadeTo Create(vector position, EWeaponType weaponType, float delay)
679 {
680 SCR_AIMessage_ThrowGrenadeTo msg = new SCR_AIMessage_ThrowGrenadeTo();
681 msg.m_vTargetPosition = position;
682 msg.e_WeaponType = weaponType;
683 msg.m_fDelay = delay;
684 return msg;
685 }
686};
687
688class SCR_AIMessage_FireIllumFlareAt : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_FireIllumFlareAt)
689{
690 vector m_vTargetPosition; // VARIABLE(NodePort, TargetPosition)
691
692 void SCR_AIMessage_FireIllumFlareAt()
693 {
694 m_MessageType = EMessageType_Goal.FIRE_ILLUM_FLARE;
695 }
696
697 static SCR_AIMessage_FireIllumFlareAt Create(vector position)
698 {
699 SCR_AIMessage_FireIllumFlareAt msg = new SCR_AIMessage_FireIllumFlareAt();
700 msg.m_vTargetPosition = position;
701 return msg;
702 }
703};
704
705class SCR_AIMessage_Suppress : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Suppress)
706{
707 ref SCR_AISuppressionVolumeBase m_Volume; // VARIABLE(NodePort, SuppressionVolume)
708 float m_fDuration_s; // VARIABLE(NodePort, Duration_s)
709 float m_fFireRate; // VARIABLE(NodePort, FireRate)
710
711 void SCR_AIMessage_Suppress()
712 {
713 m_MessageType = EMessageType_Goal.SUPPRESS;
714 }
715
716 static SCR_AIMessage_Suppress Create(SCR_AISuppressionVolumeBase volume, float duration, float fireRate = 1)
717 {
718 SCR_AIMessage_Suppress msg = new SCR_AIMessage_Suppress();
719 msg.m_Volume = volume;
720 msg.m_fDuration_s = duration;
721 msg.m_fFireRate = fireRate;
722
723 return msg;
724 }
725};
726
727class SCR_AIMessage_Animate : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_Animate)
728{
729 IEntity m_RootEntity; // VARIABLE(NodePort, RootEntity)
730 ref SCR_AIAnimationScript m_AgentScript; // VARIABLE(NodePort, AgentScript)
731 ref ScriptInvokerBase<SCR_AIOnAnimationBehaviorAction> m_RelatedInvoker; // VARIABLE(NodePort, RelatedInvoker)
732
733 void SCR_AIMessage_Animate()
734 {
735 m_MessageType = EMessageType_Goal.ANIMATE;
736 }
737
738 static SCR_AIMessage_Animate Create(notnull IEntity entity, SCR_AIAnimationScript script, SCR_AIActivityBase relatedActivity, ScriptInvokerBase<SCR_AIOnAnimationBehaviorAction> relatedInvoker)
739 {
740 SCR_AIMessage_Animate msg = new SCR_AIMessage_Animate();
741 msg.m_RelatedGroupActivity = relatedActivity;
742 msg.m_RootEntity = entity;
743 msg.m_AgentScript = script;
744 msg.m_RelatedInvoker = relatedInvoker;
745
746 return msg;
747 }
748}
749
750class SCR_AIMessage_ArtillerySupport : SCR_AIMessageGoal // MESSAGE_CLASS(GenerateSendGoalMessage, SCR_AISendGoalMessage_ArtillerySupport)
751{
752 IEntity m_ArtilleryEntity; // VARIABLE(NodePort, ArtilleryEntity)
753 vector m_vTargetPos; // VARIABLE(NodePort, TargetPos)
754 SCR_EAIArtilleryAmmoType m_eAmmoType; // VARIABLE(NodePort, AmmoType, NodePropertyEnum, m_eAmmoType)
755
757 {
758 m_MessageType = EMessageType_Goal.ARTILLERY_SUPPORT;
759 }
760};
@ NO_AMMO
Definition SCR_AIAction.c:7
void SCR_AIActivityBase(SCR_AIGroupUtilityComponent utility, AIWaypoint relatedWaypoint)
vector m_vTargetPos
SCR_AIMessage_ProvideAmmo m_vPickupPosition
void SCR_AIMessage_PickupInventoryItems()
SCR_AIMessage_AttackCluster SCR_AIMessageGoal SCR_AIMessage_AttackClusterDone()
SCR_AIMessage_Move SCR_AIMessage_KeepFormation
void SCR_AIMessage_ArtillerySupport()
override void SetMessageParameters(SCR_AISendGoalMessage node, SCR_AIActivityBase relatedActivity)
EMessageType_Goal
@ COVER_CLUSTER
@ OPEN_NAVLINK_DOOR
@ ARTILLERY_SUPPORT
@ FIRE_ILLUM_FLARE
@ PERFORM_ACTION
@ ANIMATE
@ PICKUP_INVENTORY_ITEMS
@ ATTACK_CLUSTER_DONE
@ GET_IN_VEHICLE
@ MOVE_IN_FORMATION
@ THROW_GRENADE_TO
@ ATTACK_CLUSTER
@ FLEE
@ ATTACK
@ UNGROUP
@ GET_OUT_VEHICLE
@ SEEK_DESTROY
@ SIT_REP
@ HEAL
@ DEFEND
@ RETREAT
@ INVESTIGATE
@ PROVIDE_AMMO
@ CANCEL
@ SUPPRESS
@ FOLLOW
@ HEAL_WAIT
SCR_AIMessage_Animate m_ArtilleryEntity
m_MagazineWellType
EMessageType_Info
@ REQ_AMMO
@ WOUNDED
@ REQ_RETREAT
@ UNDER_FIRE
@ HEAL_FAILED
@ FOUND_CORPSE
@ ACTION_FAILED
void SCR_AIMessage_AttackCluster()
void SCR_AIMessage_CoverCluster()
SCR_EAIArtilleryAmmoType m_eAmmoType
void SCR_AITargetClusterState(SCR_AIGroupTargetCluster cluster)
EAICompartmentType
vector position
Base class for all messages related to AI.
Definition AIMessage.c:14
Base class for nodes sending message.
Class for generic nodes with extra input ports which send messages.
EAIUnitType
Definition EAIUnitType.c:13
EMovementType
@ NONE
When Shape is created and not initialized yet.
Definition ShapeType.c:15
SCR_FieldOfViewSettings Attribute
EWeaponType
Definition EWeaponType.c:13