VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
roadMovementController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 
10 
11 #pragma once
12 
14 #include <matrix/vlVector.h>
15 #include <list>
16 #include "vrfutil/rwRailSegment.h"
20 #include "vrfmodel/roadSegment.h"
21 
22 class DtRailSegment;
31 class DtRoadConstants;
32 class DtRoadDrivingLogic;
33 class DtBoolSetting;
34 
35 
41 #define DT_RAIL_SEGMENT_MERGE_ERROR_BOUND 0.3
42 
43 
45 
67 {
68 public:
72  DtVrfObject* owner,
73  DtSimManager* simManager,
74  DtComponentDescriptor* desc = 0,
75  DtReaderWriterRegistry* parentRegistry = 0);
76 
78  virtual ~DtRoadMovementController();
79 
82 
85  virtual const char* type() const;
86 
91  virtual bool init();
92 
95  virtual void preFirstTickInit();
96 
102  virtual void tick();
103 
104  virtual void clear();
105 
108  virtual bool tickWhileDestroyed() const;
109 
111  virtual void registerTaskMsgCallbacks();
113 
117  static DtSimComponent * creator(const DtString& name,
118  DtVrfObject* owner,
119  DtSimManager* simManager,
120  DtComponentDescriptor* desc = 0,
121  DtReaderWriterRegistry* parentRegistry = 0);
122 
125 
129  static void moveAlongCallback(DtSimMessage * msg, void * usr);
130 
131  static void setConvoyFollowCallback(DtSimMessage * msg, void * usrData);
132 
134  static void settingsObjectConsumerCallback(const DtSettingsObject* settingsObject, void* usr);
135 
137 
138  //-------------------------------------------------------------------
143 
144  virtual const DtRoadConstants* roadConstants(){ return myRoadConstants; }
145 
149  virtual void setRoadConstants(const DtRoadConstants* rc)
150  {
151  myRoadConstants = rc;
152  }
153 
154  virtual DtRoadPathFunctions* pathFunctions(){ return myRoadPathFunctions; }
155  virtual void setPathFunctions(DtRoadPathFunctions* pf)
156  {
157  myRoadPathFunctions = pf;
158  }
159 
160  virtual DtRoadDrivingLogic* drivingLogic(){ return myDrivingLogic; }
161  virtual void setDrivingLogic(DtRoadDrivingLogic* dl)
162  {
163  myDrivingLogic = dl;
164  }
165 
166  virtual DtRoadObstructionFinder* obstructionFinder()
167  {
168  return myRoadObstructionFinder;
169  }
171  virtual void setObstructionFinder(DtRoadObstructionFinder* of)
172  {
173  myRoadObstructionFinder = of;
174  }
175 
176  virtual DtRoadMovementUpdater* movementUpdater(){ return myRoadUpdater; }
177 
180  virtual void setMovementUpdater(DtRoadMovementUpdater* u)
181  {
182  myRoadUpdater = u;
183  }
185  //------------------------------------------------------------------
186 
189 
191  { return myProcessState; }
192  virtual const DtMovingObjectParameters* objectParameters()
193  { return myObjectParams; }
194  virtual const DtRoadMovementDescriptor* descriptor() const;
196 
199  virtual bool drivingOnLeftEnabled() const;
200 
201  virtual void setCurrentMovementState(DtRailMovementState state);
202  virtual DtRailMovementState currentMovementState() const;
203 
204  virtual DtRoadSegment* currentRoadSegment()const;
205  virtual void setCurrentRoadSegment(DtRoadSegment* seg);
206 
208  virtual double frontOffset() const;
209  virtual void setFrontOffset(const double o);
210 
214  virtual double rearAxleOffset() const;
215  virtual void setRearAxleOffset(const double o);
216 
218  virtual DtRailSegmentList * pathList();
219  virtual const DtRailSegmentList * pathList() const;
220 
223  virtual DtRoadSegmentPart roadSegmentPart()const;
224  virtual void setRoadSegmentPart(const DtRoadSegmentPart s);
226 
229 
235  virtual void updateTaskVisualizations();
236 
239  virtual bool findPointOnTerrain(const DtVector& worldLocation, DtVector& worldLocationOnTerrain);
240 
242  virtual std::vector<DtVector>& debugPoints()
243  {
244  return myObstacleLocations;
245  }
248  virtual std::vector<std::vector<DtVector> >& debugBoxes()
249  {
250  return myObstacleBoxes;
251  }
253 
256  virtual const double followSpeedFactor() const;
257 
258  virtual double getDistanceBehindConvoyTarget(const DtVrfObject * convoyTgt) const;
259 
260  virtual DtVrfObject* getObjectFromObstruction(DtRailObstructionPtr &obs);
262 
264 
265  const DtRailSegmentList* path() const { return &myPath; };
266 
267 protected:
268 
271 
274  const DtRoadMovementController& orig);
275 
278  const DtRoadMovementController& orig);
279 
284  virtual bool createPSR();
285 
287  virtual bool createUpdater();
288  virtual bool createPathFunctions();
289 
291  virtual bool createRoadObstructionFinder();
292 
293  virtual bool createDrivingLogic();
295 
298 
300  virtual void processSetting( const DtBoolSetting* setting);
301 
302  virtual void processSetConvoyFollowCallback(DtSimMessage * msg);
303 
306  virtual void processMoveAlongTask(DtSimMessage * msg);
308 
312  virtual bool initializeCurrentState(DtRailMoveAlongTask * task);
313 
315  virtual bool setUpRoute(const DtRwRailSegmentList& path);
316 
320  virtual int entryLanePosition(double heading,unsigned int numLanes);
321 
324  virtual void clearTask();
325 
327  virtual void clearPath();
328 
332  virtual void initiateLaneChange(const int newLaneNum);
333 
336  virtual void checkPathEnd();
337 
338 protected:
339 
344 
349 
354 
360 
363 
367 
374 
381 
386 
391 
402 
406 
411  std::vector<DtVector> myTaskVisPath;
412 
416  std::vector<DtVector> myCurrentTaskVisPath;
417 
420  std::map<DtRoadSegment*, unsigned> myRoadSegmentTaskVisMap;
421 
424 
430 
433 
435  std::vector<DtVector> myOriginalPath;
436 
438 
443  std::vector<DtVector> myObstacleLocations;
444 
447 
451  std::vector<std::vector<DtVector> > myObstacleBoxes;
452 
456 
458 };

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)