![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: railMovementController.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ** Created: 4/20/10 MEM 00008 *******************************************************************************/ 00009 00012 00015 00016 #pragma once 00017 00018 #include "vrfobjcore/singleTaskControllerComponent.h" 00019 #include <matrix/vlVector.h> 00020 #include <list> 00021 #include "vrfutil/rwRailSegment.h" 00022 #include "vrfobjcore/railMovementControllerPSR.h" 00023 #include "vrfutil/rwTemplatedList.h" 00024 #include "vrfmodel/railObstructionInfo.h" 00025 00026 class DtRailSegment; 00027 class DtRailMovementDescriptor; 00028 class DtRailMovementDriver; 00029 class DtRailMovementUpdater; 00030 class DtRailMoveAlongTask; 00031 class DtVrfMovingObjectStateRepository; 00032 class DtRailObstructionFinder; 00033 class DtBoolSetting; 00034 00043 #include "vrfmodel/vrfmodelDefines.h" 00044 class DT_DLL_vrfmodel DtRailMovementController : public 00045 DtSingleTaskControllerComponent 00046 { 00047 public: 00050 DtRailMovementController(const DtString& name, 00051 DtVrfObject* owner, 00052 DtSimManager* simManager, 00053 DtComponentDescriptor* desc = 0, 00054 DtReaderWriterRegistry* parentRegistry = 0); 00055 00057 virtual ~DtRailMovementController(); 00058 00061 virtual DtString type() const; 00062 00064 virtual bool init(); 00065 00071 virtual void tick(); 00072 00073 virtual void clear(); 00074 00075 virtual bool tickWhileDestroyed() const; 00076 00078 static void settingConsumerCallback( const DtSettingsObject* settingsObject, void* usr); 00079 00083 static void moveAlongCallback(DtSimMessage * msg, void * usr); 00084 00087 virtual void processMoveAlongTask(DtSimMessage * msg); 00088 00090 virtual void registerTaskMsgCallbacks(); 00091 00092 static void setConvoyFollowCallback(DtSimMessage * msg, void * usrData); 00093 00094 virtual void setCurrentMovementState(DtRailMovementState state); 00095 virtual DtRailMovementState currentMovementState() const; 00096 00098 virtual DtRailSegment * nextSegment(); 00099 00100 virtual bool drivingOnLeftEnabled() const; 00101 00103 virtual const int turnDirection() const; 00104 virtual void setTurnDirection(const int turn); 00105 00106 virtual bool turning() const; 00107 virtual void setTurning(bool turn); 00108 00110 virtual const int currentLane() const; 00111 virtual void setCurrentLane(const int lane); 00112 00114 virtual const int passingLane() const; 00115 virtual void setPassingLane(const int lane); 00116 00119 virtual void setFollowThreshold(const double); 00120 virtual const double followThreshold() const; 00121 00124 virtual const double followSpeedFactor() const; 00125 00127 virtual DtRailSegmentList * pathList(); 00128 virtual const DtRailSegmentList * pathList() const; 00129 00136 virtual bool setUpDestination(DtRailSegment * seg,bool incrementSegmentIndex = true,bool useCurrentPos = false,DtVector pos = DtVector::zero()); 00137 00139 double getDistanceSqAlongSeg(const DtVector & destination); 00140 00142 double getDistanceBehindConvoyTarget(DtVrfObject * convoyTgt); 00143 00146 virtual double travelDistanceSq(); 00147 00150 virtual bool ifDrawDebugRoutes() const; 00151 virtual void drawDebugSplineTurnRoute(const DtVector & ee,const DtVector & md,const DtVector & ex); 00152 00153 virtual DtVrfObject* getObjectFromObstruction(DtRailObstructionPtr &obs); 00154 00158 static DtSimComponent * creator(const DtString& name, 00159 DtVrfObject* owner, 00160 DtSimManager* simManager, 00161 DtComponentDescriptor* desc = 0, 00162 DtReaderWriterRegistry* parentRegistry = 0); 00163 00164 protected: 00165 00167 DtRailMovementController(); 00168 00170 DtRailMovementController( 00171 const DtRailMovementController& orig); 00172 00174 DtRailMovementController& operator=( 00175 const DtRailMovementController& orig); 00176 00177 virtual bool createPSR(); 00178 00180 virtual void processSetting( const DtBoolSetting* setting); 00181 00182 virtual void processSetConvoyFollowCallback(DtSimMessage * msg); 00183 00186 virtual bool initializeCurrentState(DtRailMoveAlongTask * task); 00187 00189 virtual bool setUpRoute(const DtRwTemplatedListPtr<DtRwRailSegment>& path); 00190 00194 virtual int entryLanePosition(double heading,unsigned int numLanes); 00195 00196 virtual void checkMovementState(const int passingLane); 00197 00200 virtual void clearTask(); 00201 00202 virtual bool decideToGiveUpTask() const; 00203 00206 virtual int findObstructionsAndAdjust(DtRailObstructionFinder* obsFinder, 00207 const DtRailMovementDriver* railDriver, const DtVrfObject* entity, const DtVrfObject* convoyTgt, 00208 const int drivingLane, const int passingLane, double &drivingSpeed); 00209 00211 virtual void testObstructionFinder(const int drivingLane,const double drivingSpeed); 00212 00213 00214 protected: 00215 00216 DtVector myLocalDestination; 00217 DtRailSegmentList myPath; 00218 //This points to the upcoming segment, not the one we are currently on. 00219 DtRailSegmentListIterator myPathIterator; 00220 DtRailMovementControllerPSR* myProcessState; 00221 00222 bool myFirstTick; 00223 double myTurnDistanceSq; 00224 int myTurnDirection; 00225 bool myDrivingOnLeft; 00226 00227 DtVrfMovingObjectStateRepository * myMovingStateRep; 00228 DtRailSegment * myCurrentSegment; 00229 DtRailSegment * myNextSegment; 00230 00233 DtRailMovementDriver * myRailDriver; 00236 DtRailMovementUpdater * myRailUpdater; 00237 DtVector myPassingPoint; 00238 00239 bool myNotInitialized; 00240 00241 const DtRailMovementDescriptor* myRailMoveDescriptor; 00242 00243 DtRailObstructionFinder* myObstructionFinder; 00244 00247 std::list<DtString> myTurnBugNameList; 00248 }; 00249 00250 00251 00252 00253