VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
launcherController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2012 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
18 #include <boost/signals2.hpp>
19 #include <tbb/spin_mutex.h>
20 
21 class DtLauncherControllerDescriptor;
22 class DtStringOutputPort;
23 class DtVectorOutputPort;
24 
25 namespace makVrfEvents
26 {
27  class DtEvent;
28 }
29 
64 {
65 
66 public:
67 
70  DtLauncherController(const DtString& name,
71  DtLocalObject* owner,
72  DtSimulationServices* simManager,
73  DtComponentDescriptor* desc = nullptr,
74  DtReaderWriterRegistry* parentRegistry = nullptr);
75 
77  virtual ~DtLauncherController() override;
78 
79  virtual bool init() override;
80 
82  virtual void registerTaskMsgCallbacks() override;
83 
86  virtual AcceptLevel acceptTask(const DtTaskMessage& task) override;
87 
90  virtual const char* type() const override;
91 
93  virtual void tick() override;
94 
97  virtual bool createMissileIdPort();
98  virtual bool createTargetPointPort();
99  virtual bool createTargetEntityIdPort();
100 
103  virtual void fire() override;
104 
111  virtual void missileDetonated(const makVrfEvents::DtDetonationEvent * detInter);
112 
116  virtual void detonationCallback(const makVrfEvents::DtEvent& e);
117 
126  virtual void disconnectMissileFromLauncher(const DtUUID& missId);
127 
129  virtual DtSimObjectReference mostRecentMissileFired();
130 
134  virtual bool missilePassedTarget(const DtMissileSimObjectFacade& lastMissile, double& distSquaredToTargetOut);
135 
136  virtual double abandonPassedMissileDistance();
137  virtual void setAbandonPassedMissileDistance(const double& distance);
138 
142  virtual void registerAttributeFunctions() override;
143 
147  static DtReaderWriter* provideLastMissileName(void* controller);
148 
152  static DtReaderWriter* provideMissilePassedTarget(void* controller);
153 
154 
158  static DtSimComponent * creator(const DtString& name,
159  DtLocalObject* owner,
160  DtSimulationServices* simManager,
161  DtComponentDescriptor* desc = nullptr,
162  DtReaderWriterRegistry* parentRegistry = nullptr);
163 
164 protected:
165 
167  virtual bool createPorts() override;
168 
173 
174  static void fireMissileLauncherTaskCallback(DtSimMessage* msg, void* usr);
175 
179  virtual void processFireMissileLauncherTask(DtSimMessage* msg);
181 
184  void updateFireMissileLauncherTask();
185 
187  virtual DtReaderWriter* processProvideLastMissileName();
188 
190  virtual DtReaderWriter* processProvideMissilePassedTarget();
191 
192  virtual void processObjectRemoved(const DtUUID& missileId);
193 
194  virtual void processDeleteObject(const DtUUID& missileId);
195 
197  virtual bool isSurrenderedLifeform(const DtSimObject* entity) const;
198 
199  virtual DtSimTask* createFireTask(const DtRwLocationReference& locRef) const;
200 
201 protected:
203  virtual void preFirstTickInit() override;
204 
205 protected:
206 
208  DtLauncherController() = delete;
209 
211  DtLauncherController(const DtLauncherController & orig) = delete;
212 
214  const DtLauncherController & operator=(const DtLauncherController & orig) = delete;
215 
216 
217 //=================================================================================================
224 //=================================================================================================
225 private:
227 
228  virtual bool isFireMissileLauncherTasked() const override;
229  virtual const DtFireMissileLauncherTask* getFireMissileLauncherTask() const override;
231 //=================================================================================================
232 
233 
234 protected:
235 
236  struct MissileInfo
237  {
238  MissileInfo() : uuid(DtUUID::nullUUID()), simObjectReference(DtSimObjectReference::nullReference()) {};
239  MissileInfo(const DtUUID& u, DtSimObjectReference r) : uuid(u), simObjectReference(r) {};
240  MissileInfo(const MissileInfo& orig) : uuid(orig.uuid), simObjectReference(orig.simObjectReference) {};
241 
242  MissileInfo& operator=(const MissileInfo& orig) { uuid = orig.uuid; simObjectReference = orig.simObjectReference; return *this; };
243 
244  DtUUID uuid;
246  };
247 
250 
256  DtStringOutputPort* myMissileIdPort = nullptr;
257 
263  DtStringOutputPort* myTargetEntityIdPort = nullptr;
264 
270  DtVectorOutputPort* myTargetPointPort = nullptr;
271 
273 
278 
279  bool myRegisteredRemovedCallback = false;
280 
281  typedef std::map<DtUUID, DtMissileSimObjectFacade*> MissileSimObjectFacadeMap;
282  MissileSimObjectFacadeMap myMissileSimObjectFacadeMap{};
283 
284  mutable tbb::spin_mutex myRemovedMissilesMutex;
285  std::vector<DtUUID> myRemovedMissiles{};
286 
287  boost::signals2::scoped_connection myMissileRemovedFromActiveListConnection{};
288 };
UUID is a unique ID wrapper class.
Definition: uuid.h:59
tbb::spin_mutex myRemovedMissilesMutex
Definition: launcherController.h:284
DtUUID uuid
Definition: launcherController.h:242
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
virtual bool createPorts() override
Overridden to create the local ports.
const DtWeaponController & operator=(const DtWeaponController &orig)
assignment operator; not implemented
Instances of DtStringOutputPort are output ports through which data producers can send a DtString obj...
Definition: stringIOPort.h:52
Task for firing the missile launcher at a target.
Definition: fireMissileLauncherTask.h:25
DtWeaponController is a controller that extends the DtBaseWeaponController with the ability to accept...
Definition: weaponController.h:59
virtual void registerTaskMsgCallbacks()
AcceptLevel
Levels that a task controller can accept a task it has registered for.
Definition: taskControllerComponent.h:55
Holds a position of some form. May be an absolute position, or a reference to another object...
Definition: rwLocationReference.h:25
Definition: readerWriter.h:85
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:49
Definition: readerWriterRegistry.h:39
Definition: detonationEvent.h:20
static DtSimComponent * creator(const DtString &name, DtLocalObject *owner, DtSimulationServices *simManager, DtComponentDescriptor *desc=nullptr, DtReaderWriterRegistry *parentRegistry=nullptr)
virtual bool isFireMissileLauncherTasked() const
The following private function are created temporarily during the weapon system refactoring. Their purpose is to bypass the target weapon interface and the target selection controller, when the new DtFireMissileLauncherTask is executed. The functions should be removed / replaced / modified as the refactoring goes along.
DtLauncherController is a controller that accepts input from a target sensor, and provides ammunition...
Definition: launcherController.h:63
virtual void fire() override
updates weapon interface
Definition: event.h:13
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
Instances of DtVectorOutputPort are output ports through which data producers can send a DtVector...
Definition: vectorIOPort.h:52
File: simMsg.h.
Definition: simMessage.h:35
MissileInfo(const MissileInfo &orig)
Definition: launcherController.h:240
MissileInfo()
Definition: launcherController.h:238
Definition: launcherController.h:236
std::map< DtUUID, DtMissileSimObjectFacade * > MissileSimObjectFacadeMap
Definition: launcherController.h:281
DtSimObjectReference simObjectReference
Definition: launcherController.h:245
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:89
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:80
double myAbandonPassedMissileDistance
If the missile passes its target within this distance, it will be abandoned and disconnected from the...
Definition: launcherController.h:277
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
virtual bool init() override
Overridden to initialize values obtained from the descriptor.
virtual void registerAttributeFunctions()
Called to register functions that provide system attribute values. Called by init(). Empty in this class. Overridden in different components to add attribute provider functions.
Definition: simComponent.h:131
virtual AcceptLevel acceptTask(const DtTaskMessage &task)
Called by the task manager when this controller is being considered to execute a task. Only tasks which already match types that this controller has registered for will be passed. This is used for the case where multiple task controllers have registered for the same task type. This gives the controller a chance to look at the parameters of the task and to reject the execution of the task based on parameters. Controllers can return any of the AcceptLevel levels. The task manager will choose a controller with the lowest AcceptLevel to execute, but will not choose any controller that returns AcceptLevel_NoAccept. Default implementation returns AcceptLevel_Accept. Override this to check parameters and conditionally return a different AccpetLevel.
virtual const DtFireMissileLauncherTask * getFireMissileLauncherTask() const
The following private function are created temporarily during the weapon system refactoring. Their purpose is to bypass the target weapon interface and the target selection controller, when the new DtFireMissileLauncherTask is executed. The functions should be removed / replaced / modified as the refactoring goes along.
virtual const char * type() const override
Returns a string identifies the class type of component. Type values are defined in compTypes...
virtual void tick() override
If the myWaitingForFire flag is set and the munition loader is still loaded, the weapon has not fired...
virtual void preFirstTickInit() override
Starts with weapon loaded, if the weapon has a full complement of ammunition.
A DtTaskMsg is a DtRadioMsg with a pointer to a task. The type of the taskMsg is just the type of the...
Definition: taskMessage.h:21
MissileInfo(const DtUUID &u, DtSimObjectReference r)
Definition: launcherController.h:239
A locally simulated VRF object.
Definition: localObject.h:98

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)