12#ifndef WSFUCI_WEAPONCOMPONENT_HPP
13#define WSFUCI_WEAPONCOMPONENT_HPP
15#include "wsf_oms_uci_export.h"
19#include <unordered_set>
21#include "uci/type/MessageStateEnum.h"
67 virtual void SetOwnerProducer(
const ISM_OwnerProducerType& aOwnerType)
override;
68 std::string
GetCommandTypeString(uci::type::StrikeWeaponCommandType::StrikeWeaponCommandTypeChoice aType);
72 const UCI_StrikeCommandMessage& aMessage);
75 const uci::type::StrikeCapabilityCommandType& aCapabilityCommand);
78 const uci::type::StrikeActivityCommandType& aActivityCommand);
81 const UCI_DMPI_Message& aMessage);
84 const uci::type::StrikeCapabilityCommandType& aCapabilityCommand);
89 const uci::type::MessageStateEnum::EnumerationItem& aMessageState)
override;
92 const uci::type::MessageStateEnum::EnumerationItem& aMessageState)
override;
95 const uci::type::MessageStateEnum::EnumerationItem& aMessageState)
override;
98 const uci::type::MessageStateEnum::EnumerationItem& aMessageState,
99 const uci::type::DMPI_ID_Type& aDMPI_ID,
100 const uci::type::DMPI_StoreStateEnum::EnumerationItem& aStoreState);
138 bool mSelectedForKeyLoad{
false };
139 bool mWeaponArmed{
false };
140 bool mReadyForRelease{
false };
141 bool mSelectedForRelease{
false };
142 bool mSelectedForJettison{
false };
147 int mStoreType { 0 };
148 uci::type::StoreCategoryEnum::EnumerationItem mStoreCategory { uci::type::StoreCategoryEnum::enumNotSet };
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);
155 void WeaponFireResults(
double aSimTime,
156 const WsfWeaponEngagement* aEngagementPtr,
157 WsfPlatform* aTargetPlatformPtr,
158 const std::string& aStatus);
160 bool SetFireLocation(
double aSimTime,
161 WsfWeapon* aWeaponPtr,
162 const std::string& aUUID);
164 void SetSelectedForKeyLoad(
const std::string& aID,
166 void SetWeaponArmed(
const std::string& aID,
168 void SetReadyForRelease(
const std::string& aID,
170 void SetSelectedForRelease(
const std::string& aID,
172 void SetSelectedForJettison(
const std::string& aID,
175 bool HasDMPI_Message(
const std::string& aDMPI_ID);
177 bool WeaponAvailable(WsfWeapon* aWeaponPtr,
178 const std::string& aUUID);
180 bool MeetsDMPI_Requirements(
const std::string& aDMPI_Id);
182 std::string GetWeaponName(
const std::string& aName);
184 bool CanFire(
double aSimTime,
185 WsfWeapon* aWeaponPtr,
186 const std::string& aUUID);
188 WeaponStatus GetWeaponStatus(
const std::string& aID);
190 uci::type::CapabilityAvailabilityEnum::EnumerationItem GetWeaponAvailability(
const WsfWeapon* aWeaponPtr,
191 const std::string& aUUID);
192 std::string GetAvailabilityString(uci::type::CapabilityAvailabilityEnum::EnumerationItem aAvailability);
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 };
#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
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
UCI_PartComponent()=delete
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
UCI_WeaponComponent()=delete
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