WSF
WsfSA_Group.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 2020 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_GROUP_HPP
13#define WSFSA_GROUP_HPP
14
15#include "wsf_air_combat_export.h"
16
17#include <algorithm>
18#include <list>
19
22
23class WSF_AIR_COMBAT_EXPORT WsfSA_Group : public WsfSA_PerceivedItem
24{
25public:
26 WsfSA_Group() = default;
27 explicit WsfSA_Group(const WsfPlatform* aOwningPlatform)
28 : WsfSA_PerceivedItem(aOwningPlatform){};
29 ~WsfSA_Group() override;
30 WsfSA_Group(const WsfSA_Group& aSrc);
31
32 using ElementList = std::list<WsfSA_EntityPerception*>;
33
34 WsfSA_Group* Clone() const { return new WsfSA_Group(*this); }
35
36 // This determines if the specified entity is the same as this entity
37 bool IsSame(const WsfSA_PerceivedItem* aOther) const override;
38
39 const char* GetScriptClassName() const override { return "WsfSA_Group"; }
40
41 ItemType GetItemType() const override { return GROUP; }
42
43 // Inherited from WsfSA_PerceivedItem
44 double GetLat_deg() const override { return mCentroidLat_deg; }
45 void SetLat_deg(double aLat_deg) override { mCentroidLat_deg = aLat_deg; }
46
47 double GetLon_deg() const override { return mCentroidLon_deg; }
48 void SetLon_deg(double aLon_deg) override { mCentroidLon_deg = aLon_deg; }
49
50 double GetAltitude_ft() const override { return mCentroidAlt_ft; }
51 void SetAltitude_ft(double aAltitude_ft) override { mCentroidAlt_ft = static_cast<float>(aAltitude_ft); }
52
53 double GetSpeed_kts() const override { return mCentroidSpeed_kts; }
54 void SetSpeed_kts(double aSpeed_kts) override { mCentroidSpeed_kts = static_cast<float>(aSpeed_kts); }
55
56 double GetHeading_deg() const override { return mCentroidHeading_deg; }
57 void SetHeading_deg(double aHeading_deg) override { mCentroidHeading_deg = static_cast<float>(aHeading_deg); }
58
59 Importance GetImportance() const override;
60 void SetImportance(Importance aImportance) override;
61
62 Identification GetIdentification() const override;
63 void SetIdentification(Identification aIdent) override { mIdentification = aIdent; }
64
65 std::string GetPerceivedName() const override { return mGroupName; }
66 void SetPerceivedName(const std::string& aIdString) override { mGroupName = aIdString; }
67
68 bool GetAngleOnly() const override { return false; }
69 void SetAngleOnly(bool aAngleOnly) override
70 {
71 ut::log::warning() << "SetAngleOnly not impolemented for WsfSA_Group.";
72 } // groups cannot, at this time, be angle-only.
73 // **********************************
74
75 float GetRadiusCurrent_nm() const { return mRadiusCurrent_nm; }
76 void SetRadiusCurrent_nm(float aValue) { mRadiusCurrent_nm = aValue; }
77
78 float GetRadiusMinimum_nm() const { return mRadiusMinimum_nm; }
79 void SetRadiusMinimum_nm(float aValue) { mRadiusMinimum_nm = aValue; }
80
81 double GetLastUpdateTime_sec() const { return mLastUpdateTime_sec; }
82 void SetLastUpdateTime_sec(double aValue) { mLastUpdateTime_sec = aValue; }
83
84 bool GetFocus() const { return mIsFocused; }
85 void SetFocus(bool aFocus) { mIsFocused = aFocus; }
86
87 bool GetElementProtection() const { return mProtectElements; }
88 void SetElementProtection(bool aProtectElements) { mProtectElements = aProtectElements; }
89
90 bool GetFocusProtection() const { return mProtectFocus; }
91 void SetFocusProtection(bool aProtectFocus) { mProtectFocus = aProtectFocus; }
92
93 size_t GetNumElements() const { return mElementList.size(); }
94
95 const ElementList& GetElementList() const { return mElementList; }
96 void SetElementList(const ElementList& aList);
97
98 ElementList* ModifiableElementList() { return &mElementList; }
99
100 bool AddElement(WsfSA_EntityPerception* aElement);
101
102 bool RemoveElement(WsfSA_EntityPerception* aElement);
103
110 double EstimatedTimeToIntercept(WsfPlatform* aTarget) const override;
111
112private:
113 std::string mGroupName;
114 double mCentroidLat_deg = {0.0};
115 double mCentroidLon_deg = {0.0};
116 float mCentroidAlt_ft = {0.0f};
117 float mCentroidHeading_deg = {0.0f};
118 float mCentroidSpeed_kts = {0.0f};
119 float mRadiusCurrent_nm = {static_cast<float>(500.0 * UtMath::cNM_PER_FT)}; // Default current radius is 500 ft
120 float mRadiusMinimum_nm = {static_cast<float>(500.0 * UtMath::cNM_PER_FT)}; // Default minimum radius is 500 ft
121 double mLastUpdateTime_sec = {0.0};
122 bool mIsFocused = {true};
123 bool mProtectElements = {false};
124 bool mProtectFocus = {false};
125 Identification mIdentification = UNKNOWN;
126 Importance mImportance = {NOMINAL};
127
128 ElementList mElementList;
129};
130
133class WSF_AIR_COMBAT_EXPORT WsfScriptSA_GroupClass : public WsfScriptSA_PerceivedItemClass
134{
135public:
136 WsfScriptSA_GroupClass(const std::string& aClassName, UtScriptTypes* aTypesPtr);
137 ~WsfScriptSA_GroupClass() override = default;
138
139 void Destroy(void* aObjectPtr) override;
140 // std::string ToString(void* aObjectPtr) const override;
141
146 UT_DECLARE_SCRIPT_METHOD(CentroidHeading);
154 UT_DECLARE_SCRIPT_METHOD(SetElementProtection);
155 UT_DECLARE_SCRIPT_METHOD(SetFocusProtection);
156 UT_DECLARE_SCRIPT_METHOD(GetElementProtection);
157 UT_DECLARE_SCRIPT_METHOD(GetFocusProtection);
158};
159
160#endif
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfSA_EntityPerception.hpp:37
Definition WsfSA_Group.hpp:24
WsfSA_Group * Clone() const
Definition WsfSA_Group.hpp:34
void SetRadiusCurrent_nm(float aValue)
Definition WsfSA_Group.hpp:76
double GetLon_deg() const override
Definition WsfSA_Group.hpp:47
double GetHeading_deg() const override
Definition WsfSA_Group.hpp:56
bool GetAngleOnly() const override
Definition WsfSA_Group.hpp:68
void SetFocus(bool aFocus)
Definition WsfSA_Group.hpp:85
void SetIdentification(Identification aIdent) override
Definition WsfSA_Group.hpp:63
WsfSA_Group(const WsfPlatform *aOwningPlatform)
Definition WsfSA_Group.hpp:27
void SetPerceivedName(const std::string &aIdString) override
Definition WsfSA_Group.hpp:66
double GetLastUpdateTime_sec() const
Definition WsfSA_Group.hpp:81
bool GetFocus() const
Definition WsfSA_Group.hpp:84
WsfSA_Group()=default
double GetAltitude_ft() const override
Definition WsfSA_Group.hpp:50
float GetRadiusCurrent_nm() const
Definition WsfSA_Group.hpp:75
std::list< WsfSA_EntityPerception * > ElementList
Definition WsfSA_Group.hpp:32
void SetLastUpdateTime_sec(double aValue)
Definition WsfSA_Group.hpp:82
void SetAltitude_ft(double aAltitude_ft) override
Definition WsfSA_Group.hpp:51
std::string GetPerceivedName() const override
Definition WsfSA_Group.hpp:65
void SetLon_deg(double aLon_deg) override
Definition WsfSA_Group.hpp:48
void SetHeading_deg(double aHeading_deg) override
Definition WsfSA_Group.hpp:57
const ElementList & GetElementList() const
Definition WsfSA_Group.hpp:95
bool GetFocusProtection() const
Definition WsfSA_Group.hpp:90
void SetFocusProtection(bool aProtectFocus)
Definition WsfSA_Group.hpp:91
size_t GetNumElements() const
Definition WsfSA_Group.hpp:93
void SetSpeed_kts(double aSpeed_kts) override
Definition WsfSA_Group.hpp:54
const char * GetScriptClassName() const override
Definition WsfSA_Group.hpp:39
void SetAngleOnly(bool aAngleOnly) override
Definition WsfSA_Group.hpp:69
ElementList * ModifiableElementList()
Definition WsfSA_Group.hpp:98
void SetLat_deg(double aLat_deg) override
Definition WsfSA_Group.hpp:45
double GetSpeed_kts() const override
Definition WsfSA_Group.hpp:53
double GetLat_deg() const override
Definition WsfSA_Group.hpp:44
void SetElementProtection(bool aProtectElements)
Definition WsfSA_Group.hpp:88
ItemType GetItemType() const override
Definition WsfSA_Group.hpp:41
bool GetElementProtection() const
Definition WsfSA_Group.hpp:87
float GetRadiusMinimum_nm() const
Definition WsfSA_Group.hpp:78
void SetRadiusMinimum_nm(float aValue)
Definition WsfSA_Group.hpp:79
The WsfSA_PerceivedItem class is used as a base class for WsfSA_EntityPerception and WsfSA_Group,...
Definition WsfSA_PerceivedItem.hpp:38
virtual void SetImportance(Importance aImportance)=0
virtual Importance GetImportance() const =0
Identification
Definition WsfSA_PerceivedItem.hpp:41
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.
WsfSA_PerceivedItem()
Definition WsfSA_PerceivedItem.hpp:66
virtual bool IsSame(const WsfSA_PerceivedItem *aOther) const =0
ItemType
Definition WsfSA_PerceivedItem.hpp:50
@ GROUP
Definition WsfSA_PerceivedItem.hpp:52
UT_DECLARE_SCRIPT_METHOD(SetElementProtection)
UT_DECLARE_SCRIPT_METHOD(ElementList)
~WsfScriptSA_GroupClass() override=default
UT_DECLARE_SCRIPT_METHOD(CentroidLat)
UT_DECLARE_SCRIPT_METHOD(GetFocusProtection)
UT_DECLARE_SCRIPT_METHOD(GroupName)
WsfScriptSA_GroupClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfSA_Group.cpp:225
UT_DECLARE_SCRIPT_METHOD(NumElements)
UT_DECLARE_SCRIPT_METHOD(CentroidLon)
UT_DECLARE_SCRIPT_METHOD(CentroidSpeed)
UT_DECLARE_SCRIPT_METHOD(GetFocus)
UT_DECLARE_SCRIPT_METHOD(CentroidAlt)
UT_DECLARE_SCRIPT_METHOD(CentroidHeading)
void Destroy(void *aObjectPtr) override
Definition WsfSA_Group.cpp:251
UT_DECLARE_SCRIPT_METHOD(RadiusMinimum)
UT_DECLARE_SCRIPT_METHOD(SetFocusProtection)
UT_DECLARE_SCRIPT_METHOD(RadiusCurrent)
UT_DECLARE_SCRIPT_METHOD(LastUpdateTime)
UT_DECLARE_SCRIPT_METHOD(GetElementProtection)
WsfScriptSA_PerceivedItemClass(const std::string &aClassName, UtScriptTypes *aTypesPtr)
Definition WsfSA_PerceivedItem.cpp:171
Copyrights Multiple, All Rights Reserved