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

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)