![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: disaggregatedMoveAlongController.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00015 00016 #ifndef disaggregatedMoveAlongController_H_ 00017 #define disaggregatedMoveAlongController_H_ 00018 00019 #include <vlutil/vlConfig.h> 00020 #include <vector> 00021 00022 #include "vrfobjcore/singleTaskControllerComponent.h" 00023 #include "vrfmodel/entityRouteFollowingData.h" 00024 #include "vrfmodel/entityRouteTraversalState.h" 00025 #include "vrfobjcore/cmdChanRadio.h" 00026 00027 class DtVrfAggregateStateRepository; 00028 class DtFormationState; 00029 class DtMoveAlongTask; 00030 class DtSimMessage; 00031 class DtAggregateMoveAlongPSR; 00032 class DtAggregateMoveAlongDescriptor; 00033 class DtSetDataRequest; 00034 class DtVrfObjectManager; 00035 class DtMaintainFormationMonitor; 00036 00068 #include "vrfmodel/vrfmodelDefines.h" 00069 class DT_DLL_vrfmodel DtDisaggregatedMoveAlongController : public DtSingleTaskControllerComponent 00070 { 00071 public: 00072 00075 DtDisaggregatedMoveAlongController (const DtString& name, 00076 DtVrfObject* owner, 00077 DtSimManager* simManager, 00078 DtComponentDescriptor* desc = 0, 00079 DtReaderWriterRegistry* parentRegistry = 0); 00080 00081 00083 virtual ~DtDisaggregatedMoveAlongController(); 00084 00087 virtual DtString type() const; 00088 00094 virtual bool init(); 00095 00101 virtual void registerTaskMsgCallbacks(); 00102 00112 virtual void tick(); 00113 00119 virtual void clearTask(); 00120 00126 virtual bool createPSR(); 00127 00130 virtual DtSimTaskStatePtr currentTaskState() const; 00131 00138 static void moveAlongTaskCallback(DtSimMessage * msg, void * usr, DtSimTaskStatePtr taskState); 00139 00146 static void taskCompleteReportCallback(DtSimMessage * msg, void * usr); 00147 00155 static void formationChangedCallback(const DtFormationState& formationState, 00156 void* usr); 00157 00164 static void routeChangedCallback(DtVrfObject* obj, void * usr); 00165 00172 static void objectAddedCb(DtVrfObject * vrfObject, void * usr); 00173 00179 static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr); 00180 00188 static void objectManagerRemoveAndDeleteAllCallback( 00189 const DtVrfObjectManager& objectManager, void* usr); 00190 00194 static DtSimComponent * creator(const DtString& name, 00195 DtVrfObject* owner, 00196 DtSimManager* simManager, 00197 DtComponentDescriptor* desc = 0, 00198 DtReaderWriterRegistry* parentRegistry = 0); 00199 00200 protected: 00201 00216 virtual void initializeMoveAlongTask(DtVrfObject& route, DtIteratorDirection traversalDirection, 00217 bool startAtClosestPoint, DtSimTaskStatePtr taskState); 00218 00224 virtual void processFormationChanged(const DtFormationState& formationState); 00225 00229 virtual void processMoveAlongTask(DtSimMessage * msg, DtSimTaskStatePtr taskState); 00230 00236 virtual void processTaskComplete(DtSimMessage * msg); 00237 00241 virtual void processRouteChanged(const DtVrfObject& obj); 00242 00249 virtual void processObjectAdded(DtVrfObject * vrfObject); 00250 00257 virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject); 00258 00264 virtual void moveTo(const DtString& routeName, 00265 bool traverseForward); 00266 00277 virtual void moveAlong(const DtString& route, bool traverseForward, bool startAtClosestPoint); 00278 00285 virtual void generateFormationRoutes(const DtVrfObject& route, 00286 bool reverseDirection); 00287 00293 virtual void buildEntityRouteFollowingMap( 00294 std::map<DtVrfObject*, DtEntityRouteFollowingData>& map); 00295 00302 virtual void sendTaskToSubordinate(const DtSimTask& task, 00303 const DtString& subordinateObjectName) const; 00304 00311 virtual void sendSetDataToSubordinate(const DtSetDataRequest& setData, 00312 const DtString& subordinateObjectName) const; 00313 00315 virtual void deleteFormationRoutes(); 00316 00323 virtual void onObjectManagerRemoveAndDeleteAll(const DtVrfObjectManager& objectManager); 00324 00337 virtual bool calculateInitialPositionAndHeadingAlongRoute(const DtVrfObject& route, 00338 bool traverseForward, DtVector& initialPosition, double& initialHeading); 00339 00346 virtual void sendVrfObjectModifyMsg(const DtEntityIdentifier& id, DtList* vertices) const; 00347 00350 virtual void initializeNextRouteIndex(); 00351 00353 virtual unsigned int nextRouteIndex(); 00354 00374 virtual bool buildOffsetRoute(const DtList& localRouteVertexList, 00375 const DtVector& bodyOffset, 00376 bool reverseDirection, 00377 bool generateRoutesWithRoundedCorners, 00378 double vertexSpacingAlongRoundedCorners, 00379 DtList& geocentricOffsetRouteVertexList); 00380 00388 virtual void registerRouteCallbacksIfNeeded(); 00389 00395 virtual void initializeMemberDataFromDescriptor( 00396 const DtAggregateMoveAlongDescriptor& desc); 00397 00403 virtual void maintainMovementInFormation(); 00404 00410 virtual void reevaluateMoveAlongAssignments(); 00411 00418 virtual void sendClearTask(const DtString& recipientName, int taskType) const; 00419 00426 virtual bool adjustOffsetRouteStart(std::vector<DtVector>& route) const; 00427 00434 virtual bool adjustOffsetRouteEnd(std::vector<DtVector>& route) const; 00435 00441 virtual bool extendRouteStart(std::vector<DtVector>& route, 00442 double distance) const; 00443 00450 virtual bool clipRouteEnd(std::vector<DtVector>& route, double distance) const; 00451 00456 virtual DtMaintainFormationMonitor* createFormationMonitor(DtVrfObject* entity) const; 00457 00460 virtual bool publishFormationRoutes() const; 00461 00464 virtual bool shouldGroundClamp() const; 00465 00466 private: 00467 00469 DtDisaggregatedMoveAlongController(); 00470 00472 DtDisaggregatedMoveAlongController(const DtDisaggregatedMoveAlongController& orig); 00473 00475 DtDisaggregatedMoveAlongController& operator=(const DtDisaggregatedMoveAlongController& orig); 00476 00477 protected: 00478 00480 std::map<int, DtString> myPromotionIndexRouteNameMap; 00481 00486 DtMaintainFormationMonitor* myMaintainFormationMonitor; 00487 00490 double myMaintainFormationTickInterval; 00491 00493 double myTimeToNextMaintainFormationTick; 00494 00496 std::map<DtVrfObject*, DtEntityRouteFollowingData> myEntityRouteFollowingMap; 00497 00499 std::map<DtVrfObject*, DtEntityRouteTraversalState> myEntityRouteTraversalStateMap; 00500 00503 DtVrfAggregateStateRepository* myAggregateStateRepository; 00504 00507 DtFormationState* myFormationState; 00508 00512 DtCommandChannelRadio* myCommandRadio; 00513 00516 bool myGenerateRoutesWithRoundedCorners; 00517 00520 double myVertexSpacingAlongRoundedCorners; 00521 00524 DtAggregateMoveAlongPSR* myProcessState; 00525 00527 const DtAggregateMoveAlongDescriptor* myAggregateMoveAlongDescriptor; 00528 00531 bool myRegisteredFormationChangedCallback; 00532 00536 bool myRegisteredObjectCallbacks; 00537 00539 bool myFirstTick; 00540 00543 unsigned int myNextRouteIndex; 00544 00545 DtSimTaskStatePtr myCachedTaskState; 00546 }; 00547 00548 #endif