![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: railMovementUpdater.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ** Created: 4/11/10 MEM 00008 *******************************************************************************/ 00009 00012 00014 00015 #pragma once 00016 00017 //#include "railPSR.h" 00018 #include <vector> 00019 #include <matrix/vlVector.h> 00020 #include <matrix/vlTaitBryan.h> 00021 #include <matrix/coordTransform.h> 00022 00023 #include "vrfmodel/railSplineCalculator.h" 00024 00025 class DtVrfMovingObjectStateRepository; 00026 class DtRailMovementController; 00027 class DtRailSegment; 00028 class DtAttachedTerrain; 00029 00030 00039 #include "vrfmodel/vrfmodelDefines.h" 00040 class DT_DLL_vrfmodel DtRailMovementUpdater 00041 { 00042 00043 public: 00044 00046 DtRailMovementUpdater(DtRailMovementController * parentController, bool useTurnSmoothing, 00047 bool useAcceleration,bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain); 00048 00050 virtual ~DtRailMovementUpdater(); 00051 00053 virtual bool init(); 00054 00055 virtual void clear(); 00056 00057 virtual void setEntityState(DtVrfMovingObjectStateRepository* state); 00058 00063 virtual double setUpTurn(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane, 00064 const int drivingLane,double headingDiff,bool useLocalPos = false,DtVector currentLocalPos = DtVector::zero()); 00065 00068 virtual bool turnValid(int currentLane); 00069 00070 virtual bool recalculateTurnSpline(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane, 00071 const int passingLane); 00072 00075 virtual bool modifyTurnSpline(const DtVector ¤tLocalPos,const DtRailSegment * currentSegment,const DtRailSegment * nextSegment, const int currentLane, const int passingLane); 00076 00078 virtual void setUpLaneSwitch(const DtVector& projectedLocation,DtRailSegment *currentSeg,const int currentLane, 00079 const int passingLane); 00080 00082 virtual void update(DtRailSegment *currentSeg,DtRailSegment* nextSeg, 00083 double drivingSpeed,int passingLane, DtTime simTime = 0.0); 00084 00086 virtual void updateNoMovement(); 00087 00090 virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg); 00091 00094 00098 virtual const DtCoordTransform & localToBodyTransform() const; 00099 00101 00102 protected: 00103 00110 virtual void useFuel(double fuelUsed); 00111 00112 virtual bool checkEntityImmobilized(); 00113 00119 virtual double fuelLeft() const; 00120 00138 virtual void updateRepository(const DtVector & localPosition, 00139 const DtVector & localVelocity, const DtVector & localAcceleration, 00140 const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity, 00141 double newHeading); 00142 00146 virtual double calculateAcceleration(double desiredSpeed); 00147 00161 virtual void calculateOrientationAndPosition( 00162 const DtVector& newLocalProjectedLocation, double newHeading, 00163 DtDcm& newLocalOrientation, DtVector& newLocalPosition); 00164 00176 bool groundClamp(double heading, const DtVector& location, 00177 DtAttachedTerrain& terrain, DtVector& newNormal); 00178 00183 void groundClampHighFidelity(double heading, const DtVector& location, 00184 DtAttachedTerrain& terrain, DtVector& newNormal); 00185 00191 void groundClampLowFidelity(double heading, const DtVector& location, 00192 DtAttachedTerrain& terrain, DtVector& newNormal); 00193 00195 virtual DtVector calculateRotationalVelocity( 00196 const DtTaitBryan& newTopoOrientation, 00197 const DtTaitBryan& oldTopoOrientation, double dT); 00198 00202 virtual void calculateDirectionOfLinearMotion( 00203 const DtDcm& newLocalOrientation, const DtVector& newLocalPosition, 00204 DtDcm& newLocalDirectionOfLinearMotion); 00205 00208 virtual DtVector calculateBodyAcceleration(double desiredSpeed, 00209 const DtVector& oldBodyVelocity,double dT); 00210 00211 virtual DtVector calculateBodyVelocity( 00212 const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration, 00213 double dT); 00214 00215 virtual DtVector calculateProjectedLocation( 00216 const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration, 00217 const DtVector& oldBodyVelocity,const DtVector & newBodyVelocity, double newHeading); 00218 00222 virtual bool rotationalVelocityShouldBeClamped(const DtVector& 00223 bodyRotationalVelocity); 00224 00228 virtual bool passedTurnPoint(double distSq, double & differance); 00229 00230 00242 virtual DtVector determinePositionAlongNextSegment(DtRailSegment * nextSegment,double distance, double & newHeading, 00243 int lanePos, DtVector projectedPos); 00244 00245 00247 virtual void determinePosition(const DtRailSegment * currentSeg,const double distSq,const int currentLane, 00248 DtVector& newLocalProjectedLocation); 00249 00250 00251 private: 00253 DtRailMovementUpdater(); 00254 00256 DtRailMovementUpdater(const DtRailMovementUpdater & orig); 00257 00259 const DtRailMovementUpdater & operator=(const 00260 DtRailMovementUpdater & orig); 00261 00262 protected: 00263 DtRailMovementController * myController; 00264 DtVrfMovingObjectStateRepository * myMovingStateRep; 00268 const DtAttachedTerrain* myAttachedTerrain; 00269 DtCoordTransform myCoordTransform; 00270 bool myUseHighFidelityGroundClamping; 00271 00272 bool myUseAcceleration; 00273 bool myUseTurnSmoothing; 00274 00277 double myDistanceSqToTurn; 00280 double myHeadingDiff; 00281 00283 DtRailSplineCalculator myTurnSpline; 00284 00286 DtRailSplineCalculator myLaneSwitchSpline; 00288 double myTurnDistTraveled; 00289 double myDistAlongSeg; 00290 00291 }; 00292 00293 00294