![]() |
VR-Forces 4.0.4 Class Documentation
|
behavior for a ground vehicle aggregate entity to drive and follow each other on and off roads and routes More...

Public Member Functions | |
| DtConvoyTaskController (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) | |
| (const DtString&,DtVrfObject*,DtSimManager*, | |
| virtual | ~DtConvoyTaskController () |
| Default destructor. | |
| virtual bool | init () |
| Initializes the controller. Mostly sets up the ConvoyPSR. | |
| virtual DtString | type () const |
| Returns a string identifies the class type of component. | |
| virtual void | clearTask () |
| Clears the task to start it anew again. | |
| virtual void | registerTaskMsgCallbacks () |
| Registers task and set data request callbacks for the convoy tasks. | |
| virtual void | tick () |
| This gives the thread of control to the component. | |
| virtual bool | createPSR () |
Static Public Member Functions | |
| static void | convoyTaskCallback (DtSimMessage *msg, void *usr) |
| Callback function for handling incoming turn to heading task message. | |
| static void | taskCompleteReportCallback (const DtVrfObjectMessage *msg, void *usr) |
| Calls onTaskComplete() to process the message. | |
| static void | destinationChangedCallback (DtVrfObject *obj, void *usr) |
| Calls onModifyVrfObject() to process the change. | |
| static void | objectAboutToBeRemovedCallback (DtVrfObject *obj, void *usr) |
| Calls onObjectAboutToBeRemoved() to process the change. | |
| static DtSimComponent * | creator (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) |
| (const DtString&,DtVrfObject*,DtSimManager*, | |
Protected Member Functions | |
| void | onObjectAboutToBeRemoved (DtVrfObject *obj) |
| Handles the removal of the destination control object. | |
| virtual void | onModifyVrfObject (DtVrfObject *obj) |
| Handles the change of vertices of the destinatino control object. | |
| virtual void | onConvoyTask (DtSimMessage *msg) |
| Issues DtMoveIntoFormationTask to ourself, at current location, heading given in incoming DtTurnToHeadingTask, keeping existing formation, and not applying formation to subordinates. | |
| virtual void | onTaskComplete (const DtVrfObjectMessage *msg) |
| Handles all task complete messages for this controller. | |
| virtual void | sendTaskToSubordinate (const DtSimTask &task, const DtString &subordinateObjectName) |
| Used to send tasks to a particular subordinate. | |
| virtual void | sendSetToSubordinate (DtSetDataRequest &request, const DtString &subordinateObjectName) |
| Used to send set messages to a particular subordinate. | |
| virtual bool | setupTask (const DtVrfObject *aggregate, const DtVrfObject *destination, bool pathPlan, const Coordinate_System *coordSys) |
| Sets up a convoy task based on the parameters. | |
| virtual DtVector | findAssemblyPoint (const DtVrfObject *aggregate, const DtVector &destination, bool haveRails, const Coordinate_System *coordSys) |
| Finds the point in which the subordinates will assemble and drive to before driving on roads/rails/along routes. | |
| virtual DtRwRailSegment * | createEntrySegment (const DtVrfObject *entity, const DtVector &assemblyPoint, const Coordinate_System *coordSys) const |
| Creates the entry segment for an entity (individual, non-aggregate) so as to enter into a road relatively smoothly. | |
| virtual bool | setupSubordinates (const DtVrfObject *aggregate, bool clearSubs, bool leaderSet=false) |
| Sets up the subordinates for this controller to worry about in the aggregate. | |
| virtual void | setupLeadOnDistance (int numberOfEntities, float distanceBetween) |
| Sets up the lead on distance the leader will have on the road/rail ahead of everyone else before he stops to wait for the others to get on the rail. | |
| virtual bool | createRailPath (const DtVrfObject *leadEntity, const DtVrfObject *destination, bool pathPlan, const Coordinate_System *coordSys) |
| Creates the rail path for which the convoy will drive on. | |
| virtual bool | areSeparationDistancesWithinRange (const DtConvoyPSR::DtRwSubordinateList &subordinates, const float distance, const float tolerance, const Coordinate_System *coordSys) |
| Checks to ensure the separation distances in the convoy are still within acceptable boundries. | |
| virtual void | setLeaderSpeed (const float speed) |
| Sets the speed of the convoy leader. | |
| virtual void | resettingPhaseTick (bool retask=true) |
| This function is called in tick() when the convoy phase is set to resetting. | |
| virtual void | startingPhaseTick () |
| This function is called in tick() when the convoy phase is set to starting. | |
| virtual void | assemblingPhaseTick () |
| This function is called in tick() when the convoy phase is set to assembling. | |
| virtual void | convoyingPhaseTick () |
| This function is called in tick() when the convoy phase is set to convoying. | |
| virtual void | finishingPhaseTick () |
| This function is called in tick() when the convoy phase is set to finishing. | |
| virtual DtVector | findIntersectionOfLineAndCircle (const DtVector ¢erPoint, const DtVector &endPoint, double radius, const Coordinate_System *coordSys) const |
| Finds the intersection point of a circle and a radius line drawn in that circle. | |
| virtual bool | getEntityToPathEntry (const DtVrfObject *entity, const DtVector &assemblyPoint, const Coordinate_System *coordSys) |
| Gets the specified single entity (non-aggregate) to the assembly point, which is presumably the start of the road. | |
| virtual DtRailSegment * | findClosestEntryRail (const DtVrfObject *aggregate, const double &radius, DtRailSegmentList *rails, int &railNumber, const Coordinate_System *coordSys) const |
| This function finds the closest rail to enter a path. | |
| virtual bool | isPointWithinRadius (const DtVector ¢er, double radius, const DtVector &point, const Coordinate_System *coordSys) const |
| Finds whether a given point is within the given radius. | |
| virtual bool | findPointOnRailOutsideSphere (const DtVector ¢er, const double &radius, const DtRailSegment *segment, DtVector &resultPoint, const Coordinate_System *coordSys) const |
| Finds a point outside of the sphere on a rail, given a particular rail segment. | |
| virtual void | registerDestinationChangedCallback () |
| Registers the necessary callbacks for any changes in control objects. | |
| virtual void | unregisterDestinationChangedCallback () |
| Unregisters the necessary callbacks for any changes in control objects. | |
| virtual bool | updateConvoySubordinates (DtVrfObject *aggregate, std::vector< DtString > &tempList, bool recursive=false) |
| This function is recursive. | |
| virtual bool | isEntityPartOfConvoy (const DtString &name) const |
| virtual bool | isEntityIndependentlyTasked (const DtVrfObject *entity) const |
| virtual void | setConvoyFollowing () |
| virtual void | destroyedPhaseTick () |
Private Member Functions | |
| DtConvoyTaskController (const DtConvoyTaskController &orig) | |
| not implemented | |
| DtConvoyTaskController & | operator= (const DtConvoyTaskController &orig) |
| not implemented | |
Private Attributes | |
| const DtConvoyDescriptor * | myDescriptor |
| DtConvoyPSR * | myProcessState |
| bool | myDestinationChangedCallbackRegistered |
behavior for a ground vehicle aggregate entity to drive and follow each other on and off roads and routes
End User Description: The DtConvoyTaskController responds to convoy-related tasks. It executes convoy behavior for the aggregate as a whole by issuing radio messages to aggregate members to carry out the convoy-related task.
This controller may only be configured as a part of an entity that has a convoy-task-controller.
Developer Description: The DtConvoyTaskController class sends several messages as appropriate to its subordinates. The aggregate considers itself complete once it has received task complete reports from all of the subordinates participating in the task at the end of the road or route or path. Uses Descriptor Type: DtConvoyDescriptor
| DtConvoyTaskController::DtConvoyTaskController | ( | const DtString & | name, |
| DtVrfObject * | owner, | ||
| DtSimManager * | simManager, | ||
| DtComponentDescriptor * | desc = 0, |
||
| DtReaderWriterRegistry * | parentRegistry = 0 |
||
| ) |
(const DtString&,DtVrfObject*,DtSimManager*,
| name | Reader writer name of this component. |
| owner | The DtVrfObject that owns this component |
| simManager | The simulation manager (provides access to terrain, message interface, simulation clock). |
| desc | The component descriptor used to initialize this component. |
| parentRegistry | Pointer to the parent reader writer registry (the containing object that reads/writes this object). |
| virtual DtConvoyTaskController::~DtConvoyTaskController | ( | ) | [virtual] |
Default destructor.
| DtConvoyTaskController::DtConvoyTaskController | ( | const DtConvoyTaskController & | orig | ) | [private] |
not implemented
| virtual bool DtConvoyTaskController::init | ( | ) | [virtual] |
Initializes the controller. Mostly sets up the ConvoyPSR.
Reimplemented from DtControllerComponent.
| virtual DtString DtConvoyTaskController::type | ( | ) | const [virtual] |
Returns a string identifies the class type of component.
Type values are defined in compTypes.h. DtSimComponent creation functions are registered with the DtSimComponentFactory using the type values as the key.
Implements DtTaskControllerComponent.
| virtual void DtConvoyTaskController::clearTask | ( | ) | [virtual] |
Clears the task to start it anew again.
Reimplemented from DtSingleTaskControllerComponent.
| virtual void DtConvoyTaskController::registerTaskMsgCallbacks | ( | ) | [virtual] |
Registers task and set data request callbacks for the convoy tasks.
Reimplemented from DtTaskControllerComponent.
| static void DtConvoyTaskController::convoyTaskCallback | ( | DtSimMessage * | msg, |
| void * | usr | ||
| ) | [static] |
Callback function for handling incoming turn to heading task message.
Calls processTurnToHeadingTask to actually handle the message.
| msg | Message containing a DtTurnToHeadingTask. |
| usr | Pointer to instance of this class. |
| static void DtConvoyTaskController::taskCompleteReportCallback | ( | const DtVrfObjectMessage * | msg, |
| void * | usr | ||
| ) | [static] |
Calls onTaskComplete() to process the message.
| msg | Message containing a DtTaskCompleteReport. |
| usr | Pointer to an instance of this class. |
| static void DtConvoyTaskController::destinationChangedCallback | ( | DtVrfObject * | obj, |
| void * | usr | ||
| ) | [static] |
Calls onModifyVrfObject() to process the change.
| static void DtConvoyTaskController::objectAboutToBeRemovedCallback | ( | DtVrfObject * | obj, |
| void * | usr | ||
| ) | [static] |
Calls onObjectAboutToBeRemoved() to process the change.
| static DtSimComponent* DtConvoyTaskController::creator | ( | const DtString & | name, |
| DtVrfObject * | owner, | ||
| DtSimManager * | simManager, | ||
| DtComponentDescriptor * | desc = 0, |
||
| DtReaderWriterRegistry * | parentRegistry = 0 |
||
| ) | [static] |
(const DtString&,DtVrfObject*,DtSimManager*,
| name | Reader writer name of this component. |
| owner | The DtVrfObject that owns this component |
| simManager | The simulation manager (provides access to terrain, message interface, simulation clock). |
| desc | The component descriptor used to initialize this component. |
| parentRegistry | Pointer to the parent reader writer registry (the containing object that reads/writes this object). |
| virtual void DtConvoyTaskController::tick | ( | ) | [virtual] |
This gives the thread of control to the component.
The component is ticked once each simulation from by the component list it's on. This base class tick has no functionality.
Reimplemented from DtSimComponent.
| virtual bool DtConvoyTaskController::createPSR | ( | ) | [virtual] |
| void DtConvoyTaskController::onObjectAboutToBeRemoved | ( | DtVrfObject * | obj | ) | [protected] |
Handles the removal of the destination control object.
This will result in the task being skipped.
| obj | the control object that is going to be removed |
| virtual void DtConvoyTaskController::onModifyVrfObject | ( | DtVrfObject * | obj | ) | [protected, virtual] |
Handles the change of vertices of the destinatino control object.
This will result in the task restarting from their current location.
| obj | the control object that was modified |
| virtual void DtConvoyTaskController::onConvoyTask | ( | DtSimMessage * | msg | ) | [protected, virtual] |
Issues DtMoveIntoFormationTask to ourself, at current location, heading given in incoming DtTurnToHeadingTask, keeping existing formation, and not applying formation to subordinates.
| msg | Message containing a DtTurnToHeadingTask. |
| virtual void DtConvoyTaskController::onTaskComplete | ( | const DtVrfObjectMessage * | msg | ) | [protected, virtual] |
Handles all task complete messages for this controller.
| msg | Message containing a DtTaskCompleteReport. |
| virtual void DtConvoyTaskController::sendTaskToSubordinate | ( | const DtSimTask & | task, |
| const DtString & | subordinateObjectName | ||
| ) | [protected, virtual] |
Used to send tasks to a particular subordinate.
Does not check if entity is still a subordinate or independently tasked or immoblized for any reason.
| task | The task you wish you give |
| subordinateObjectName | the name of the entity you wish to send this task to. Must be a subordinate. |
| virtual void DtConvoyTaskController::sendSetToSubordinate | ( | DtSetDataRequest & | request, |
| const DtString & | subordinateObjectName | ||
| ) | [protected, virtual] |
Used to send set messages to a particular subordinate.
Does not check if entity is still a subordinate or alive.
| request | The set request |
| subordinateObjectName | name of the entity you wish to send this request to. Must be a subordinate. |
| virtual bool DtConvoyTaskController::setupTask | ( | const DtVrfObject * | aggregate, |
| const DtVrfObject * | destination, | ||
| bool | pathPlan, | ||
| const Coordinate_System * | coordSys | ||
| ) | [protected, virtual] |
Sets up a convoy task based on the parameters.
Calls several functions to setup the task.
| aggregate | the entity using this controller |
| destination | the destination object. Waypoint or route |
| pathPlan | whether or not to plan a path. If destination is route, this should be false |
| coordSys | the pointer to the coordinate system |
| virtual DtVector DtConvoyTaskController::findAssemblyPoint | ( | const DtVrfObject * | aggregate, |
| const DtVector & | destination, | ||
| bool | haveRails, | ||
| const Coordinate_System * | coordSys | ||
| ) | [protected, virtual] |
Finds the point in which the subordinates will assemble and drive to before driving on roads/rails/along routes.
Generally gives back the start of a rail
| aggregate | the aggregate using this controller |
| destination | this point is only used if haveRails param is false |
| haveRails | were rails created successfully? This will read the rails directly from the PSR |
| coordSys | the coordinate system pointer |
| virtual DtRwRailSegment* DtConvoyTaskController::createEntrySegment | ( | const DtVrfObject * | entity, |
| const DtVector & | assemblyPoint, | ||
| const Coordinate_System * | coordSys | ||
| ) | const [protected, virtual] |
Creates the entry segment for an entity (individual, non-aggregate) so as to enter into a road relatively smoothly.
Sets the ConvoyPSR::lastGeneratedRailSegment() in the convoy PSR
| entity | the entity that the entry segment is being created for |
| assemblyPoint | the start of the rail path |
| coordSys | the pointer to the coordinate system |
| virtual bool DtConvoyTaskController::setupSubordinates | ( | const DtVrfObject * | aggregate, |
| bool | clearSubs, | ||
| bool | leaderSet = false |
||
| ) | [protected, virtual] |
Sets up the subordinates for this controller to worry about in the aggregate.
This must be called as one of the first functions called. Is called by setupTask(). This function is also recursive for aggregates within aggregates. This function sets the subordinates in the PSR
| aggregate | The top level aggregate |
| leaderSet | Either ignore this parameter or pass in false |
| virtual void DtConvoyTaskController::setupLeadOnDistance | ( | int | numberOfEntities, |
| float | distanceBetween | ||
| ) | [protected, virtual] |
Sets up the lead on distance the leader will have on the road/rail ahead of everyone else before he stops to wait for the others to get on the rail.
The value is set in the PSR
| numberOfEntites | the number of entites in the convoy |
| distanceBetween | the distance that should be kept between the entities |
| virtual bool DtConvoyTaskController::createRailPath | ( | const DtVrfObject * | leadEntity, |
| const DtVrfObject * | destination, | ||
| bool | pathPlan, | ||
| const Coordinate_System * | coordSys | ||
| ) | [protected, virtual] |
Creates the rail path for which the convoy will drive on.
Uses either the path planner, a route, or will return false if neither occurred.
| leadEntity | The convoy leader |
| destination | The point or path of interest (waypoint or route) |
| pathPlan | whether or not to use the path planner. If destination is route, this should be false |
| coordSys | the pointer to the coordinate system |
| virtual bool DtConvoyTaskController::areSeparationDistancesWithinRange | ( | const DtConvoyPSR::DtRwSubordinateList & | subordinates, |
| const float | distance, | ||
| const float | tolerance, | ||
| const Coordinate_System * | coordSys | ||
| ) | [protected, virtual] |
Checks to ensure the separation distances in the convoy are still within acceptable boundries.
Only updates the leader's speed as everyone else is dictated by their own follow sets.
| subordinates | A reference to the list of subordinates |
| distance | the distance of separation the subordinates should be from each other |
| tolerance | the tolerance for which the subordinates will be forgiven for in lagging behind (a percentage) |
| coordSys | a pointer to the coordinate system |
| virtual void DtConvoyTaskController::setLeaderSpeed | ( | const float | speed | ) | [protected, virtual] |
Sets the speed of the convoy leader.
This also sets a flag that remembers the leaders last ordered speed.
| speed | The speed at which the leader will go |
| virtual void DtConvoyTaskController::resettingPhaseTick | ( | bool | retask = true | ) | [protected, virtual] |
This function is called in tick() when the convoy phase is set to resetting.
It will reset the entire task based on the most recent convoy task it was given from its current location. Upon resetting, do we want to resetup the entities for the task?
| virtual void DtConvoyTaskController::startingPhaseTick | ( | ) | [protected, virtual] |
This function is called in tick() when the convoy phase is set to starting.
This function doesn't do anything for our own purposes.
| virtual void DtConvoyTaskController::assemblingPhaseTick | ( | ) | [protected, virtual] |
This function is called in tick() when the convoy phase is set to assembling.
This function checks to see where the leader is on the road/rail path before telling him to stop. Calls setLeaderSpeed() to alter the leader's speed accordingly.
| virtual void DtConvoyTaskController::convoyingPhaseTick | ( | ) | [protected, virtual] |
This function is called in tick() when the convoy phase is set to convoying.
This function checks the distances between each entity to ensure that they are within the specified distances
| virtual void DtConvoyTaskController::finishingPhaseTick | ( | ) | [protected, virtual] |
This function is called in tick() when the convoy phase is set to finishing.
This function is used when the convoy leader has reached his destination and the subordinates are all ordered to tighten up their formation so they can complete the task.
| virtual DtVector DtConvoyTaskController::findIntersectionOfLineAndCircle | ( | const DtVector & | centerPoint, |
| const DtVector & | endPoint, | ||
| double | radius, | ||
| const Coordinate_System * | coordSys | ||
| ) | const [protected, virtual] |
Finds the intersection point of a circle and a radius line drawn in that circle.
| centerPoint | the center of the circle but also connects to the endPoint (3D) |
| endPoint | the end point of the line that radiates from the center. Must be OUTSIDE of the circle (3D) |
| radius | the distance from the center point. Should be shorter than the distance of centerPoint to endPoint |
| coordSys | the coordinate system pointer |
| virtual bool DtConvoyTaskController::getEntityToPathEntry | ( | const DtVrfObject * | entity, |
| const DtVector & | assemblyPoint, | ||
| const Coordinate_System * | coordSys | ||
| ) | [protected, virtual] |
Gets the specified single entity (non-aggregate) to the assembly point, which is presumably the start of the road.
This calls createEntrySegment() since each entry segment is created for each entity individually.
| entity | The entity in this aggregate being ordered to get to the path |
| assemblyPoint | the first point on the path |
| coordSys | the coordinate system pointer |
| virtual DtRailSegment* DtConvoyTaskController::findClosestEntryRail | ( | const DtVrfObject * | aggregate, |
| const double & | radius, | ||
| DtRailSegmentList * | rails, | ||
| int & | railNumber, | ||
| const Coordinate_System * | coordSys | ||
| ) | const [protected, virtual] |
This function finds the closest rail to enter a path.
This uses isPointWithinRadius() to figure out and iterate through the list of rails in order to find a rail in which the second point of the rail itself sits outside of the bounding radius given.
| aggregate | Expects the top level aggregate with this controller |
| radius | The radius of the aggregate |
| rails | The list of rails where we are trying to find the closest entryway |
| railNumber | returns the index of the rail it finds in the list |
| coordSys | the coordinate system pointer |
| virtual bool DtConvoyTaskController::isPointWithinRadius | ( | const DtVector & | center, |
| double | radius, | ||
| const DtVector & | point, | ||
| const Coordinate_System * | coordSys | ||
| ) | const [protected, virtual] |
Finds whether a given point is within the given radius.
Used by findClosestEntryRail() to help it find out whether the segment it found is ideal.
| center | Center of the circle (in 3D) |
| radius | Radius of the circle (in meters) |
| point | The point in question (in 3D) |
| coordSys | The coordinate system pointer |
| virtual bool DtConvoyTaskController::findPointOnRailOutsideSphere | ( | const DtVector & | center, |
| const double & | radius, | ||
| const DtRailSegment * | segment, | ||
| DtVector & | resultPoint, | ||
| const Coordinate_System * | coordSys | ||
| ) | const [protected, virtual] |
Finds a point outside of the sphere on a rail, given a particular rail segment.
| center | Center of the sphere. Preferrably in 2D (topo) |
| radius | Radius of the sphere. In meters. |
| segment | Pointer to the segment in question |
| resultPoint | Expects an empty vector, but will store the resulting point here and return it |
| coordSys | Pointer to the coordinate system |
| virtual void DtConvoyTaskController::registerDestinationChangedCallback | ( | ) | [protected, virtual] |
Registers the necessary callbacks for any changes in control objects.
| virtual void DtConvoyTaskController::unregisterDestinationChangedCallback | ( | ) | [protected, virtual] |
Unregisters the necessary callbacks for any changes in control objects.
| virtual bool DtConvoyTaskController::updateConvoySubordinates | ( | DtVrfObject * | aggregate, |
| std::vector< DtString > & | tempList, | ||
| bool | recursive = false |
||
| ) | [protected, virtual] |
This function is recursive.
It calls itself if there are aggregates within aggregates. It compares the current list of subordinates with what should be and removes any subordinates that were removed. If any subordinates were added, however, this function will immediately return false.
| aggregate | Expects a top level aggregate |
| currentIter | Iterator for the list of subordinates at the beginning of the list. |
| previousEntity | Should pass in a blank DtString() set to "". Used for recursion |
| virtual bool DtConvoyTaskController::isEntityPartOfConvoy | ( | const DtString & | name | ) | const [protected, virtual] |
| virtual bool DtConvoyTaskController::isEntityIndependentlyTasked | ( | const DtVrfObject * | entity | ) | const [protected, virtual] |
| virtual void DtConvoyTaskController::setConvoyFollowing | ( | ) | [protected, virtual] |
| virtual void DtConvoyTaskController::destroyedPhaseTick | ( | ) | [protected, virtual] |
| DtConvoyTaskController& DtConvoyTaskController::operator= | ( | const DtConvoyTaskController & | orig | ) | [private] |
not implemented
const DtConvoyDescriptor* DtConvoyTaskController::myDescriptor [private] |