WSF
WsfWMAIEngagementMod.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// The use, dissemination or disclosure of data in this file is subject to
7// limitation or restriction. See accompanying README and LICENSE for details.
8// ****************************************************************************
9/*******************************************************************************
10*
11* File: WsfWMAIEngagementMod.hpp
12*
13* Classification: UNCLASSIFIED
14*
15* Details:
16*
17* Contract Number:
18* Contractor Name: Radiance Technologies
19* Address: 350 Wynn Drive
20* Huntsville, AL 35805
21*
22* Abstract:
23*
24*******************************************************************************/
25
26#ifndef WSF_WM_AI_ENGAGEMENT_MOD_HPP
27#define WSF_WM_AI_ENGAGEMENT_MOD_HPP
28
29#include <map>
30
31#include <memory>
32#include <stack>
33
34#include <WsfESM_Sensor.hpp>
35#include <UtInput.hpp>
36#include <WsfSimulation.hpp>
37#include <WsfBehaviorTree.hpp>
38#include <WsfTrackId.hpp>
39#include <WsfStringId.hpp>
40
41#include <WsfBMUtils.hpp>
42#include <WsfInterceptCalc.hpp>
43
44#include <iadsLib/weaponsManagerEngageInterface.hpp>
45#include <iadsLib/assignmentContainers.hpp>
46#include <iadsLib/assessmentRecord.hpp>
47
49class WsfSimulation;
50
51namespace il
52{
53class WeaponsManagerEngagementInterface;
54}
55
56class WsfWMAIEngagementMod : public il::WeaponsManagerEngagementInterface
57{
58 public:
59 WsfWMAIEngagementMod(const WsfScenario& aScenario, WsfBMWeaponsManager* wm_component);
61
62 bool Initialize(const double sim_time);
63 bool Initialize2(const double sim_time);
64 bool ProcessInput(UtInput& aInput);
65
66 void Run(const double sim_time_s) override;
67
68 protected:
69
71 {
72 public:
82
83 virtual void Perform(const double sim_time_s);
84 virtual bool isFinished(const double sim_time_s);
85 virtual BehaviorType getType() const = 0;
86 const il::idRecord getLocalTrackId() const { return m_local_track_id; }
87
88 static std::string getBehaviorTypeString(const BehaviorType type);
89 static BehaviorType getBehaviorTypeFromString(const std::string type);
90 protected:
91 Behavior(WsfWMAIEngagementMod* wm_em, il::idRecord local_track_id);
93 il::idRecord m_local_track_id;
95
96 private:
97 Behavior(const Behavior& other); // = delete;
98 };
99
100 class Beam : public Behavior
101 {
102 public:
103 Beam(const il::idRecord& local_track_id, WsfWMAIEngagementMod* wm_em, const double sim_time_s);
104 void Perform(const double sim_time_s) override;
105 bool isFinished(const double sim_time_s) override;
106 BehaviorType getType() const override { return BEAM; }
107 void setLocalTrackId(const il::idRecord& local_track_id) { m_local_track_id = local_track_id; }
108 bool BeamTimeElapsed(const double sim_time_s) const { return sim_time_s >= m_end_beam_s; }
109 private:
110 double m_start_beam_s;
111 double m_end_beam_s;
112 };
113
114 class Drag : public Behavior
115 {
116 public:
117 Drag(const il::idRecord& local_track, WsfWMAIEngagementMod* wm_em);
118 void Perform(const double sim_time_s) override;
119 bool isFinished(const double sim_time_s) override;
120 BehaviorType getType() const override { return DRAG; }
121 void setLocalTrackId(const il::idRecord& local_track_id) { m_local_track_id = local_track_id; }
122 };
123
124 class Intercept : public Behavior
125 {
126 public:
127 Intercept(const il::evaluationAssignment& assignment, WsfWMAIEngagementMod* wm_em);
128 void Perform(const double sim_time_s) override;
129 bool isFinished(const double sim_time_s) override;
130 BehaviorType getType() const override { return INTERCEPT; }
131
132 const il::idRecord getAssignedId() const { return m_assigned_id; }
133 bool hasGeneratedAction() const { return m_has_generated_action; }
134 void setHasGeneratedAction() { m_has_generated_action = true; }
135
136 private:
137 il::idRecord m_assigned_id;
138 bool m_has_generated_action;
139 };
140
141 class Pursue : public Behavior
142 {
143 public:
144 Pursue(const il::evaluationAssignment& assignment, const bool generated_action, WsfWMAIEngagementMod* wm_em);
145 void Perform(const double sim_time_s) override;
146 bool isFinished(const double sim_time_s) override;
147 BehaviorType getType() const override { return PURSUE; }
148
149 const il::idRecord getAssignedId() const { return m_assigned_id; }
150 bool hasGeneratedAction() const { return m_has_generated_action; }
151 void setHasGeneratedAction() { m_has_generated_action = true; }
152
153 private:
154 il::idRecord m_assigned_id;
155 bool m_has_generated_action;
156 };
157
158 class TakeAction : public Behavior
159 {
160 public:
161 TakeAction(const il::idRecord& assignmentLocalTrackId, const il::idRecord& assignmentAssignedId, const il::eTakeAction& actionType, const double simTime, const double actionDuration, WsfWMAIEngagementMod* wm_em);
162 void Perform(const double sim_time_s) override;
163 bool isFinished(const double sim_time_s) override;
164 BehaviorType getType() const override { return TAKEACTION; }
165
166 private:
167 il::idRecord m_assignment_local_track_id;
168 il::idRecord m_assignment_assigned_id;
169 il::eTakeAction m_action_type;
170 double m_action_duration_s;
171 double m_action_complete_time_s;
172 TakeAction(const TakeAction& other); // = delete;
173 };
174
178 using tScriptInterceptCache = std::map <il::idRecord, std::shared_ptr<WsfInterceptCalculator>>;
180 std::shared_ptr<WsfInterceptCalculator> GetScriptCalculator(const il::evaluationAssignment& assignment);
181
182 virtual void RunDefaultEngagement(const double sim_time_s);
183 void AddBehaviorsToStack(const double sim_time_s);
184
185 virtual il::assessmentRecord AssessEngagement(const double sim_time_s, il::evaluationAssignment& assignment, const std::shared_ptr<il::weaponRecord> weapon, const double delay_time_s = 0);
186
187 virtual bool IsEngagementComplete(const il::evaluationAssignment& assignment, bool& was_successful) const;
188 virtual bool AssignmentHasValidTrack(const il::evaluationAssignment& assignment) const;
189 virtual bool TimeForSecondSalvo(const il::evaluationAssignment& assignment, WsfWeapon* weapon, const double sim_time_s) const;
190
191 private:
192 std::stack<std::shared_ptr<Behavior>> m_behavior_stack;
193 void Push(std::shared_ptr<Behavior> behavior);
194 std::shared_ptr<Behavior> Top();
195 void Pop();
196 bool Empty();
197
198 WsfTrackList RWRDetectedThreatList() const;
199 int RWRDetectedThreatCount() const;
200 WsfTrackList RWRDetectedThreatsInResponseRange(const double sim_time_s);
201 int RWRDetectedThreatCountInResponseRange(const double sim_time_s);
202 WsfStringId RWRNameId() const;
203
204 WsfLocalTrack* RWRHighPriorityThreat(const double sim_time_s);
205 bool RWRResponse() const;
206 double LastLockTime() const;
207 WsfLocalTrack* FindCorrelatedTrack(const WsfTrackId& raw_track_id) const;
208
209 void LogDebugInfo(const double sim_time_s);
210 void AssessResponse(il::moeLoggingInterface& aMOELogger, const double sim_time_s);
211 bool AssessBeamResponse(il::moeLoggingInterface& aMOELogger, const double sim_time_s, const il::idRecord& attacker_unit_id, WsfSpatialDomain domain);
212 bool AttackerEngagedOrBelievedDead(const il::evaluationAssignment& attacker) const;
213 bool AttackerEngaged(const il::evaluationAssignment& attacker) const;
214 bool AttackerEngaged(const il::idRecord& attacker_local_track_id) const;
215 bool AddEvadeBehavior(il::moeLoggingInterface& aMOELogger, const double sim_time_s);
216 bool AddEvasionBehavior(const double sim_time_s);
217 double getRWRResponseBeamDuration() const;
218 void BeamResponse(const double sim_time_s, const il::idRecord& attacker_unit_id);
219 bool AddTakeActionBehavior(const double sim_time_s);
220 double getDistanceToTrack(const il::idRecord& local_track_id, const double sim_time_s);
221 double getGroundRangeToTrack(const il::idRecord& local_track_id, const double sim_time_s);
222 void getGroundRangeAndGroundRangeDA(const il::trackRecord* track, const double sim_time_s, double& ground_range, double& ground_range_DA);
223
224 void Egress(const double sim_time_s);
225 void Engage(const double sim_time_s, const il::evaluationAssignment& assignment);
226
227 WsfGeoPoint setMoveInDirection(const vm::Vector3<double> velocity, const double sim_time_s, const double move_time_s);
228
229 bool InsideWEZRange(double rAero, double rMax1, double rMax2, double rMin, double range);
230 bool AssessAction(const double sim_time_s, const il::idRecord& assignment, il::eTakeAction& actionType, double& actionDuration);
231 void CompleteAction();
232 void PerformSelfDefense();
233 void CANTCOAllAssignments(const std::string& reason);
234
235 bool EmployingActionTechniques();
236 bool isParked();
237 bool TTRLock();
238 bool TTRLock(const il::idRecord& attacker_unit_id);
239 bool Evading();
240 bool TakingAction();
241 bool m_is_scrambled;
242
243 il::idRecord m_current_assignment_local_track_id;
244 il::idRecord m_current_assignment_assigned_id;
245};
246
247#endif
double simTime
Definition WsfScriptTrackClass.cpp:1880
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfTrackListT< WsfTrack > WsfTrackList
Definition WsfTrackList.hpp:88
WsfSpatialDomain
A collection of enumerations and type definitions that are used across a number of components.
Definition WsfTypes.hpp:32
Definition WsfBMWeaponsManager.hpp:50
Definition WsfBehaviorTree.hpp:31
Definition WsfGeoPoint.hpp:29
Definition WsfLocalTrack.hpp:32
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfTrackId.hpp:33
void Perform(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:322
void setLocalTrackId(const il::idRecord &local_track_id)
Definition WsfWMAIEngagementMod.hpp:107
BehaviorType getType() const override
Definition WsfWMAIEngagementMod.hpp:106
bool BeamTimeElapsed(const double sim_time_s) const
Definition WsfWMAIEngagementMod.hpp:108
Beam(const il::idRecord &local_track_id, WsfWMAIEngagementMod *wm_em, const double sim_time_s)
Definition WsfWMAIEngagementMod.cpp:312
bool isFinished(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:372
static const std::string UnknownString
Definition WsfWMAIEngagementMod.hpp:94
static std::string getBehaviorTypeString(const BehaviorType type)
Definition WsfWMAIEngagementMod.cpp:74
static const std::string TakeActionString
Definition WsfWMAIEngagementMod.hpp:94
WsfWMAIEngagementMod * m_wm_em
Definition WsfWMAIEngagementMod.hpp:92
BehaviorType
Definition WsfWMAIEngagementMod.hpp:74
@ TAKEACTION
Definition WsfWMAIEngagementMod.hpp:78
@ INTERCEPT
Definition WsfWMAIEngagementMod.hpp:79
@ DRAG
Definition WsfWMAIEngagementMod.hpp:77
@ PURSUE
Definition WsfWMAIEngagementMod.hpp:80
@ BEAM
Definition WsfWMAIEngagementMod.hpp:76
@ UNKNOWN
Definition WsfWMAIEngagementMod.hpp:75
virtual BehaviorType getType() const =0
static const std::string BeamString
Definition WsfWMAIEngagementMod.hpp:94
const il::idRecord getLocalTrackId() const
Definition WsfWMAIEngagementMod.hpp:86
static const std::string DragString
Definition WsfWMAIEngagementMod.hpp:94
static const std::string InterceptString
Definition WsfWMAIEngagementMod.hpp:94
static BehaviorType getBehaviorTypeFromString(const std::string type)
Definition WsfWMAIEngagementMod.cpp:93
il::idRecord m_local_track_id
Definition WsfWMAIEngagementMod.hpp:93
virtual bool isFinished(const double sim_time_s)
Definition WsfWMAIEngagementMod.cpp:68
static const std::string PursueString
Definition WsfWMAIEngagementMod.hpp:94
virtual void Perform(const double sim_time_s)
Definition WsfWMAIEngagementMod.cpp:63
Behavior(WsfWMAIEngagementMod *wm_em, il::idRecord local_track_id)
Definition WsfWMAIEngagementMod.cpp:57
BehaviorType getType() const override
Definition WsfWMAIEngagementMod.hpp:120
void Perform(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:385
Drag(const il::idRecord &local_track, WsfWMAIEngagementMod *wm_em)
Definition WsfWMAIEngagementMod.cpp:380
bool isFinished(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:422
void setLocalTrackId(const il::idRecord &local_track_id)
Definition WsfWMAIEngagementMod.hpp:121
const il::idRecord getAssignedId() const
Definition WsfWMAIEngagementMod.hpp:132
BehaviorType getType() const override
Definition WsfWMAIEngagementMod.hpp:130
Intercept(const il::evaluationAssignment &assignment, WsfWMAIEngagementMod *wm_em)
Definition WsfWMAIEngagementMod.cpp:118
bool hasGeneratedAction() const
Definition WsfWMAIEngagementMod.hpp:133
void setHasGeneratedAction()
Definition WsfWMAIEngagementMod.hpp:134
bool isFinished(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:157
void Perform(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:125
void setHasGeneratedAction()
Definition WsfWMAIEngagementMod.hpp:151
bool isFinished(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:232
bool hasGeneratedAction() const
Definition WsfWMAIEngagementMod.hpp:150
BehaviorType getType() const override
Definition WsfWMAIEngagementMod.hpp:147
Pursue(const il::evaluationAssignment &assignment, const bool generated_action, WsfWMAIEngagementMod *wm_em)
Definition WsfWMAIEngagementMod.cpp:190
void Perform(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:197
const il::idRecord getAssignedId() const
Definition WsfWMAIEngagementMod.hpp:149
Definition WsfWMAIEngagementMod.hpp:159
BehaviorType getType() const override
Definition WsfWMAIEngagementMod.hpp:164
TakeAction(const il::idRecord &assignmentLocalTrackId, const il::idRecord &assignmentAssignedId, const il::eTakeAction &actionType, const double simTime, const double actionDuration, WsfWMAIEngagementMod *wm_em)
Definition WsfWMAIEngagementMod.cpp:247
void Perform(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:260
bool isFinished(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:307
tScriptInterceptCache m_script_calculators
Definition WsfWMAIEngagementMod.hpp:179
virtual bool TimeForSecondSalvo(const il::evaluationAssignment &assignment, WsfWeapon *weapon, const double sim_time_s) const
Definition WsfWMAIEngagementMod.cpp:1851
void Run(const double sim_time_s) override
Definition WsfWMAIEngagementMod.cpp:529
std::map< il::idRecord, std::shared_ptr< WsfInterceptCalculator > > tScriptInterceptCache
Definition WsfWMAIEngagementMod.hpp:178
WsfBehaviorTree m_behavior_tree
Definition WsfWMAIEngagementMod.hpp:176
virtual il::assessmentRecord AssessEngagement(const double sim_time_s, il::evaluationAssignment &assignment, const std::shared_ptr< il::weaponRecord > weapon, const double delay_time_s=0)
Definition WsfWMAIEngagementMod.cpp:914
virtual bool IsEngagementComplete(const il::evaluationAssignment &assignment, bool &was_successful) const
Definition WsfWMAIEngagementMod.cpp:1777
WsfBMWeaponsManager * m_wm_component
Definition WsfWMAIEngagementMod.hpp:175
bool m_has_behavior_tree
Definition WsfWMAIEngagementMod.hpp:177
bool Initialize2(const double sim_time)
Definition WsfWMAIEngagementMod.cpp:480
virtual bool AssignmentHasValidTrack(const il::evaluationAssignment &assignment) const
Definition WsfWMAIEngagementMod.cpp:1830
void AddBehaviorsToStack(const double sim_time_s)
Definition WsfWMAIEngagementMod.cpp:563
bool Initialize(const double sim_time)
Definition WsfWMAIEngagementMod.cpp:472
virtual void RunDefaultEngagement(const double sim_time_s)
Definition WsfWMAIEngagementMod.cpp:541
std::shared_ptr< WsfInterceptCalculator > GetScriptCalculator(const il::evaluationAssignment &assignment)
Definition WsfWMAIEngagementMod.cpp:1757
WsfWMAIEngagementMod(const WsfScenario &aScenario, WsfBMWeaponsManager *wm_component)
Definition WsfWMAIEngagementMod.cpp:458
bool ProcessInput(UtInput &aInput)
Definition WsfWMAIEngagementMod.cpp:495
Definition WsfWeapon.hpp:63
Definition WsfWeaponsManagerAI.hpp:35
Definition WsfAssetManager.hpp:34
Copyrights Multiple, All Rights Reserved