![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: maintainFormationMonitor.h,v $ $Revision: 1.9 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #pragma once 00016 00017 #include "map" 00018 00019 class DtVrfObject; 00020 class DtVrfAggregateStateRepository; 00021 class DtFormationState; 00022 class DtDcm; 00023 class DtVector; 00024 00031 #include "vrfmodel/vrfmodelDefines.h" 00032 class DT_DLL_vrfmodel DtMaintainFormationMonitor 00033 { 00034 public: 00035 00036 enum DtPositionStatus 00037 { 00038 DtUndefinedPosition = -1, 00039 DtInPosition, 00040 DtBehindPosition, 00041 DtAheadOfPosition 00042 }; 00043 00045 typedef std::map<DtVrfObject*, DtPositionStatus> DtAggregatePositionStatusMap; 00046 00047 DtMaintainFormationMonitor(DtVrfObject* entity); 00048 00049 DtMaintainFormationMonitor(const DtMaintainFormationMonitor& orig); 00050 00051 DtMaintainFormationMonitor& operator=(const DtMaintainFormationMonitor& orig); 00052 00053 virtual ~DtMaintainFormationMonitor(); 00054 00055 virtual void tick(); 00056 00060 virtual void setCatchupFactor(double catchUpFactor); 00061 virtual double catchupFactor() const; 00062 00067 virtual void setSlowDownFactor(double slowDownFactor); 00068 virtual double slowDownFactor() const; 00069 00076 virtual void setInPositionTolerance(double tolerance); 00077 virtual double inPositionTolerance() const; 00078 00080 virtual bool positionStatusHasChanged(DtVrfObject* subordinate, 00081 DtPositionStatus status); 00082 00084 virtual DtPositionStatus getPositionStatus(DtVrfObject* subordinate); 00085 00089 virtual void setPositionStatus(DtVrfObject* entity, 00090 DtMaintainFormationMonitor::DtPositionStatus status); 00091 00093 virtual void printPositionStatus(); 00094 00095 protected: 00096 00097 virtual DtPositionStatus positionStatus(const DtVector& geocentricOrigin, 00098 const DtDcm& geocentricOrientation, 00099 const DtVector& geocentricTestPosition, 00100 const DtVector& idealBodyCoordinatesPosition, 00101 double inPositionTolerance); 00102 00103 virtual void sendSpeedControl(DtVrfObject* entity, DtPositionStatus status); 00104 00105 virtual void sendSetSpeedRequest(const DtVrfObject& entity, double speed); 00106 00107 protected: 00108 00109 double myCatchupFactor; 00110 double mySlowDownFactor; 00111 double myInPositionTolerance; 00112 00113 DtVrfObject* myEntity; 00114 DtVrfAggregateStateRepository* myAggregateStateRepository; 00115 DtFormationState* myFormationState; 00116 00117 DtAggregatePositionStatusMap myAggregatePositionStatusMap; 00118 };