VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/detonationManager.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)