14 void PerformReaction(notnull SCR_AIUtilityComponent utility,
BaseTarget prevTarget,
BaseTarget newTarget);
27 IEntity targetEntity = baseTarget.GetTargetEntity();
29 utility.m_LookAction.LookAt(targetEntity,
SCR_AILookAction.PRIO_UNKNOWN_TARGET, 2.0);
45 if (utility.m_AIInfo.HasUnitState(EUnitState.PILOT))
49 if (utility.m_AIInfo.HasUnitState(EUnitState.IN_TURRET))
51 CompartmentAccessComponent compAcc = CompartmentAccessComponent.Cast(utility.m_OwnerEntity.FindComponent(CompartmentAccessComponent));
55 IEntity vehicle = compAcc.GetVehicleIn(utility.m_OwnerEntity);
60 if (!vehicleUsageComp)
64 utility.AddAction(
new SCR_AIGetOutVehicle(utility, null, vehicle, priority: SCR_AIActionBase.PRIORITY_BEHAVIOR_GET_OUT_VEHICLE_HIGH_PRIORITY));
68 utility.AddAction(behavior);
80 override void PerformReaction(notnull SCR_AIUtilityComponent utility,
BaseTarget prevTarget,
BaseTarget newTarget)
83 AddDebugMessage(utility,
string.Format(
"Prev Target: %1, New Target: %2", prevTarget, newTarget));
88 ReportPreviousTarget(utility, prevTarget, newTarget);
91 utility.SetStateAllActionsOfType(SCR_AIAttackBehavior,
EAIActionState.COMPLETED,
true);
95 utility.SetStateAllActionsOfType(SCR_AIRetreatFromTargetBehavior,
EAIActionState.COMPLETED,
true);
96 CreateAttackActionForTarget(utility, newTarget, prevTarget);
98 IEntity targetEntity = newTarget.GetTargetEntity();
100 utility.m_LookAction.LookAt(targetEntity, SCR_AILookAction.PRIO_ENEMY_TARGET);
105 protected void CreateAttackActionForTarget(notnull SCR_AIUtilityComponent utility, notnull BaseTarget target, BaseTarget prevTarget)
108 AddDebugMessage(utility,
"CreateAttackActionForTarget()");
111 IEntity targetEntity = target.GetTargetEntity();
116 auto behavior =
new SCR_AIAttackBehavior(utility, null, target, prevTarget);
119 utility.AddAction(behavior);
129 protected void ReportPreviousTarget(notnull SCR_AIUtilityComponent utility, notnull BaseTarget prevTarget, BaseTarget newTarget)
132 AddDebugMessage(utility,
"ReportPreviousTarget()");
135 IEntity targetEntity = prevTarget.GetTargetEntity();
137 DamageManagerComponent damageMgr = prevTarget.GetDamageManagerComponent();
142 AddDebugMessage(utility,
" Target is now friendly");
145 else if (!targetEntity)
148 AddDebugMessage(utility,
" Target entity is null, not reporting");
151 else if (prevTarget.IsDisarmed() || (damageMgr && damageMgr.IsDestroyed()))
155 AddDebugMessage(utility,
" Target is destroyed or disarmed");
159 if (!utility.m_CommsHandler.CanBypass())
162 utility.m_CommsHandler.AddRequest(rq);
165 else if (!newTarget &&
166 (prevTarget.GetTimeSinceSeen() > SCR_AICombatComponent.TARGET_MAX_LAST_SEEN) &&
167 (prevTarget.GetUnitType() & utility.m_CombatComponent.GetUnitTypesCanAttack() != 0))
171 AddDebugMessage(utility,
string.Format(
" Target is lost, time since seen: %1", prevTarget.GetTimeSinceSeen()));
175 if (!utility.m_CommsHandler.CanBypass())
178 utility.m_CommsHandler.AddRequest(rq);
184 protected void AddDebugMessage(notnull SCR_AIUtilityComponent utility,
string str,
LogLevel logLevel =
LogLevel.NORMAL)
186 SCR_AIInfoBaseComponent infoComp = utility.m_AIInfo;
187 infoComp.AddDebugMessage(
"SCR_AITargetReaction_SelectedTargetChanged: " + str, msgType:
EAIDebugMsgType.COMBAT, logLevel);
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
void SCR_AITalkRequest(ECommunicationType type, IEntity entity, vector pos, int enumSignal, bool transmitIfNoReceivers, bool transmitIfPassenger, SCR_EAITalkRequestPreset preset)
EAIVehicleType
Vehicle type from point view of AI usage.
enum EVehicleType IEntity
proto external Managed FindComponent(typename typeName)
This reaction is called every time selected target changes from anything to anything,...
EAIVehicleType GetVehicleType()
LogLevel
Enum with severity of the logging message.