VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
indirectFireWeaponController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
12 #pragma once
13 
16 #include "vrfutil/simMunition.h"
17 
18 class DtVectorOutputPort;
19 class DtAnalogOutputPort;
21 class DtVectorInputPort;
25 class DtSimResource;
31 
40 {
41 
42 public:
43 
47  DtLocalObject* owner,
48  DtSimulationServices* simManager,
49  DtComponentDescriptor* desc = nullptr,
50  DtReaderWriterRegistry* parentRegistry = nullptr);
51 
53  virtual ~DtIndirectFireWeaponController() override;
54 
57  virtual const char* type() const override;
58 
59  virtual bool init() override;
60 
62  virtual bool createMountingController() override;
63 
67  virtual void preFirstTickInit() override;
68 
69  virtual void tick() override;
70 
72  virtual bool createTargetPointPort();
74  virtual DtVectorOutputPort * targetPointPort() const;
75 
77  virtual bool createMuzzleSpeedPort();
79  virtual DtAnalogOutputPort * muzzleSpeedPort() const;
80 
82  virtual bool createAngleOfFirePort();
84  virtual DtAnalogOutputPort * angleOfFirePort() const;
85 
87  virtual bool createAlignedDirectlyPort();
89  virtual DtBooleanOutputPort * alignedDirectlyPort() const;
90 
92  virtual bool createMuzzleOffsetPort();
94  virtual DtVectorInputPort * muzzleOffsetPort() const;
95 
99  static DtSimComponent * creator(const DtString& name,
100  DtLocalObject* owner,
101  DtSimulationServices* simManager,
102  DtComponentDescriptor* desc = nullptr,
103  DtReaderWriterRegistry* parentRegistry = nullptr);
104 
105  virtual DtVrfIndirectFirePSR* indirectFireProcessState();
106  virtual const DtVrfIndirectFirePSR* indirectFireProcessState() const;
107 
111  virtual void registerAttributeFunctions() override;
112 
119  static DtReaderWriter* provideWeaponName(void* controller);
121 
124  virtual bool haveAmmo(const DtEntityType & ammoName) const;
125 
129  virtual int ammoAmount(const DtEntityType & ammoName) const;
130 
133  virtual DtEntityType findDefaultAmmo() const;
134 
137  virtual void getMunitionFromResourceName(const DtEntityType & resourceName,
138  DtSimMunition& munition) const;
139 
142  virtual const DtSimResource * lookupMunitionResource(const DtEntityType &
143  resource) const;
145  virtual void setMyFuzeToUse(DtDetonatorFuze fuzeToUse);
147  virtual DtDetonatorFuze fuzeToUse() const;
148 
150  virtual void setCurrentMuzzleSpeed(DtReal speed);
151 
153  virtual DtReal currentMuzzleSpeed() const;
154 
155  virtual void addRangeItems();
156 
161  virtual bool initializeController(const DtEntityType& ammoType,
162  DtReal heightAboveTerrain, const DtUUID & targetName, DtVector targetLocation,
163  bool& waitingForTerrain, DtDetonatorFuze fuseType,
164  bool generateKnownTargetPoint = false, const DtString& knownTargetPointName = "");
165 
166 protected:
167 
169  virtual bool createPorts() override;
170 
180  virtual void lookupAndCacheProcessSR() override;
181 
190  virtual bool calculateTrajectory(const DtVector& shooterLoc, const DtVector& detonationLoc,
191  const double maxRange);
192 
196  virtual void calculateTrajectoryWithHeight(double horizontalDist, double verticalDist,
197  double maxHeight, double& muzzleSpeed, double& launchAngle, double& flightTime);
198 
202  virtual bool calculateElevationAngle(double lateralDist, double verticalDist, double muzzleSpeed,
203  double& angle, double& flightTime, double& maxHeight) const;
204 
209  virtual bool checkMuzzleSpeedAndAngle(double lateralDist, double verticalDist,
210  double speed, double angle, double& flightTime, double& maxHeight) const;
211 
214  virtual void getMunitionResources(std::list<DtEntityType>& resourceList);
215 
217  virtual void updateResourceList();
218 
220  virtual void resetResourceList();
221 
224  static void setPreferredAltitudeCallback(DtSimMessage * msg, void * usrData);
225  virtual void processSetPreferredAltitude(DtSimMessage * msg);
227 
228  virtual AcceptLevel acceptTask(const DtTaskMessage& task) override;
229 
242 
243  //static void indirectFireAtLocationTaskCallback(DtSimMessage* msg, void* usr);
244  //virtual void processIndirectFireAtLocationTask(DtSimMessage* msg);
245 
246 
247  //static void indirectFireAtTargetTaskCallback(DtSimMessage* msg, void* usr);
248  //virtual void processIndirectFireAtTargetTask(DtSimMessage* msg);
250 
252  static void FFEOnTargetCallback(DtSimMessage * msg, void * usr);
253 
260  virtual bool processFFEOnTargetTask(DtSimMessage * msg);
262 
263  virtual bool processFFEOnLocation(DtFireForEffectOnTargetTask* ffeTask);
264  virtual bool processFFEOnEnvironmental(DtFireForEffectOnTargetTask* ffeTask);
265 
278 
279  static void indirectFireAtLocationTaskCallback(DtSimMessage* msg, void* usr);
280  virtual void processIndirectFireAtLocationTask(DtSimMessage* msg);
281 
282 
283  static void indirectFireAtTargetTaskCallback(DtSimMessage* msg, void* usr);
284  virtual void processIndirectFireAtTargetTask(DtSimMessage* msg);
286 
289  virtual void processFFETask(DtFireForEffectTask * task, const DtUUID& targetObj, const DtVector& targetLoc);
290 
293  virtual DtVector computeLeadPosition(const DtVector& position,
294  const DtVector& velocity);
295 
298  virtual const DtVector& muzzleLocalPosition();
299 
302  virtual DtReaderWriter* processProvideWeaponName();
303 
306  virtual double preferredAltitude() const;
307 
310 
313 
317 
318  virtual void enable() override;
319 
320  virtual void disable() override;
321 
322  virtual void clearTask() override;
323 
325  virtual void restartTask();
326 
328  virtual void getOrientation(DtRwString *orientString, DtRwTaitBryan & orientation) const;
329 
330  virtual bool positionWithinTargetRegion(const DtVector& localPos);
331  virtual DtSimTask* createFireTask(const DtRwLocationReference& locRef);
332 
333  virtual double maximumRange();
334  virtual double minimumRange();
335 
336  virtual void parseWeaponParams(const DtRwString* weaponToUse,
337  DtString& weapId, DtString& weapName, DtEntityType& ammoType);
338 
339 protected:
343 
345  DtDetonatorFuze myFuzeToUse;
346 
349 
352 
355 
359 
363 
365 
368 
375 
382 
389 
398 
406 
408 
414 
416  boost::signals2::connection myResourceChangedBySetConnection;
417 };
UUID is a unique ID wrapper class.
Definition: uuid.h:59
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
DtMountingController; models rotation of a launcher.
Definition: mountingController.h:23
virtual void disable() override
Overridden to allow tasks controllers that can be disabled to call task complete. ...
DtBaseWeaponController is a controller that creates the ports needed to choose ammo for...
Definition: baseWeaponController.h:34
DtGenericWeaponInfo * myWeaponInfo
Definition: indirectFireWeaponController.h:415
bool myIsDirectFire
If weapon is capable of directly firing on a target like a naval gun then check if the target is with...
Definition: indirectFireWeaponController.h:413
DtIndirectWeaponComponentInterface * myWeaponComponentInterface
Interface between this weapon controller and the entity&#39;s DtIndirectFireController.
Definition: indirectFireWeaponController.h:342
DtIndirectFireControllerDescriptor; descriptor for the DtIndirectFireController compenent.
Definition: indirectFireControllerDescriptor.h:32
Instances of DtBooleanOutputPort are output ports through which data producers can send boolean data...
Definition: boolIOPort.h:45
AcceptLevel
Levels that a task controller can accept a task it has registered for.
Definition: taskControllerComponent.h:55
virtual const char * type() const override
Returns a string identifies the class type of component. Type values are defined in compTypes...
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
Description: Readable, Writable DtString Variable substitutions are done on this object when it is re...
Definition: rwString.h:20
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:49
Description: Readable, Writable DtTaitBryan.
Definition: rwTaitBryan.h:20
Definition: readerWriterRegistry.h:39
This file contains the class declaration for the.
const DtBaseWeaponController & operator=(const DtBaseWeaponController &orig)
assignment operator; not implemented
Contains class declarations for DtVectorInputPort, DtVectorOutputPort, and DtVectorPortData.
Definition: vectorIOPort.h:27
DtVectorInputPort * myMuzzleOffsetPort
Input Port Name: muzzle-offset-port Input Port Description: The entity&#39;s muzzle offset location...
Definition: indirectFireWeaponController.h:404
DtReal myCurrentElevationAngle
The elevation angle selected for the next shot.
Definition: indirectFireWeaponController.h:354
virtual bool createPorts() override
Overridden to create input &amp; output ports.
DtReal myCurrentMunitionFlightTime
The expected flight time for the next shot.
Definition: indirectFireWeaponController.h:351
Instances of DtAnalogOutputPort are input ports through which data producers can send real numbers...
Definition: analogIOPort.h:45
virtual void lookupAndCacheProcessSR()
This function looks up a process state repository in the process state repository manager by name...
Instances of DtVectorOutputPort are output ports through which data producers can send a DtVector...
Definition: vectorIOPort.h:52
DT_DLL_vrfutil double angle(double vec1[3], double vec2[3])
An implementation of DtWeaponInforInterface that allows for flexible registering of functions from ot...
Definition: genericWeaponInfo.h:17
File: simMsg.h.
Definition: simMessage.h:35
DtIndirectFireWeaponController is a controller that models firing an indirect fire weapon (e...
Definition: indirectFireWeaponController.h:39
virtual void preFirstTickInit() override
This function can be overridden to initialize a component before it is ticked for the first time...
virtual bool createMountingController()
Creates myBaseMountingController.
virtual void tick() override
Sets the current dT on the base mounting controller and ticks it.
DtBooleanOutputPort * myAlignedDirectlyPort
Output Port Name: aligned-directly-port Output Port Description: If the target is close enough for th...
Definition: indirectFireWeaponController.h:397
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
static DtSimComponent * creator(const DtString &name, DtLocalObject *owner, DtSimulationServices *simManager, DtComponentDescriptor *desc=nullptr, DtReaderWriterRegistry *parentRegistry=nullptr)
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:89
DtDetonatorFuze myFuzeToUse
Set based on height above terrain value.
Definition: indirectFireWeaponController.h:345
Represents the interface between the DtIndirectFireController and an indirect fire weapon system...
Definition: indirectWeaponComponentInterface.h:24
virtual void enable() override
Overridden to call registerTaskMsgCallbacks().
DtIndirectFireControllerDescriptor * myIndFireDescriptor
Definition: indirectFireWeaponController.h:364
DtSimResource is a class which will define a SISO Enumeration to use as a resource and the quantity o...
Definition: simResource.h:32
bool myWeaponIsAimed
Whether the weapon is fully aimed at the target, or if adjustments still need to be made...
Definition: indirectFireWeaponController.h:358
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
virtual void clearTask() override
If component is currently tasked, calls clearPendingSubtasks(), sets the tasked flag to false...
DtFireForEffectOnTargetTask represents an artillery task to fire for effect on the specified entity...
Definition: fireForEffectOnTargetTask.h:18
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.
DtAnalogOutputPort * myAngleOfFirePort
Output Port Name: angle-of-fire-port Output Port Description: The elevation angle of fire...
Definition: indirectFireWeaponController.h:388
DtVectorOutputPort * myTargetPointPort
Output Port Name: target-point-port Output Port Description: Local position to fire at...
Definition: indirectFireWeaponController.h:374
virtual bool init() override
Overridden to initialize values obtained from the descriptor.
File: indirectFirePSR.h.
Definition: vrfIndirectFirePSR.h:30
DtSimMunition myMunitionToUse
This could just be a stack variable in tick, but since these are expensive to construct, we create on and reuse it.
Definition: indirectFireWeaponController.h:362
DtAnalogOutputPort * myMuzzleSpeedPort
Output Port Name: muzzle-speed-port Output Port Description: Muzzle speed in m/s. Output Port Range: ...
Definition: indirectFireWeaponController.h:381
DtSimMunition class.
Definition: simMunition.h:31
DtMountingController * myMountingController
Definition: indirectFireWeaponController.h:407
File: fireForEff.h.
Definition: fireForEffectTask.h:32
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
boost::signals2::connection myResourceChangedBySetConnection
Definition: indirectFireWeaponController.h:416
DtReal myCurrentMuzzleSpeed
The muzzle speed selected for the next shot.
Definition: indirectFireWeaponController.h:348
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)