VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
railMovementUpdater.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 //#include "railPSR.h"
14 #include <vector>
15 #include <matrix/vlVector.h>
16 #include <matrix/vlTaitBryan.h>
17 #include <matrix/coordTransform.h>
18 
20 #include "vrfutil/rwUUID.h"
21 
24 class DtRailSegment;
25 class DtAttachedTerrain;
27 
28 
39 {
40 
41 public:
42 
44  DtRailMovementUpdater(DtRailMovementController * parentController, bool useTurnSmoothing,
45  bool useAcceleration,bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
46 
48  virtual ~DtRailMovementUpdater();
49 
51  virtual bool init();
52 
53  virtual void clear();
54 
55  virtual void setEntityState(DtVrfMovingObjectStateRepository* state);
56 
61  virtual double setUpTurn(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
62  const int drivingLane,double headingDiff,bool useLocalPos = false,DtVector currentLocalPos = DtVector::zero());
63 
66  virtual bool turnValid(int currentLane);
67 
68  virtual bool recalculateTurnSpline(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
69  const int passingLane);
70 
73  virtual bool modifyTurnSpline(const DtVector &currentLocalPos,const DtRailSegment * currentSegment,const DtRailSegment * nextSegment, const int currentLane, const int passingLane);
74 
76  virtual void setUpLaneSwitch(const DtVector& projectedLocation,DtRailSegment *currentSeg,const int currentLane,
77  const int passingLane);
78 
80  virtual void update(DtRailSegment *currentSeg,DtRailSegment* nextSeg,
81  double drivingSpeed,int passingLane, DtTime simTime = 0.0);
82 
84  virtual void updateNoMovement();
85 
87  virtual void movementComplete();
88 
91  virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
92 
95 
99  virtual const DtCoordTransform & localToBodyTransform() const;
100 
102  virtual void determinePositionAndSetFromEnd(const DtRailSegment * currentSeg, const int currentLane);
103 
106  virtual bool checkIfMoveOntoEmbarked(const DtVector& localPosition);
107 
108  virtual bool checkAndDisembarkIfEmbarked(const DtVector& localPosition);
109 
111 
112 protected:
113 
120  virtual void useFuel(double fuelUsed);
121 
122  virtual bool checkEntityImmobilized();
123 
129  virtual double fuelLeft() const;
130 
148  virtual void updateRepository(const DtVector & localPosition,
149  const DtVector & localVelocity, const DtVector & localAcceleration,
150  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
151  double newHeading);
152 
156  virtual double calculateAcceleration(double desiredSpeed);
157 
171  virtual void calculateOrientationAndPosition(
172  const DtVector& newLocalProjectedLocation, double newHeading,
173  DtDcm& newLocalOrientation, DtVector& newLocalPosition);
174 
186  bool groundClamp(double heading, const DtVector& location,
187  DtAttachedTerrain& terrain, DtVector& newNormal);
188 
193  void groundClampHighFidelity(double heading, const DtVector& location,
194  DtAttachedTerrain& terrain, DtVector& newNormal);
195 
201  void groundClampLowFidelity(double heading, const DtVector& location,
202  DtAttachedTerrain& terrain, DtVector& newNormal);
203 
205  virtual DtVector calculateRotationalVelocity(
206  const DtTaitBryan& newTopoOrientation,
207  const DtTaitBryan& oldTopoOrientation, double dT);
208 
212  virtual void calculateDirectionOfLinearMotion(
213  const DtDcm& newLocalOrientation, const DtVector& newLocalPosition,
214  DtDcm& newLocalDirectionOfLinearMotion);
215 
218  virtual DtVector calculateBodyAcceleration(double desiredSpeed,
219  const DtVector& oldBodyVelocity,double dT);
220 
221  virtual DtVector calculateBodyVelocity(
222  const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration,
223  double dT);
224 
225  virtual DtVector calculateProjectedLocation(
226  const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration,
227  const DtVector& oldBodyVelocity,const DtVector & newBodyVelocity, double newHeading);
228 
232  virtual bool rotationalVelocityShouldBeClamped(const DtVector&
233  bodyRotationalVelocity);
234 
238  virtual bool passedTurnPoint(double distSq, double & differance);
239 
240 
252  virtual DtVector determinePositionAlongNextSegment(DtRailSegment * nextSegment,double distance, double & newHeading,
253  int lanePos, DtVector projectedPos);
254 
255 
257  virtual void determinePosition(const DtRailSegment * currentSeg, const int currentLane,
258  DtVector& newLocalProjectedLocation);
259 
260 private:
263 
266 
268  const DtRailMovementUpdater & operator=(const
269  DtRailMovementUpdater & orig);
270 
271 protected:
278  DtCoordTransform myCoordTransform;
280 
283 
289  double myHeadingDiff;
290 
293 
299 
304 };
305 
306 
307 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)