VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
convoyTaskController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2010 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
11 
12 #pragma once
13 
15 #include "vrfobjcore/convoyPSR.h"
19 #include "vrfutil/rwRailSegment.h"
20 #include <readerWriter/rwReal.h>
22 #include "terrainCS/coordSystem.h"
23 
24 #include <boost/shared_ptr.hpp>
25 
29 #define CONVOY_CONTROLLER_MAKE_FIRST_SEGMENT 0
30 
31 
32 class DtAsyncJobMapEntry;
33 class DtVrfObjectMessage;
34 class DtBoolSetting;
35 
54 {
55 public:
58  DtConvoyTaskController(const DtString& name,
59  DtVrfObject* owner,
60  DtSimManager* simManager,
61  DtComponentDescriptor* desc = 0,
62  DtReaderWriterRegistry* parentRegistry = 0);
63 
65  virtual ~DtConvoyTaskController();
66 
68  virtual bool init();
69 
72  virtual const char* type() const;
73 
75  virtual void clearTask();
76 
78  virtual void resetTask();
79 
81  virtual void registerTaskMsgCallbacks();
82 
87  static void convoyTaskCallback(DtSimMessage * msg, void * usr);
88 
92  static void taskCompleteReportCallback(const DtVrfObjectMessage* msg, void * usr);
93 
95  static void destinationChangedCallback(const DtVrfObject* obj, void* usr);
96 
98  static void objectAboutToBeRemovedCallback(const DtVrfObject* obj, void* usr);
99 
103  static DtSimComponent * creator(const DtString& name,
104  DtVrfObject* owner,
105  DtSimManager* simManager,
106  DtComponentDescriptor* desc = 0,
107  DtReaderWriterRegistry* parentRegistry = 0);
108 
110  virtual void preFirstTickInit();
111 
112  virtual void tick();
113 
114  virtual bool createPSR();
115 
116  static void settingConsumerCallback(const DtSettingsObject* settingsObject,
117  void* usr);
118 
119  virtual void updateTaskVisualizations();
120 
121 protected:
125  void onObjectAboutToBeRemoved(const DtVrfObject* obj);
126 
130  virtual void onModifyVrfObject(const DtVrfObject* obj);
131 
136  virtual void onConvoyTask(DtSimMessage * msg);
137 
140  virtual void onTaskComplete(const DtVrfObjectMessage* msg);
141 
146  virtual void sendTaskToSubordinate(const DtSimTask& task,
147  const DtUUID& subordinate);
148 
153  virtual void sendSetToSubordinate(DtSetDataRequest& request,
154  const DtUUID& subordinate);
155 
161  virtual bool setupTask(const DtVrfObject* aggregate, const DtVrfObject* destination,
162  bool pathPlan);
163 
171  virtual DtVector findAssemblyPoint(const DtVrfObject* aggregate, const DtVector& destination,
172  bool haveRails, const Coordinate_System* coordSys);
173 
174 #if CONVOY_CONTROLLER_MAKE_FIRST_SEGMENT
175  virtual DtRwRailSegment* createEntrySegment(const DtVrfObject* entity,
182  const DtVector& assemblyPoint, const Coordinate_System* coordSys) const;
183 #endif
184 
191  virtual bool setupSubordinates(const DtVrfObject* aggregate, bool clearSubs, bool& leaderSet);
192 
197  virtual void setupLeadOnDistance(int numberOfEntities, float distanceBetween);
198 
204  virtual bool createDirectRailPath(const DtVrfObject* leadEntity, const DtVrfObject* destination);
205 
213  virtual bool areSeparationDistancesWithinRange(const DtConvoyPSR::DtRwSubordinateList& subordinates,
214  const float distance, const float tolerance, const Coordinate_System* coordSys);
215 
219  virtual void setLeaderSpeed(const float speed);
220 
224  virtual void resettingPhaseTick(bool retask = true);
225 
228  virtual void startingPhaseTick();
229 
233  virtual void assemblingPhaseTick();
234 
237  virtual void convoyingPhaseTick();
238 
242  virtual void finishingPhaseTick();
243 
250  virtual DtVector findIntersectionOfLineAndCircle(const DtVector& centerPoint,
251  const DtVector& endPoint, double radius, const Coordinate_System* coordSys) const;
252 
261  virtual bool taskEntityToMoveToAssemblyPt(const DtVrfObject* entity, const DtVector& assemblyPoint,
262  const Coordinate_System* coordSys);
263 
265  virtual bool getEntityPathToEntry(const DtVrfObject* entity, const DtVector& assemblyPoint,
266  const Coordinate_System* coordSys);
267 
277  virtual DtRailSegment* findClosestEntryRail(const DtVrfObject* aggregate,
278  const double& radius,
279  DtRailSegmentList* rails,
280  int& railNumber,
281  const Coordinate_System* coordSys) const;
282 
290  virtual bool isPointWithinRadius(const DtVector& center, double radius,
291  const DtVector& point, const Coordinate_System* coordSys) const;
292 
300  virtual bool findPointOnRailOutsideSphere(const DtVector& center, const double& radius,
301  const DtRailSegment* segment, DtVector& resultPoint, const Coordinate_System* coordSys) const;
302 
304  virtual void registerDestinationChangedCallback();
305 
307  virtual void unregisterDestinationChangedCallback();
308 
317  virtual bool updateConvoySubordinates(const DtVrfObject* aggregate,
318  std::vector<DtUUID>& tempList,
319  bool recursive = false);
320 
322  virtual bool isEntityPartOfConvoy(const DtUUID& entity) const;
323 
324  virtual bool isEntityIndependentlyTasked(const DtVrfObject* entity) const;
325 
326  virtual void setConvoyFollowing();
327 
328  virtual void destroyedPhaseTick();
329 
331  virtual void sendClearTask(const DtUUID& recipientName,
332  const DtSimTaskMessageType& taskType);
333 
334  double maxSearchRadius(const DtPoint& start, const DtPoint& end);
335 
341  virtual bool startPathPlan(const DtVrfObject* leadEntity,
342  const DtVrfObject* destination);
343 
346  virtual bool pathPlanFinished();
347 
353  virtual DtVector groundClamp(const DtVector& point, DtGeodeticCoord& lastPoint) const;
354 
356  virtual void processSetting( const DtBoolSetting* setting);
357 
358 protected:
359 
361  boost::shared_ptr<DtAsyncJobMapEntry> myPathJobEntry;
362 
367 
368 private:
371 
374 };
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
File: rwRailSegment.h.
Definition: boolSetting.h:30
std::list< DtRailSegment * > DtRailSegmentList
Definition: railSegment.h:197
virtual void registerTaskMsgCallbacks()
virtual void preFirstTickInit()
This function can be overridden to initialize a component before it is ticked for the first time...
DtRailSegment are segments entities can follow when using the rail movement system.
Definition: railSegment.h:23
This class provides a base class for all controllers that are capable of executing a DtSimTask...
Definition: singleTaskControllerComponent.h:20
A DtComponentDescriptor that has parameters that indicate the distances at which the entity is consid...
Definition: convoyDescriptor.h:25
boost::shared_ptr< DtAsyncJobMapEntry > myPathJobEntry
Token for asynchronous path plan task.
Definition: convoyTaskController.h:361
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:42
Definition: readerWriterRegistry.h:39
This is a process state repository for the DtConvoyController that stores the list of the names of cu...
Definition: convoyPSR.h:29
virtual const char * type() const =0
Returns a string identifies the class type of component.
virtual bool init()
Calls setRadio()
virtual void clearTask()
If component is currently tasked, calls clearPendingSubtasks(), sets the tasked flag to false...
Definition: settingsObject.h:27
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick.
Definition: simComponent.h:485
DtSetDataRequest is an abstract base class from which real setDataRequests can derive.
Definition: setDataRequest.h:40
Definition: coordSystem.h:54
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points.
File: simMsg.h.
Definition: simMessage.h:35
virtual void tick()
This gives the thread of control to the component.
behavior for a ground vehicle aggregate entity to drive and follow each other on and off roads and ro...
Definition: convoyTaskController.h:53
The base class for all messages to/from a specific DtVrfObject.
Definition: vrfObjectMessage.h:30
Handle to async job.
Definition: asyncJobMapEntry.h:29
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
const DtTaskControllerComponent & operator=(const DtTaskControllerComponent &orig)
assignment operator
DtSimTask is an abstract base class from which real tasks can derive.
Definition: simTask.h:33
bool myDestinationChangedCallbackRegistered
Definition: convoyTaskController.h:365
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:102
DtConvoyPSR * myProcessState
Definition: convoyTaskController.h:364
const DtConvoyDescriptor * myDescriptor
Definition: convoyTaskController.h:363
Definition: rwRailSegment.h:27
If you use a list of object names to archive which objects are part of a controller (or any object) u...
Definition: vrfObjectReference.h:305
bool myDrivingOnLeft
Definition: convoyTaskController.h:366
Definition: point.h:34

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)