WSF
WsfSA_PerceivedItem.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// Copyright 2022 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFSA_PERCEIVEDITEM_HPP
13#define WSFSA_PERCEIVEDITEM_HPP
14
15#include "wsf_air_combat_export.h"
16
17#include "UtReferenceTracked.hpp"
18#include "UtScriptAccessible.hpp"
19#include "UtScriptClass.hpp"
20#include "UtScriptClassDefine.hpp"
21#include "UtVec3.hpp"
23
24class WsfLocalTrack;
25class WsfPlatform;
26class WsfProcessor;
27class WsfSimulation;
28class WsfSensor;
29class WsfWeapon;
30
37class WSF_AIR_COMBAT_EXPORT WsfSA_PerceivedItem : public UtScriptAccessible, public UtReferenceTracked
38{
39public:
41 {
45 BOGIE = 3,
47 };
48
50 {
51 ENTITY = 0,
53 };
54
56 {
60 };
61
62 // Static Functions
65
67 : UtScriptAccessible(){};
68
69 WsfSA_PerceivedItem(const WsfPlatform* aOwningPlatform)
70 : UtScriptAccessible()
71 , mOwningPlatform(aOwningPlatform){};
72
74
75 WsfSA_PerceivedItem& operator=(const WsfSA_PerceivedItem& aRhs);
76
77 // NOTE: The operator== and operator!= are intentionally omitted.
78 // To compare two entity perceptions, compare using IsSame() instead.
79 bool operator==(const WsfSA_PerceivedItem& aRhs) = delete;
80 bool operator!=(const WsfSA_PerceivedItem& aRhs) = delete;
81
82 // This determines if the specified item is the same as this item
83 virtual bool IsSame(const WsfSA_PerceivedItem* aOther) const = 0;
84
85 const char* GetScriptClassName() const override { return "WsfSA_PerceivedItem"; }
86
87 // Calculates the range and returns it. Also, it internally sets mSelectionScore to the range.
88 double CalcRangeForPlatform(const WsfPlatform* aPlatform);
89
91 double AngleOffHeadingFromOwningPlatform_deg();
92
93 const WsfPlatform* OwningPlatform() const { return mOwningPlatform; }
94 void OwningPlatform(const WsfPlatform* aPlatform) { mOwningPlatform = aPlatform; }
95
96 bool PerceptionIsMalformed() const { return mMalformedPerception; }
97 void SetMalformedCondition() { mMalformedPerception = true; }
98
99 static bool CompareScoreLowGood(const WsfSA_PerceivedItem* aFirstItem, const WsfSA_PerceivedItem* aSecondItem);
100 static bool CompareScoreHighGood(const WsfSA_PerceivedItem* aFirstItem, const WsfSA_PerceivedItem* aSecondItem);
101
102 static bool CompareThreatLevelHighGood(const WsfSA_PerceivedItem* aFirstItem, const WsfSA_PerceivedItem* aSecondItem);
103 static bool CompareTargetValueHighGood(const WsfSA_PerceivedItem* aFirstItem, const WsfSA_PerceivedItem* aSecondItem);
104
105 virtual ItemType GetItemType() const = 0;
106
107 virtual double GetLat_deg() const = 0;
108 virtual void SetLat_deg(double aLat_deg) = 0;
109
110 virtual double GetLon_deg() const = 0;
111 virtual void SetLon_deg(double aLon_deg) = 0;
112
113 virtual double GetAltitude_ft() const = 0;
114 virtual void SetAltitude_ft(double aAltitude_ft) = 0;
115
116 virtual double GetBearing_deg() const { return mBearing_deg; }
117 virtual void SetBearing_deg(double aBearing_deg) { mBearing_deg = aBearing_deg; }
118
119 virtual double GetSpeed_kts() const = 0;
120 virtual void SetSpeed_kts(double aSpeed_kts) = 0;
121
122 virtual double GetHeading_deg() const = 0;
123 virtual void SetHeading_deg(double aHeading_deg) = 0;
124
125 virtual double GetThreatLevel() const { return mThreatLevel; }
126 virtual void SetThreatLevel(double aThreatLevel) { mThreatLevel = UtMath::Limit(aThreatLevel, 0.0, 1.0); }
127
128 virtual double GetTargetValue() const { return mTargetValue; }
129 virtual void SetTargetValue(double aTargetValue) { mTargetValue = UtMath::Limit(aTargetValue, 0.0, 1.0); }
130
132 virtual void SetIdentification(Identification aIdent) = 0;
133
134 virtual Importance GetImportance() const = 0;
135 virtual void SetImportance(Importance aImportance) = 0;
136
137 virtual std::string GetPerceivedName() const = 0;
138 virtual void SetPerceivedName(const std::string& aIdString) = 0;
139
140 virtual bool GetAngleOnly() const = 0;
141 virtual void SetAngleOnly(bool aSetting) = 0;
142
143 virtual bool GetAltitudeValid() const { return mAltitudeValid; }
144 virtual void SetAltitudeValid(bool aSetting) { mAltitudeValid = aSetting; }
145
146 virtual bool GetSpeedValid() const { return mSpeedValid; }
147 virtual void SetSpeedValid(bool aSetting) { mSpeedValid = aSetting; }
148
149 virtual bool GetHeadingValid() const { return mHeadingValid; }
150 virtual void SetHeadingValid(bool aSetting) { mHeadingValid = aSetting; }
151
152 virtual double GetSelectionScore() const { return mSelectionScore; }
153 virtual void SetSelectionScore(double aSelectionScore) { mSelectionScore = aSelectionScore; }
154
161 virtual double EstimatedTimeToIntercept(WsfPlatform* aTarget) const = 0;
162
163 // -----------------------------------------------------------------------------------------------------------------------------------------------
164 // Static data
165
166 static double mAssumedRangeForAngleOnlyTargets; // This is used for tracks lacking range or location data
167
168private:
169 const WsfPlatform* mOwningPlatform = nullptr;
170
171 double mBearing_deg = {0.0};
172 double mThreatLevel = {0.0}; // Normalized value (0.0 to 1.0)
173 double mTargetValue = {0.0}; // Normalized value (0.0 to 1.0)
174 std::string mPerceivedType = {""};
175 bool mAltitudeValid = {false};
176 bool mSpeedValid = {false};
177 bool mHeadingValid = {false};
178 double mSelectionScore = {0.0};
179
180 bool mMalformedPerception = {
181 false}; // This is used to denote a malformed perception, which can occur for a variety of reasons
182 WsfSimulation* mSimulationPtr = {nullptr}; // Required for some calculations (such as to get the platform for target ids)
183};
184
187class WSF_AIR_COMBAT_EXPORT WsfScriptSA_PerceivedItemClass : public WsfScriptObjectClass
188{
189public:
190 WsfScriptSA_PerceivedItemClass(const std::string& aClassName, UtScriptTypes* aTypesPtr);
192
193 void Destroy(void* aObjectPtr) override;
194 std::string ToString(void* aObjectPtr) const override;
195 void OnNewScriptRef(UtScriptRef& aReference) override;
196
213 UT_DECLARE_SCRIPT_METHOD(EstimatedTimeToIntercept);
214};
215
216#endif // WSFSA_PERCEIVEDITEM_HPP
Definition WsfLocalTrack.hpp:32
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfProcessor.hpp:39
The WsfSA_PerceivedItem class is used as a base class for WsfSA_EntityPerception and WsfSA_Group,...
Definition WsfSA_PerceivedItem.hpp:38
virtual void SetPerceivedName(const std::string &aIdString)=0
void OwningPlatform(const WsfPlatform *aPlatform)
Definition WsfSA_PerceivedItem.hpp:94
virtual void SetSpeed_kts(double aSpeed_kts)=0
virtual void SetImportance(Importance aImportance)=0
virtual bool GetAngleOnly() const =0
static void SetAssumedRangeForAngleOnlyTargets(double aRange)
Definition WsfSA_PerceivedItem.hpp:64
virtual void SetIdentification(Identification aIdent)=0
const char * GetScriptClassName() const override
Definition WsfSA_PerceivedItem.hpp:85
static double GetAssumedRangeForAngleOnlyTargets()
Definition WsfSA_PerceivedItem.hpp:63
bool PerceptionIsMalformed() const
Definition WsfSA_PerceivedItem.hpp:96
Importance
Definition WsfSA_PerceivedItem.hpp:56
@ NOMINAL
Definition WsfSA_PerceivedItem.hpp:58
@ IGNORED
Definition WsfSA_PerceivedItem.hpp:57
@ IMPORTANT
Definition WsfSA_PerceivedItem.hpp:59
virtual void SetHeadingValid(bool aSetting)
Definition WsfSA_PerceivedItem.hpp:150
virtual void SetLat_deg(double aLat_deg)=0
virtual void SetAngleOnly(bool aSetting)=0
static double mAssumedRangeForAngleOnlyTargets
Definition WsfSA_PerceivedItem.hpp:166
bool operator!=(const WsfSA_PerceivedItem &aRhs)=delete
virtual double GetAltitude_ft() const =0
void SetMalformedCondition()
Definition WsfSA_PerceivedItem.hpp:97
virtual void SetLon_deg(double aLon_deg)=0
virtual bool GetSpeedValid() const
Definition WsfSA_PerceivedItem.hpp:146
virtual ItemType GetItemType() const =0
virtual double GetLon_deg() const =0
virtual Importance GetImportance() const =0
Identification
Definition WsfSA_PerceivedItem.hpp:41
@ BOGIE
Definition WsfSA_PerceivedItem.hpp:45
@ NEUTRAL
Definition WsfSA_PerceivedItem.hpp:44
@ UNKNOWN
Definition WsfSA_PerceivedItem.hpp:42
@ FRIENDLY
Definition WsfSA_PerceivedItem.hpp:43
@ BANDIT
Definition WsfSA_PerceivedItem.hpp:46
virtual void SetSpeedValid(bool aSetting)
Definition WsfSA_PerceivedItem.hpp:147
bool operator==(const WsfSA_PerceivedItem &aRhs)=delete
virtual double GetSelectionScore() const
Definition WsfSA_PerceivedItem.hpp:152
virtual double GetHeading_deg() const =0
virtual void SetBearing_deg(double aBearing_deg)
Definition WsfSA_PerceivedItem.hpp:117
virtual Identification GetIdentification() const =0
virtual double EstimatedTimeToIntercept(WsfPlatform *aTarget) const =0
Returns an estimate of the time for this entity to intercept the specified platform.
virtual void SetTargetValue(double aTargetValue)
Definition WsfSA_PerceivedItem.hpp:129
virtual double GetLat_deg() const =0
WsfSA_PerceivedItem()
Definition WsfSA_PerceivedItem.hpp:66
virtual void SetAltitude_ft(double aAltitude_ft)=0
virtual bool IsSame(const WsfSA_PerceivedItem *aOther) const =0
virtual bool GetAltitudeValid() const
Definition WsfSA_PerceivedItem.hpp:143
virtual double GetBearing_deg() const
Definition WsfSA_PerceivedItem.hpp:116
WsfSA_PerceivedItem(const WsfPlatform *aOwningPlatform)
Definition WsfSA_PerceivedItem.hpp:69
ItemType
Definition WsfSA_PerceivedItem.hpp:50
@ GROUP
Definition WsfSA_PerceivedItem.hpp:52
@ ENTITY
Definition WsfSA_PerceivedItem.hpp:51
virtual void SetHeading_deg(double aHeading_deg)=0
virtual void SetThreatLevel(double aThreatLevel)
Definition WsfSA_PerceivedItem.hpp:126
virtual void SetAltitudeValid(bool aSetting)
Definition WsfSA_PerceivedItem.hpp:144
virtual double GetTargetValue() const
Definition WsfSA_PerceivedItem.hpp:128
const WsfPlatform * OwningPlatform() const
Definition WsfSA_PerceivedItem.hpp:93
virtual double GetThreatLevel() const
Definition WsfSA_PerceivedItem.hpp:125
virtual double GetSpeed_kts() const =0
virtual std::string GetPerceivedName() const =0
virtual bool GetHeadingValid() const
Definition WsfSA_PerceivedItem.hpp:149
virtual void SetSelectionScore(double aSelectionScore)
Definition WsfSA_PerceivedItem.hpp:153
WsfScriptObjectClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfScriptObjectClass.cpp:24
~WsfScriptSA_PerceivedItemClass() override=default
UT_DECLARE_SCRIPT_METHOD(HeadingValid)
UT_DECLARE_SCRIPT_METHOD(EstimatedTimeToIntercept)
UT_DECLARE_SCRIPT_METHOD(Identification)
void OnNewScriptRef(UtScriptRef &aReference) override
Definition WsfSA_PerceivedItem.cpp:221
UT_DECLARE_SCRIPT_METHOD(AltitudeValid)
WsfScriptSA_PerceivedItemClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfSA_PerceivedItem.cpp:171
std::string ToString(void *aObjectPtr) const override
Definition WsfSA_PerceivedItem.cpp:204
UT_DECLARE_SCRIPT_METHOD(PerceivedName)
void Destroy(void *aObjectPtr) override
Definition WsfSA_PerceivedItem.cpp:199
UT_DECLARE_SCRIPT_METHOD(SelectionScore)
Definition WsfSensor.hpp:92
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Definition WsfWeapon.hpp:63
Copyrights Multiple, All Rights Reserved