![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: autoAggregateDisaggregateController.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef autoAggregateDisaggregateController_H_ 00013 #define autoAggregateDisaggregateController_H_ 00014 00015 #include "vrfobjcore/cntrlCmpnt.h" 00016 #include "vrfobjcore/simRadio.h" 00017 #include "vrfobjcore/compositePred.h" 00018 #include "geometry/polygon2D.h" 00019 #include "vrfmodel/vrfmodelDefines.h" 00020 00021 class DtSettingsObject; 00022 class DtBoolSetting; 00023 class DtVrfAggregateStateRepository; 00024 00031 class DT_DLL_vrfmodel DtAutoAggregateDisaggregateController : public DtControllerComponent 00032 { 00033 public: 00034 00035 typedef enum DtResolutionTransitionMode 00036 { 00037 DtNotTransitioning, 00038 DtDisaggregating, 00039 DtAggregating 00040 } DtResolutionTransitionMode; 00041 00043 DtAutoAggregateDisaggregateController(const DtString & name, DtVrfObject* owner, 00044 DtSimManager * simManager, DtComponentDescriptor* desc = NULL, 00045 DtReaderWriterRegistry * parentRegistry = 0); 00046 00048 virtual ~DtAutoAggregateDisaggregateController(); 00049 00051 virtual bool init(); 00052 00055 virtual DtString type() const; 00056 00058 virtual void tick(); 00059 00060 public: 00061 00064 static void settingConsumerCallback( const DtSettingsObject* settingsObject, void* usr); 00065 00067 static DtSimComponent* creator(const DtString & name, DtVrfObject* owner, 00068 DtSimManager * simManager, DtComponentDescriptor* desc, 00069 DtReaderWriterRegistry * parentRegistry); 00070 00071 protected: 00072 00073 virtual void startAutoAggregating(); 00074 00075 virtual bool autoAggregatingIsComplete(); 00076 00077 virtual void onAutoAggregationComplete(); 00078 00079 virtual void startAutoDisaggregation(); 00080 00081 virtual bool autoDisaggregatingIsComplete(); 00082 00083 virtual void onAutoDisaggregationComplete(); 00084 00087 virtual bool insideDisaggregationArea() const; 00088 00090 virtual bool withinDisaggregationDistanceOfHostileEntity() const; 00091 00093 virtual void processSetting( const DtBoolSetting* setting); 00094 00096 virtual void sendAggregateStateRequest(DtAggregateState aggregateState); 00097 00099 DtAutoAggregateDisaggregateController(const DtAutoAggregateDisaggregateController& orig); 00100 00102 DtAutoAggregateDisaggregateController& operator=(const DtAutoAggregateDisaggregateController& orig); 00103 00104 virtual bool shouldDisaggregate() const; 00105 00106 virtual bool shouldAggregate() const; 00107 00108 virtual bool autoAggregationDisaggregationEnabled() const; 00109 00111 virtual void initLocalToAggregateCoordTransform( 00112 const DtVector& aggregateLocalPostion, double aggregateHeading, 00113 DtCoordTransform& resultTransform) const; 00114 00115 virtual DtManagedObjectListConstPtr disaggregationAreas() const; 00116 00117 virtual void initBodyToLocalTransform(const DtVector& localPosition, 00118 const DtDcm& localToBodyDcm, DtCoordTransform& bodyToLocalTransform) const; 00119 00120 virtual void initLocalToTopoTransform( 00121 const DtVector& localPosition, DtCoordTransform& transform) const; 00122 00123 virtual void getAggregatedFootprint( 00124 const DtCoordTransform& bodyToLocalTransform, 00125 const DtCoordTransform& localToTopoTranform, 00126 DtPolygon2D::DtVertexContainer& vertices) const; 00127 00128 void getDisaggregatedFootprint( 00129 const DtCoordTransform& bodyToLocalTransform, 00130 const DtCoordTransform& localToTopoTransform, 00131 DtPolygon2D::DtVertexContainer& vertices) const; 00132 00133 void getTranslatedFootprint( 00134 double halfLength, 00135 double halfWidth, 00136 double halfHeight, 00137 const DtCoordTransform& bodyToLocalTransform, 00138 const DtCoordTransform& localToTopoTransform, 00139 DtPolygon2D::DtVertexContainer& vertices) const; 00140 00141 virtual void getLocalAreaFootprint( 00142 const DtVrfObject& object, 00143 const DtCoordTransform& localToTopoTransform, 00144 DtPolygon2D::DtVertexContainer& vertices) const; 00145 00146 virtual DtManagedObjectListConstPtr getHostileEntityList() const; 00147 00148 virtual DtManagedObjectListConstPtr getHostileAggregateList() const; 00149 00150 virtual bool withinDisaggregationDistance( const DtVrfObject& target) const; 00151 00155 virtual double maxDisaggregationDistance(const DtVrfObject& target) const; 00156 00157 protected: 00158 00159 DtVrfObjectManager* myObjectManager; 00160 00161 DtVrfAggregateStateRepository* myAggregateStateRepository; 00162 00163 DtResolutionTransitionMode myTransitionMode; 00164 00167 bool myAutoAggregationDisaggrationEnabled; 00168 00170 DtVrfObject* myAggregatedFootprintDebuggingObject; 00171 DtVrfObject* myDisaggregatedFootprintDebuggingObject; 00172 00173 mutable DtManagedObjectListConstPtr myHostileAggregateList; 00174 mutable DtManagedObjectListConstPtr myHostileEntityList; 00175 mutable DtManagedObjectListConstPtr myDisaggregationAreasList; 00176 }; 00177 00178 #endif