![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: detonationManager.h,v $ $Revision: 1.22 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef detonationManager_H_ 00009 #define detonationManager_H_ 00010 00013 00014 #include <matrix/vlVector.h> 00015 #include "vrfobjcore/detonationContext.h" 00016 00017 #include <vl/detonateInter.h> 00018 #include "vrfobjcore/vrfObjMgr.h" 00019 #include "vrfobjcore/vrfObject.h" 00020 #include "vrfobjcore/vrfKinState.h" 00021 #include "vrftasks/radioMsgTypes.h" 00022 #include "vrfobjcore/baseRadio.h" 00023 #include "vrfobjcore/vrfObjSR.h" 00024 00025 #include "vrfcore/simMgr.h" 00026 #include "vrfutil/kinTools.h" 00027 #include "vrfobjparam/dmgCompDesc.h" 00028 #include "vrfobjcore/compTypes.h" 00029 #include "vrfobjcore/objectGeometricModel.h" 00030 #include <vlutil/vlConfig.h> 00031 #include <map> 00032 #include <vlutil/vlSmartPointers.h> 00033 00034 00055 #include "vrfobjcore/vrfobjcoreDefines.h" 00056 class DT_DLL_vrfobjcore DtDetonationManager 00057 { 00058 public: 00059 00060 typedef bool (*DtDamageAdjudicationFunction)(const DtDetonationContext& detonationContext, void* usr); 00061 00062 struct DtDirectDetonationTargetInfo 00063 { 00064 DtVrfObject* vrfObject; 00065 DtGlobalObjectDesignator globalId; 00066 DtDamageAdjudicationFunction callbackFcn; 00067 void* callbackUserData; 00068 }; 00069 00070 typedef std::map<DtSimMunition,double> DtMunitionDamageMap; 00071 00072 struct DtCollateralDetonationTargetInfo 00073 { 00074 DtVrfObject* vrfObject; 00075 DtGlobalObjectDesignator globalId; 00076 DtMunitionDamageMap damageMap; 00077 DtDamageAdjudicationFunction callbackFcn; 00078 void* callbackUserData; 00079 }; 00080 00081 typedef DtBoost::shared_ptr<DtDirectDetonationTargetInfo> DtDirectDetonationTargetInfoPtr; 00082 00083 typedef std::list<DtDirectDetonationTargetInfoPtr> DtDirectDetonationTargetList; 00084 typedef std::map<std::string, DtDirectDetonationTargetInfoPtr> DtDirectDetonationTargetMap; 00085 00086 typedef DtBoost::shared_ptr<DtCollateralDetonationTargetInfo> DtCollateralDetonationTargetInfoPtr; 00087 00088 typedef std::list<DtCollateralDetonationTargetInfoPtr> DtCollateralDetonationTargetList; 00089 typedef std::map<std::string, DtCollateralDetonationTargetInfoPtr> DtCollateralDetonationTargetMap; 00090 00093 DtDetonationManager(DtSimManager& simManager); 00094 00098 virtual ~DtDetonationManager(); 00099 00105 virtual bool init(); 00106 00113 virtual bool reinitialize(); 00114 00118 00122 virtual bool registerDirectDetonation(DtVrfObject& entity, 00123 DtGlobalObjectDesignator entityId, void* callbackObject, DtDamageAdjudicationFunction func); 00124 00125 00131 virtual bool registerCollateralDetonation(DtVrfObject& entity, 00132 DtGlobalObjectDesignator entityId, DtSimMunition munition, double maxDamageRadius,void* callbackObject, 00133 DtDamageAdjudicationFunction func); 00134 00142 virtual bool unRegisterDirectDetonationTarget(DtVrfObject& entity); 00143 virtual bool unRegisterCollateralDetonationTarget(DtVrfObject& entity); 00144 00146 virtual double lookupMunitionInCollateralDetonationMap( 00147 DtCollateralDetonationTargetInfoPtr targetPtr, const DtSimMunition & munition); 00148 00150 virtual void sendDetonationInteraction(DtDetonationInteraction& detonation); 00151 00152 protected: 00153 00163 static void detonationCallback(DtDetonationInteraction* detInter, void* usr); 00164 00165 static void nameChangeCallback(const DtVrfObjectNameChangedCallbackInfo& change, void * usr); 00166 00167 virtual void processNameChange(const DtVrfObjectNameChangedCallbackInfo& change); 00168 00180 virtual void processDetonation(const DtDetonationInteraction& detonation); 00181 00184 virtual const DtPhysicalWorld* physicalWorld() const; 00185 virtual DtPhysicalWorld* physicalWorld(); 00186 00189 virtual Coordinate_System* coordinateSystem(); 00190 virtual const Coordinate_System* coordinateSystem() const; 00191 00196 virtual void processCollateralDetonationForEntitiesInRange(DtDetonationContext& detonationContext); 00197 00202 bool testInvariant() const; 00203 00204 void cleanOutDeadEntities(); 00205 00206 private: 00207 00210 DtDetonationManager(const DtDetonationManager& orig); 00212 DtDetonationManager& operator=(const DtDetonationManager& other); 00213 00214 protected: 00215 00216 DtDirectDetonationTargetMap myDirectDetonationTargetMap; 00217 DtCollateralDetonationTargetMap myCollateralDetonationTargetMap; 00220 bool myQueueEntitiesToBeRemoved; 00221 std::list<std::string> myEntitiesQueuedToBeRemovedList; 00222 DtSimManager& mySimManager; 00223 }; 00224 00225 00226 #endif 00227 00228 00229