WSF
WsfUCI_WeaponComponent.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 WSFUCI_WEAPONCOMPONENT_HPP
13#define WSFUCI_WEAPONCOMPONENT_HPP
14
15#include "wsf_oms_uci_export.h"
16
17#include <iostream>
18#include <string>
19#include <unordered_set>
20
21#include "uci/type/MessageStateEnum.h"
22
23#include "UtLog.hpp"
24#include "WsfPlatform.hpp"
25#include "WsfUCI_Component.hpp"
26#include "WsfUCI_Messages.hpp"
28#include "WsfUCI_Types.hpp"
29#include "WsfWeapon.hpp"
30
31class WsfScenario;
32class WsfSimulation;
33
34namespace wsf
35{
36
42{
43 public:
45
46
47 // We must define the component role enum here as it is not a core value
48 static const int cWSF_COMPONENT_UCI_WEAPON = 9876543; // See WsfComponentRoles
50
52 UCI_WeaponComponent(const WsfScenario& aScenario);
54 virtual ~UCI_WeaponComponent() = default;
55
56 void* QueryInterface(int aRole) override;
57 bool Initialize2(double aSimTime) override;
58 const int* GetComponentRoles() const override;
59 bool ProcessInput(UtInput& aInput) override;
60
61 WsfComponent* CloneComponent() const override;
62 WsfObject* Clone() const { return new UCI_WeaponComponent(*this); }
63
64 protected:
65
67 virtual void SetOwnerProducer(const ISM_OwnerProducerType& aOwnerType) override;
68 std::string GetCommandTypeString(uci::type::StrikeWeaponCommandType::StrikeWeaponCommandTypeChoice aType);
69 void SetCommandAccepted(const uci::type::StrikeCapabilityCommandType& aCapabilityCommand,
70 const WsfWeapon::FireResult& aResult);
71 bool HandleCommandMessage(double aSimTime,
72 const UCI_StrikeCommandMessage& aMessage);
73
74 bool HandleCapabilityCommand(double aSimTime,
75 const uci::type::StrikeCapabilityCommandType& aCapabilityCommand);
76
77 bool HandleActivityCommand(double aSimTime,
78 const uci::type::StrikeActivityCommandType& aActivityCommand);
79
80 bool HandleDMPI_Message(double aSimTime,
81 const UCI_DMPI_Message& aMessage);
82
83 bool CommandWeapon(double aSimTime,
84 const uci::type::StrikeCapabilityCommandType& aCapabilityCommand);
85
86 void ClearActivities() { mActivityMessagePtr->Get().getMessageData().getActivity().clear(); }
87
88 void SendActivityMessage(double aSimTime,
89 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) override;
90
91 void SendCapabilityMessage(double aSimTime,
92 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) override;
93
94 void SendCapabilityStatusMessage(double aSimTime,
95 const uci::type::MessageStateEnum::EnumerationItem& aMessageState) override;
96
97 void SendDMPI_StatusMessage(double aSimTime,
98 const uci::type::MessageStateEnum::EnumerationItem& aMessageState,
99 const uci::type::DMPI_ID_Type& aDMPI_ID,
100 const uci::type::DMPI_StoreStateEnum::EnumerationItem& aStoreState);
101
102 void UpdateAllMessages();
103
104 void SetAllCapabilitiesAvailability(const uci::type::CapabilityAvailabilityEnum::EnumerationItem& aAvailability) {}
105
106 bool ReceiveMessage(double aSimTime,
107 const WsfMessage& aMessage) override;
108
109 void WeaponHitCB(double aSimTime,
110 const WsfWeaponEngagement* aEngagementPtr,
111 WsfPlatform* aTargetPlatformPt);
112 void WeaponTerminatedCB(double aSimTime,
113 const WsfWeaponEngagement* aEngagementPtr);
114 void WeaponMissedCB(double aSimTime,
115 const WsfWeaponEngagement* aEngagementPtr,
116 WsfPlatform* aTargetPlatformPtr);
117
118 void WeaponFiredCB(double aSimTime,
119 const WsfWeaponEngagement* aEngagementPtr,
120 const WsfTrack* aTargetPtr);
121
122 /*void WeaponFireAbortedCB(double aSimTime,
123 WsfWeapon* aWeaponPtr,
124 const WsfTrack* aTargetTrackPtr,
125 double aQuantity);*/
126
127 std::unique_ptr<UCI_StrikeActivityMessage> mActivityMessagePtr;
128 std::unique_ptr<UCI_StrikeCapabilityMessage> mCapabilityMessagePtr;
129 std::unique_ptr<UCI_StrikeCapabilityStatusMessage> mCapabilityStatusMessagePtr;
130 std::map<unsigned int, UCI_StrikeActivityType> mSerialToActivity;
131
132 std::map<std::string, std::string> mUUIDtoCapability;
133
134 private:
135
136 struct WeaponStatus
137 {
138 bool mSelectedForKeyLoad{ false };
139 bool mWeaponArmed{ false };
140 bool mReadyForRelease{ false };
141 bool mSelectedForRelease{ false };
142 bool mSelectedForJettison{ false };
143 };
144
145 struct StoreInfo
146 {
147 int mStoreType { 0 };
148 uci::type::StoreCategoryEnum::EnumerationItem mStoreCategory { uci::type::StoreCategoryEnum::enumNotSet };
149 };
150
151 int GetStoreType(const std::string& aWeapon);
152 uci::type::StoreCategoryEnum::EnumerationItem GetStoreCategory(const std::string& aWeapon);
153 uci::type::StoreCategoryEnum::EnumerationItem GetStoreCategoryEnum(const std::string& aCategory);
154
155 void WeaponFireResults(double aSimTime,
156 const WsfWeaponEngagement* aEngagementPtr,
157 WsfPlatform* aTargetPlatformPtr,
158 const std::string& aStatus);
159
160 bool SetFireLocation(double aSimTime,
161 WsfWeapon* aWeaponPtr,
162 const std::string& aUUID);
163
164 void SetSelectedForKeyLoad(const std::string& aID,
165 bool aSelected);
166 void SetWeaponArmed(const std::string& aID,
167 bool aArmed);
168 void SetReadyForRelease(const std::string& aID,
169 bool aReady);
170 void SetSelectedForRelease(const std::string& aID,
171 bool aSelected);
172 void SetSelectedForJettison(const std::string& aID,
173 bool aSelected);
174
175 bool HasDMPI_Message(const std::string& aDMPI_ID);
176
177 bool WeaponAvailable(WsfWeapon* aWeaponPtr,
178 const std::string& aUUID);
179
180 bool MeetsDMPI_Requirements(const std::string& aDMPI_Id);
181
182 std::string GetWeaponName(const std::string& aName);
183
184 bool CanFire(double aSimTime,
185 WsfWeapon* aWeaponPtr,
186 const std::string& aUUID);
187
188 WeaponStatus GetWeaponStatus(const std::string& aID);
189
190 uci::type::CapabilityAvailabilityEnum::EnumerationItem GetWeaponAvailability(const WsfWeapon* aWeaponPtr,
191 const std::string& aUUID);
192 std::string GetAvailabilityString(uci::type::CapabilityAvailabilityEnum::EnumerationItem aAvailability);
193
194 std::map<std::string, WeaponStatus> mWeaponStatus;
195 std::map<std::string, StoreInfo> mStoreInfo;
196 std::map<std::string, std::pair<UCI_DMPI_Message, uci::type::DMPI_StoreStateEnum::EnumerationItem> > mDMPI_Messages;
197 bool mSendActivityMessage{ false };
198 std::unordered_set<std::string> mFiredCapabilities;
199 std::set<std::string> mIgnoredWeapons;
200 bool mCurrentlyFiring{ false };
201};
202
203
204} // namespace wsf
205
207
208#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
Definition WsfComponent.hpp:39
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfObject.hpp:40
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
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
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfWeaponEngagement.hpp:43
Result of WsfWeapon::Fire().
Definition WsfWeapon.hpp:319
Definition WsfUCI_WeaponComponent.hpp:42
std::string GetCommandTypeString(uci::type::StrikeWeaponCommandType::StrikeWeaponCommandTypeChoice aType)
Definition WsfUCI_WeaponComponent.cpp:509
bool ReceiveMessage(double aSimTime, const WsfMessage &aMessage) override
Definition WsfUCI_WeaponComponent.cpp:243
virtual ~UCI_WeaponComponent()=default
WsfObject * Clone() const
Definition WsfUCI_WeaponComponent.hpp:62
bool Initialize2(double aSimTime) override
Definition WsfUCI_WeaponComponent.cpp:120
void UpdateAllMessages()
Definition WsfUCI_WeaponComponent.cpp:919
void SendCapabilityMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState) override
Definition WsfUCI_WeaponComponent.cpp:818
std::map< std::string, std::string > mUUIDtoCapability
Definition WsfUCI_WeaponComponent.hpp:132
void SendCapabilityStatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState) override
Definition WsfUCI_WeaponComponent.cpp:875
void SendActivityMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState) override
Definition WsfUCI_WeaponComponent.cpp:842
std::unique_ptr< UCI_StrikeCapabilityMessage > mCapabilityMessagePtr
Definition WsfUCI_WeaponComponent.hpp:128
bool CommandWeapon(double aSimTime, const uci::type::StrikeCapabilityCommandType &aCapabilityCommand)
Definition WsfUCI_WeaponComponent.cpp:704
void SetAllCapabilitiesAvailability(const uci::type::CapabilityAvailabilityEnum::EnumerationItem &aAvailability)
Definition WsfUCI_WeaponComponent.hpp:104
virtual void SetOwnerProducer(const ISM_OwnerProducerType &aOwnerType) override
Definition WsfUCI_WeaponComponent.cpp:501
void * QueryInterface(int aRole) override
Definition WsfUCI_WeaponComponent.cpp:105
void UpdateCapabilityStatus()
Definition WsfUCI_WeaponComponent.cpp:481
static const int cWSF_COMPONENT_UCI_WEAPON
Definition WsfUCI_WeaponComponent.hpp:48
void SendDMPI_StatusMessage(double aSimTime, const uci::type::MessageStateEnum::EnumerationItem &aMessageState, const uci::type::DMPI_ID_Type &aDMPI_ID, const uci::type::DMPI_StoreStateEnum::EnumerationItem &aStoreState)
Definition WsfUCI_WeaponComponent.cpp:901
bool HandleActivityCommand(double aSimTime, const uci::type::StrikeActivityCommandType &aActivityCommand)
Definition WsfUCI_WeaponComponent.cpp:665
bool HandleDMPI_Message(double aSimTime, const UCI_DMPI_Message &aMessage)
Definition WsfUCI_WeaponComponent.cpp:687
std::unique_ptr< UCI_StrikeCapabilityStatusMessage > mCapabilityStatusMessagePtr
Definition WsfUCI_WeaponComponent.hpp:129
void WeaponMissedCB(double aSimTime, const WsfWeaponEngagement *aEngagementPtr, WsfPlatform *aTargetPlatformPtr)
Definition WsfUCI_WeaponComponent.cpp:455
void SetCommandAccepted(const uci::type::StrikeCapabilityCommandType &aCapabilityCommand, const WsfWeapon::FireResult &aResult)
WsfComponent * CloneComponent() const override
Definition WsfUCI_WeaponComponent.cpp:115
bool HandleCommandMessage(double aSimTime, const UCI_StrikeCommandMessage &aMessage)
Definition WsfUCI_WeaponComponent.cpp:542
const int * GetComponentRoles() const override
Definition WsfUCI_WeaponComponent.cpp:47
bool HandleCapabilityCommand(double aSimTime, const uci::type::StrikeCapabilityCommandType &aCapabilityCommand)
Definition WsfUCI_WeaponComponent.cpp:595
std::map< unsigned int, UCI_StrikeActivityType > mSerialToActivity
Definition WsfUCI_WeaponComponent.hpp:130
void WeaponTerminatedCB(double aSimTime, const WsfWeaponEngagement *aEngagementPtr)
Definition WsfUCI_WeaponComponent.cpp:449
bool ProcessInput(UtInput &aInput) override
Definition WsfUCI_WeaponComponent.cpp:58
void ClearActivities()
Definition WsfUCI_WeaponComponent.hpp:86
void WeaponFiredCB(double aSimTime, const WsfWeaponEngagement *aEngagementPtr, const WsfTrack *aTargetPtr)
Definition WsfUCI_WeaponComponent.cpp:462
std::unique_ptr< UCI_StrikeActivityMessage > mActivityMessagePtr
Definition WsfUCI_WeaponComponent.hpp:127
void WeaponHitCB(double aSimTime, const WsfWeaponEngagement *aEngagementPtr, WsfPlatform *aTargetPlatformPt)
Definition WsfUCI_WeaponComponent.cpp:442
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved