VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
detonationManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 
12 #include <matrix/vlVector.h>
15 #include <mutex>
16 #include <tbb/concurrent_queue.h>
17 #include <boost/signals2.hpp>
18 
22 class DtPhysicalWorld;
23 class Coordinate_System;
24 class SimObjectDetonationCallback;
25 
26 namespace makVrfEvents
27 {
28  class DtEvent;
29 }
30 
51 {
52 public:
53 
54  typedef std::shared_ptr<DtDetonationContext> DtDetonationContextPtr;
56  {
57  DtDamageAdjudicationFunction callbackFcn;
61  };
62 
64  {
66  DtDamageAdjudicationFunction callbackFcn;
68  };
69 
70  typedef std::map<DtSimMunition, double> DtMunitionDamageMap;
72  typedef std::map<DtString, double> DtPowerDamageMap;
73 
75  {
76  DtDamageAdjudicationFunction callbackFcn;
80  };
81 
82  typedef std::list<DtDetonationCallbackInfo> DtDetonationCallbackInfoList;
83 
85  {
88  };
89 
90  typedef std::shared_ptr<DtDirectDetonationTargetInfo> DtDirectDetonationTargetInfoPtr;
91 
92  typedef std::list<DtDirectDetonationTargetInfoPtr> DtDirectDetonationTargetList;
93  typedef std::map<DtUUID, DtDirectDetonationTargetInfoPtr> DtDirectDetonationTargetMap;
94 
95  typedef std::shared_ptr<DtCollateralDetonationTargetInfo> DtCollateralDetonationTargetInfoPtr;
96 
97  typedef std::list<DtCollateralDetonationTargetInfoPtr> DtCollateralDetonationTargetList;
98  typedef std::map<DtUUID, DtCollateralDetonationTargetInfoPtr> DtCollateralDetonationTargetMap;
99 
103 
107  virtual ~DtDetonationManager();
108 
114  virtual bool init();
115 
122  virtual bool reinitialize() override;
123 
125  virtual void tick() override;
126 
130 
134  virtual bool registerDirectDetonation(
135  const DtUUID& entityId, void* callbackObject, DtDamageAdjudicationFunction func) override;
136 
137 
143  virtual bool registerCollateralDetonation(const DtUUID& entityId, DtSimMunition munition, double maxDamageRadius,
144  void* callbackObject, DtDamageAdjudicationFunction func) override;
145 
151  virtual bool registerCollateralDetonationByPower(const DtUUID& entityId, const DtString& powerType,
152  double minDamagePower, void* callbackObject, DtDamageAdjudicationFunction func) override;
153 
161  virtual bool unRegisterDirectDetonationTarget(const DtUUID& entity) override;
162  virtual bool unRegisterCollateralDetonationTarget(const DtUUID& entity) override;
163 
167  const DtUUID& entity, void* callbackObject, DtDamageAdjudicationFunction func) override;
168 
171  virtual bool isTargetInterestedInCollateralDetonation(const DtDetonationCallbackInfo& detonationCbs,
172  double impactRange, double shooterRange, DtDetonationContext& detonationContext) const;
173 
175  virtual void sendDetonationInteraction(const makVrfEvents::DtDetonationEvent& detonation) override;
176 
182  virtual bool loadParametersFromFile(const DtFilename& filename);
183 
184  virtual bool loadDeformationParametersFromFile(const DtFilename & filename);
185 
188  virtual double detonationPower(const DtSimMunition & munition, double rangeFromShooter,
189  double rangeFromImpact, const DtString& powerType) const;
190 
193 
196  virtual DtDetonationResult detonationResult(const DtSimMunition& munition, DtDetonatorFuze fuze,
197  const DtEntityType& targetEntityType, const DtVector& localPosition) const override;
198 
202  virtual DtDetonationResult detonationResult(const DtSimMunition& munition, DtDetonatorFuze fuze,
203  const DtSurface& terrainSurface, const DtVector& localPosition) const override;
204 
208  virtual DtDetonationResult detonationResultMidAir(
209  const DtSimMunition& munition, const DtVector& localPosition) const override;
211 
214  virtual DtDetonationParams* parameters();
215  virtual const DtDetonationParams* parameters() const override;
217 
219  virtual const DtTerrainDeformationParams * terrainDeformationParameters() const override;
220 
222  virtual void resetParameters();
223 
225  virtual bool parametersLoaded() const;
226 
228  virtual const DtFilename& parametersFile() const;
229 
230  virtual const DtFilename& deformationParametersFile() const;
231 
243  virtual void processDetonation(const makVrfEvents::DtDetonationEvent& detonation);
244 
245 protected:
246 
248  virtual double lookupMunitionInMap(const DtMunitionDamageMap& munitionMap,
249  const DtSimMunition & munition) const;
250 
251  virtual void processUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
252 
255  virtual const DtPhysicalWorld* physicalWorld() const;
256  virtual DtPhysicalWorld* physicalWorld();
257 
260  virtual Coordinate_System* coordinateSystem();
261  virtual const Coordinate_System* coordinateSystem() const;
262 
267  virtual void processCollateralDetonationForEntitiesInRange(DtDetonationContext& detonationContext);
268 
270  virtual DtDetonationResult defaultDetonationResult() const;
271 
272  void cleanOutDeadEntities();
273 
277  virtual DtDetonationParams* createParameters();
278 
279  virtual DtTerrainDeformationParams* createDeformationParameters();
280 
282  virtual void detonationEvent(const makVrfEvents::DtEvent&);
283 
284 private:
285 
291 
292 protected:
295 
298 
304 
305  DtFilename myParametersFile;
307 
310 
312 
313  std::recursive_mutex myMutex;
314 
315  bool myCreatedConnections = false;
316 
317  tbb::concurrent_queue<DtQueuedDetonationCallbackInfo> myDetonationCallbackQueue;
318  tbb::concurrent_queue<SimObjectDetonationCallback*> myParallelDetonationQueue;
319 };
UUID is a unique ID wrapper class.
Definition: uuid.h:59
Contains the DtAdsbDataServiceInterface class declaration.
std::shared_ptr< DtCollateralDetonationTargetInfo > DtCollateralDetonationTargetInfoPtr
Definition: detonationManager.h:95
DtCollateralDetonationTargetMap myCollateralDetonationTargetMap
Definition: detonationManager.h:294
virtual void sendDetonationInteraction(const makVrfEvents::DtDetonationEvent &detonation)=0
Send the fully initialized detonation interaction.
DtFilename myParametersFile
Definition: detonationManager.h:305
DtMunitionDamageMap damageByMunitionMap
Definition: detonationManager.h:78
virtual void tick()=0
Tick the detonation manager.
DtDetonationParams * myParameters
Parameters for this detonation manager.
Definition: detonationManager.h:309
Readable-writable class holding all parameters to configure the DtDetonationManager.
Definition: detonationParams.h:22
DtDamageAdjudicationFunction callbackFcn
Definition: detonationManager.h:66
virtual DtDetonationResult detonationResult(const DtSimMunition &munition, DtDetonatorFuze fuze, const DtEntityType &targetEntityType, const DtVector &localPosition) const =0
Returns the detonation result when a munition of the given type hits an entity of the given type...
DtPowerDamageMap damageByPowerMap
Definition: detonationManager.h:79
Definition: detonationManager.h:63
std::list< DtDetonationCallbackInfo > DtDetonationCallbackInfoList
Definition: detonationManager.h:82
Factory for creating DtBaseMunitionDispersalDeterminants.
Definition: baseMunitionDispersalDeterminant.h:50
std::shared_ptr< DtDetonationContext > DtDetonationContextPtr
Definition: detonationManager.h:54
double myMinPowerForDamage
Definition: detonationManager.h:296
virtual bool unRegisterCollateralDetonationCallback(const DtUUID &entity, void *callbackObject, DtDamageAdjudicationFunction func)=0
Removes the given entity callback from the detonation manager&#39;s container of detonation target callba...
DtSimulationServices * mySimulationServices
Definition: detonationManager.h:303
Definition: surface.h:181
Definition: detonationEvent.h:20
virtual bool registerCollateralDetonation(const DtUUID &entityId, DtSimMunition munition, double maxDamageRadius, void *callbackObject, DtDamageAdjudicationFunction func)=0
Use this function to register interest in collateral detonations ie ground detonations from indirect ...
DtMunitionDamageMap DtMunitionMaxRangeMap
Definition: detonationManager.h:71
std::map< DtUUID, DtCollateralDetonationTargetInfoPtr > DtCollateralDetonationTargetMap
Definition: detonationManager.h:98
virtual bool unRegisterDirectDetonationTarget(const DtUUID &entity)=0
Removes the entity from the detonation manager&#39;s container of detonation targets. ...
void * callbackUserData
Definition: detonationManager.h:67
virtual bool reinitialize()=0
Resets the detonation manager to initial state.
The DtPhysicalWorld is the primary interface to and manager of all of the &quot;physical&quot; aspects of the s...
Definition: physicalWorld.h:112
Definition: coordSystem.h:54
Definition: event.h:13
Definition: detonationDeformationParams.h:9
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Factory for creating power range determinants.
Definition: powerRangeDeterminant.h:117
DtUUID globalId
Definition: detonationManager.h:65
DtDirectDetonationTargetMap myDirectDetonationTargetMap
Definition: detonationManager.h:293
bool myQueueEntitiesToBeRemoved
After all the callbacks have been made those who&#39;ve been destroyed or asked to unregistered need to b...
Definition: detonationManager.h:301
std::list< DtCollateralDetonationTargetInfoPtr > DtCollateralDetonationTargetList
Definition: detonationManager.h:97
void * callbackUserData
Definition: detonationManager.h:77
DtDetonationServiceInterface & operator=(const DtDetonationServiceInterface &)
DtDetonationCallbackInfoList callbacks
Definition: detonationManager.h:87
std::map< DtSimMunition, double > DtMunitionDamageMap
Definition: detonationManager.h:70
DtFilename myDeformationParamsFile
Definition: detonationManager.h:306
The DtDetonationContext contains all the information necessary for processing a Detonation Interactio...
Definition: detonationContext.h:23
tbb::concurrent_queue< SimObjectDetonationCallback * > myParallelDetonationQueue
Definition: detonationManager.h:318
std::recursive_mutex myMutex
Definition: detonationManager.h:313
std::map< DtUUID, DtDirectDetonationTargetInfoPtr > DtDirectDetonationTargetMap
Definition: detonationManager.h:93
DtMunitionMaxRangeMap myMaxRangeForSpecificMunitionDamage
Definition: detonationManager.h:297
DtDamageAdjudicationFunction callbackFcn
Definition: detonationManager.h:76
Definition: detonationManager.h:74
DtTerrainDeformationParams * myDeformationParams
Definition: detonationManager.h:311
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
DtDamageAdjudicationFunction callbackFcn
Definition: detonationManager.h:57
std::list< DtDirectDetonationTargetInfoPtr > DtDirectDetonationTargetList
Definition: detonationManager.h:92
Definition: detonationManager.h:55
virtual const DtTerrainDeformationParams * terrainDeformationParameters() const =0
DtUUID globalId
Definition: detonationManager.h:86
virtual bool registerCollateralDetonationByPower(const DtUUID &entityId, const DtString &powerType, double minDamagePower, void *callbackObject, DtDamageAdjudicationFunction func)=0
Use this function to register interest in collateral detonations ie ground detonations from indirect ...
virtual const DtDetonationParams * parameters() const =0
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtDetonationContext context
TODO this is performing a copy, maybe I should use a unique pointer.
Definition: detonationManager.h:60
virtual bool unRegisterCollateralDetonationTarget(const DtUUID &entity)=0
std::map< DtString, double > DtPowerDamageMap
Definition: detonationManager.h:72
std::shared_ptr< DtDirectDetonationTargetInfo > DtDirectDetonationTargetInfoPtr
Definition: detonationManager.h:90
DtSimMunition class.
Definition: simMunition.h:31
tbb::concurrent_queue< DtQueuedDetonationCallbackInfo > myDetonationCallbackQueue
Definition: detonationManager.h:317
std::list< DtUUID > myEntitiesQueuedToBeRemovedList
Definition: detonationManager.h:302
void * callbackUserData
Definition: detonationManager.h:58
Abstract interface class to the detonation service. This service provides information about detonatio...
Definition: detonationServiceInterface.h:34
virtual bool registerDirectDetonation(const DtUUID &entityId, void *callbackObject, DtDamageAdjudicationFunction func)=0
Use this function to register interest in direct detonations ie entity impact or entity proximate det...
The DtDetonationManager class exists to centralize the processing of detonation interactions. Components register with the detonation manager, providing a pointer to a DtSimObject as well as the objects global designator, and a damage adjudication function to call when the detonation affects the registered sim object. The detonation manager determines the entity or entities the detonation affects, and notifies them and only them through the supplied callback functions.
Definition: detonationManager.h:50
virtual DtDetonationResult detonationResultMidAir(const DtSimMunition &munition, const DtVector &localPosition) const =0
Returns the detonation result for a munition of the given type that when it detonates in mid-air...

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)