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

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)