![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: disaggregatedFormationController.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00015 00016 #ifndef disaggregatedFormationController_H_ 00017 #define disaggregatedFormationController_H_ 00018 00019 #include <vlutil/vlConfig.h> 00020 #include <vector> 00021 00022 #include "vrfobjcore/cntrlCmpnt.h" 00023 #include "vrfobjcore/orgViewManagedObjList.h" 00024 #include "vrfobjcore/cmdChanRadio.h" 00025 00026 class DtFormationControllerDescriptor; 00027 class DtSimMessage; 00028 class DtFormationState; 00029 class DtVrfAggregateStateRepository; 00030 class DtSubordinateManager; 00031 class DtFormation; 00032 class DtOrganizationManagerNode; 00033 class DtSetDataRequest; 00034 class DtSetDataManager; 00035 class DtFormationPSR; 00036 class DtAggregateObjectParameters; 00037 00065 #include "vrfmodel/vrfmodelDefines.h" 00066 class DT_DLL_vrfmodel DtDisaggregatedFormationController : public DtControllerComponent 00067 { 00068 private: 00070 DtDisaggregatedFormationController(); 00072 DtDisaggregatedFormationController(const DtDisaggregatedFormationController& orig); 00074 DtDisaggregatedFormationController& operator=(const DtDisaggregatedFormationController& orig); 00075 00076 public: 00077 00080 DtDisaggregatedFormationController(const DtString& name, 00081 DtVrfObject* owner, 00082 DtSimManager* simManager, 00083 DtComponentDescriptor* desc = 0, 00084 DtReaderWriterRegistry* parentRegistry = 0); 00085 00086 virtual ~DtDisaggregatedFormationController(); 00087 00094 virtual bool init(); 00095 00098 virtual void tick(); 00099 00102 virtual DtString type() const; 00103 00115 virtual void setRadio(DtSimBaseRadio * radio); 00116 00122 static void setFormationCallback(DtSimMessage * msg, void * usr); 00123 00129 static void setFormationTypeCallback(DtSimMessage * msg, void * usr); 00130 00136 static void setHeadingCallback(DtSimMessage * msg, void * usr); 00137 00143 static void setLocationCallback(DtSimMessage * msg, void * usr); 00144 00150 static void snapIntoFormationCallback(DtSimMessage * msg, void * usr); 00151 00157 static void subordinatesChangedCallback(DtEntityIdentifier entId, void* usr); 00158 00164 static void nodeAddedCallback(DtEntityIdentifier eid, void* userData); 00165 virtual void processNodeAddedCallback(DtEntityIdentifier eid); 00166 00168 virtual void enable(); 00169 00171 virtual void disable(); 00172 00173 public: 00174 00182 static void onTaskNotifyCallback(const DtSimTask & task, 00183 const DtSimComponent ¬ifier, void* usr); 00184 00188 static DtSimComponent * creator(const DtString& name, 00189 DtVrfObject* owner, 00190 DtSimManager* simManager, 00191 DtComponentDescriptor* desc = 0, 00192 DtReaderWriterRegistry* parentRegistry = 0); 00193 00194 protected: 00195 00199 virtual bool formationUpdateIsNeeded() const; 00200 00206 virtual void processSetFormation(DtSimMessage * msg); 00207 00214 virtual void processSetFormationType(DtSimMessage * msg); 00215 00221 virtual void processSetHeading(DtSimMessage * msg); 00222 00228 virtual void processSetLocation(DtSimMessage * msg); 00229 00234 virtual void processSnapIntoFormation(DtSimMessage * msg); 00235 00244 virtual void processSubordinatesChanged(DtEntityIdentifier entId); 00245 00264 virtual void snapIntoFormation(const DtString& formation, 00265 const DtVector& location, double heading, bool applyHeading); 00266 00275 virtual void getCurrentFormation(DtFormation& formation); 00276 00282 virtual DtOrgViewManagedObjectListConstPtr generateListOfSubordinatesEligibleForFormation(); 00283 00289 virtual std::list<int> generateFormationPositions(DtOrgViewManagedObjectListConstPtr& entityInFormation); 00290 00293 virtual int findPositionInVector(const std::vector<DtEntityIdentifier> subordinateList, 00294 const DtEntityIdentifier& entityId) const; 00295 00307 virtual void generateFormationAtPositionAndOrientation(const DtVector& geocentricOrigin, 00308 const DtTaitBryan& geocentricOrientation, std::vector<DtVector> geocentricPositions, 00309 DtFormation& formation); 00310 00315 virtual void generateWorkingFormation(DtFormation& formation); 00316 00319 virtual void updateFormationState(); 00320 00322 virtual void registerWithOrgManager(); 00323 00325 virtual void unregisterWithOrgManager(); 00326 00331 virtual void sendRequestToSelf(const DtSetDataRequest& request) const; 00332 00339 virtual void sendRequestToSubordinate(const DtSetDataRequest& request, 00340 const DtString& subordinateObjectName) const; 00341 00347 virtual bool createPSR(); 00348 00357 virtual void processOnTaskNotifyCallback(const DtSimTask & task, 00358 const DtSimComponent ¬ifier); 00359 00360 static void requestAvailableFormationsCallback(const DtVrfObjectMessage* msg, void* usr); 00361 virtual void processRequestAvailableFormations(const DtVrfObjectMessage* msg); 00362 00365 virtual void addSetDataCallbacks(); 00366 00369 void removeSetDataCallbacks(); 00370 00371 protected: 00372 00374 const DtFormationControllerDescriptor* myFormationControllerDescriptor; 00375 00378 DtVrfAggregateStateRepository* myAggregateStateRepository; 00379 00382 DtFormationState* myFormationState; 00383 00389 bool myRegisteredWithOrgManager; 00390 00393 DtCommandChannelRadio* myCommandChannelRadio; 00394 00397 DtSetDataManager* mySetDataManager; 00398 00401 DtFormationPSR* myProcessState; 00402 00407 bool myFormationCallbacksAreDisabled; 00408 00410 bool myFirstTick; 00411 00412 bool myRegisteredForAddNodeCallback; 00413 00415 const DtAggregateObjectParameters* myAggregateParameters; 00416 }; 00417 00418 #endif 00419