![]() |
VR-Forces 4.0.4 Class Documentation
|
DtHumanMoveAlongController is a controller that models movement along a route for an individual human entity. More...

Public Member Functions | |
| DtHumanMoveAlongController (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) | |
| (const DtString&,DtVrfObject*,DtSimManager*, | |
| virtual | ~DtHumanMoveAlongController () |
| Destructor. | |
| virtual bool | init () |
| Init. Call immediately after construction. | |
| virtual DtString | type () const |
| Returns a string identifies the class type of component. | |
| virtual void | tick () |
| This components simulation tick. | |
| virtual void | processMoveAlongTask (DtSimMessage *msg) |
| Handle messages to move along a route or assume a move along task from another. | |
| virtual void | processRouteChanged (DtVrfObject *obj) |
| virtual void | registerTaskMsgCallbacks () |
| Overrides this so it can register it's interest in MoveAlong commands. | |
| virtual bool | setupRoute () |
| Look up the route by name, and set myRoute if found. | |
| virtual bool | setupDestination () |
| Sets myControlPoint to the position of the route's current vertex. | |
| virtual double | findDesiredSpeed () |
| Returns ordered speed of the entity. | |
| virtual void | stop () |
| Overrides to advance to the next vertex rather then actually stop when a vertex is reached. | |
| virtual bool | createPorts () |
| Creates myDestinationOutputPort. | |
| virtual bool | createPortGroups () |
| Creates and initializes port groups. | |
| virtual bool | createPSR () |
| Creates myProcessState data member, and adds it to our process state repository manager. | |
| virtual void | doMoving () |
| Calls determineGearSetting(), findDesiredSpeed() and findDesiredHeading() and then sets port values based on those results. | |
| virtual double | findDesiredHeading () |
| Calls headingAngleTo() to find the heading from the entity to the destination. | |
| virtual bool | destinationIsInsideObstruction (const DtVector &localDestination) const |
| Returns whether or not current destination is inside an obstruction. | |
| virtual bool | decideToGiveUpTask () const |
| Checks to see if destination is inside an obstruction. | |
Static Public Member Functions | |
| static void | moveAlongCallback (DtSimMessage *msg, void *usr) |
| Instances of this component will register this callback with their own 'this' pointer as user data with the msg executive requesting notification of move-along tasks. | |
| static void | routeChangedCallback (DtVrfObject *obj, void *usr) |
| Intended to be called only when the route has changed. | |
| static void | objectAddedCb (DtVrfObject *vrfObject, void *usr) |
| Calls processObjectAdded(). | |
| static DtSimComponent * | creator (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) |
| Static creator function for factory registration. | |
Protected Member Functions | |
| virtual void | buildLocalRoute () |
| builds the local copy of the route by copying myRoute's vertices | |
| virtual void | emptyVertexList () |
| removes and deletes vertices from the vertex list in process state repository (calls process state repository's emptyRouteVertices()). | |
| virtual void | processObjectAdded (DtVrfObject *vrfObject) |
| Checks given vrfObject against the route we're looking for. | |
| virtual void | clearTask () |
| Override to clear route name and route state data stored in myProcessState. | |
| virtual void | moveToDestination () |
| Attempts to move to the destination location. Override to provide movement functionality. | |
| virtual void | invalidateDestinationVector () const |
| Tells the component that any cached destination vector should be recalculated. | |
| virtual double | distanceToDestination () const |
| virtual bool | atDestination () |
| Are we within the at-distance parameter to the destination? If the myDistanceSquared member calculated in tick() is less than or equal to the square of the value provided in the at-distance parameter of the DtGroundMoveToDescriptor, atDestination() sets myAtDestination to true. | |
| virtual bool | passedDestination () |
| Determines if the entity will pass the destination to which it is moving this frame if it continues at its current velocity and acceleration. | |
| virtual bool | getDestination (DtVector &destination) |
| getDestination() | |
| virtual const DtVector & | destinationVector () const |
| Returns the current destination vector for the entity. | |
| virtual void | setupDestinationVector () const |
| Sets up a vector from the current destination location to the entity's location to use in determining when/if the entity has passed its destination location. | |
| virtual double | atDistance () const |
| Maximum distance at which entity is considered to be 'at' a route vertex. | |
| virtual bool | stayOnRoute () const |
| If true, will attempt to closely follow route segments as it moves along a route. | |
| virtual double | minCorrectionDistance () const |
| Maximum distance at which entity is considered to be 'at' a route vertex. | |
| virtual double | maxCorrectionDistance () const |
| virtual double | maxCorrectionAngle () const |
| virtual bool | getCurrentRouteSegment (DtVector &routeSegmentStart, DtVector &routeSegmentEnd) const |
Protected Attributes | |
| DtHumanStateRepository * | myHumanStateRepository |
| DtHumanMoveAlongPSR * | myProcessState |
| Container for state data associated with this component. | |
| DtHumanMoveAlongControllerDescriptor * | myHumanMoveAlongControllerDescriptor |
| DtVrfObject * | myRoute |
| This is looked up once per tick - assumed unchanging while we have control. | |
| bool | myRouteHasChanged |
| This gets set to true when a modifyRoute message for the route we're following is received. | |
| bool | myResetVertex |
| bool | myFirstTick |
| int | myPreviousVertex |
| bool | myAtDestination |
| bool | myNearDestination |
| bool | myPassedDestination |
| double | myDistanceSquared |
| DtVector | myLocalDestination |
| DtVector | myWorldDestination |
| double | myCurrentSpeed |
| bool | myDestinationVectorIsValid |
| DtVector | myDestinationVector |
Ports and Port Groups | |
| DtCollisionInputPort * | myCollisionAvoidancePort |
| Input Port Name: potential-collision-info Input Port Description: Input Port Range: Input Port Default Value: Input Group Parent: collision-avoidance-control. | |
| DtInputPortGroup * | myCollisionAvoidancePortGroup |
| Input Port Group Name: collision-avoidance-control Input Port Group Description: | |
| DtHumanMovementControlOutputPortGroup * | myHumanMovementControlOutputPortGroup |
| Output Group Name: movement-control . | |
| DtVectorOutputPort * | myDestinationOutputPort |
| Output Port Name: destination Output Port Description: Specifies the current destination of the entity in geocentric coordiantes. | |
Private Member Functions | |
| DtHumanMoveAlongController () | |
| Not Implemented. | |
| DtHumanMoveAlongController (const DtHumanMoveAlongController &orig) | |
| Not Implemented. | |
| DtHumanMoveAlongController & | operator= (const DtHumanMoveAlongController &orig) |
| Not Implemented. | |
DtHumanMoveAlongController is a controller that models movement along a route for an individual human entity.
Developer Description: DtHumanMoveAlongController is a task controller that responds to DtVrfMoveAlongRouteTaskType tasks. It generates the necessary speed, facing direction, and movement direction control inputs to keep the entity moving along a route while executing a move-along <route> task.
Uses Descriptor Type: DtHumanMoveAlongControllerDescriptor
| DtHumanMoveAlongController::DtHumanMoveAlongController | ( | ) | [private] |
Not Implemented.
| DtHumanMoveAlongController::DtHumanMoveAlongController | ( | const DtHumanMoveAlongController & | orig | ) | [private] |
Not Implemented.
| DtHumanMoveAlongController::DtHumanMoveAlongController | ( | 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 DtHumanMoveAlongController::~DtHumanMoveAlongController | ( | ) | [virtual] |
Destructor.
| DtHumanMoveAlongController& DtHumanMoveAlongController::operator= | ( | const DtHumanMoveAlongController & | orig | ) | [private] |
Not Implemented.
| virtual bool DtHumanMoveAlongController::init | ( | ) | [virtual] |
Init. Call immediately after construction.
Reimplemented from DtControllerComponent.
| virtual DtString DtHumanMoveAlongController::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 DtHumanMoveAlongController::tick | ( | ) | [virtual] |
This components simulation tick.
Override to try and look up route if we start out with a move-along route task. Register an objectAddedCallback if route not found yet.
Reimplemented from DtSimComponent.
| static void DtHumanMoveAlongController::moveAlongCallback | ( | DtSimMessage * | msg, |
| void * | usr | ||
| ) | [static] |
Instances of this component will register this callback with their own 'this' pointer as user data with the msg executive requesting notification of move-along tasks.
| virtual void DtHumanMoveAlongController::processMoveAlongTask | ( | DtSimMessage * | msg | ) | [virtual] |
Handle messages to move along a route or assume a move along task from another.
| static void DtHumanMoveAlongController::routeChangedCallback | ( | DtVrfObject * | obj, |
| void * | usr | ||
| ) | [static] |
Intended to be called only when the route has changed.
| virtual void DtHumanMoveAlongController::processRouteChanged | ( | DtVrfObject * | obj | ) | [virtual] |
| virtual void DtHumanMoveAlongController::registerTaskMsgCallbacks | ( | ) | [virtual] |
Overrides this so it can register it's interest in MoveAlong commands.
Reimplemented from DtTaskControllerComponent.
| virtual bool DtHumanMoveAlongController::setupRoute | ( | ) | [virtual] |
Look up the route by name, and set myRoute if found.
Looks up the route in the Control Manager. If it does not find the route, it returns false. Otherwise, it sets the myRoute member to point to the object found. setupRoute() then checks the myRouteChanged flag. If myRouteChanged is true, it calls the route object’s resyncRouteState() member function to update the current DtRouteState. setupRoute() then returns true.
| virtual bool DtHumanMoveAlongController::setupDestination | ( | ) | [virtual] |
Sets myControlPoint to the position of the route's current vertex.
If setupRoute() returns false, setupControlPoint() calls taskComplete() and returns false. Otherwise, it sets the position of the myControlPoint member variable to the position of myRoute’s current vertex. If myRouteHasChanged is true, setupGoalVector() is called, and myRouteHasChanged is set to false. true is then returned.
| virtual double DtHumanMoveAlongController::findDesiredSpeed | ( | ) | [virtual] |
Returns ordered speed of the entity.
| virtual void DtHumanMoveAlongController::stop | ( | ) | [virtual] |
Overrides to advance to the next vertex rather then actually stop when a vertex is reached.
Checks to see if the entity is currently moving to the last vertex in the route. If so, DtGroundMoveToControllerComponent::stop() is called. Otherwise, myProcessState->routeState()->next() is called, followed by setupControlPoint() and setupGoalVector().
| static void DtHumanMoveAlongController::objectAddedCb | ( | DtVrfObject * | vrfObject, |
| void * | usr | ||
| ) | [static] |
Calls processObjectAdded().
| static DtSimComponent* DtHumanMoveAlongController::creator | ( | const DtString & | name, |
| DtVrfObject * | owner, | ||
| DtSimManager * | simManager, | ||
| DtComponentDescriptor * | desc = 0, |
||
| DtReaderWriterRegistry * | parentRegistry = 0 |
||
| ) | [static] |
Static creator function for factory registration.
| virtual bool DtHumanMoveAlongController::createPorts | ( | ) | [virtual] |
Creates myDestinationOutputPort.
Reimplemented from DtSimComponent.
| virtual bool DtHumanMoveAlongController::createPortGroups | ( | ) | [virtual] |
Creates and initializes port groups.
Reimplemented from DtSimComponent.
| virtual bool DtHumanMoveAlongController::createPSR | ( | ) | [virtual] |
Creates myProcessState data member, and adds it to our process state repository manager.
Passes in the name and type specified in the component descriptor (if they exist) to the DtVrfProcessStateRepository::createRepository factory method. If name and/or type is not specified, uses the appropriate default strings defined in procSRTypes.h.
| virtual void DtHumanMoveAlongController::doMoving | ( | ) | [virtual] |
Calls determineGearSetting(), findDesiredSpeed() and findDesiredHeading() and then sets port values based on those results.
| virtual double DtHumanMoveAlongController::findDesiredHeading | ( | ) | [virtual] |
Calls headingAngleTo() to find the heading from the entity to the destination.
| virtual bool DtHumanMoveAlongController::destinationIsInsideObstruction | ( | const DtVector & | localDestination | ) | const [virtual] |
Returns whether or not current destination is inside an obstruction.
| virtual bool DtHumanMoveAlongController::decideToGiveUpTask | ( | ) | const [virtual] |
Checks to see if destination is inside an obstruction.
If it is, returns true. Returns false otheriwise.
Reimplemented from DtSingleTaskControllerComponent.
| virtual void DtHumanMoveAlongController::buildLocalRoute | ( | ) | [protected, virtual] |
builds the local copy of the route by copying myRoute's vertices
to my local storage in process state repository: myVertices. (calls process state repository's setRouteVertices()).
| virtual void DtHumanMoveAlongController::emptyVertexList | ( | ) | [protected, virtual] |
removes and deletes vertices from the vertex list in process state repository (calls process state repository's emptyRouteVertices()).
| virtual void DtHumanMoveAlongController::processObjectAdded | ( | DtVrfObject * | vrfObject | ) | [protected, virtual] |
Checks given vrfObject against the route we're looking for.
If it is ours, registers a vertices-changed callback on the object. This way we can detect if the route changes while we're trying to follow it.
| virtual void DtHumanMoveAlongController::clearTask | ( | ) | [protected, virtual] |
Override to clear route name and route state data stored in myProcessState.
Reimplemented from DtSingleTaskControllerComponent.
| virtual void DtHumanMoveAlongController::moveToDestination | ( | ) | [protected, virtual] |
Attempts to move to the destination location. Override to provide movement functionality.
| virtual void DtHumanMoveAlongController::invalidateDestinationVector | ( | ) | const [protected, virtual] |
Tells the component that any cached destination vector should be recalculated.
| virtual double DtHumanMoveAlongController::distanceToDestination | ( | ) | const [protected, virtual] |
| virtual bool DtHumanMoveAlongController::atDestination | ( | ) | [protected, virtual] |
Are we within the at-distance parameter to the destination? If the myDistanceSquared member calculated in tick() is less than or equal to the square of the value provided in the at-distance parameter of the DtGroundMoveToDescriptor, atDestination() sets myAtDestination to true.
If the myDistanceSquared !<= at-distance, atDestination() sets myAtDestination to false. myAtDestination is returned to the calling function.
| virtual bool DtHumanMoveAlongController::passedDestination | ( | ) | [protected, virtual] |
Determines if the entity will pass the destination to which it is moving this frame if it continues at its current velocity and acceleration.
It dead-reckons its position. It calculates the vector that points from the entity to the destination It finds the dot product between this vector and destination vector, If that dot product is greater than 0.0, the entity will pass the destinationthis tick if it does not stop. myPassedDestination is set, and the value is returned to the calling function.
| virtual bool DtHumanMoveAlongController::getDestination | ( | DtVector & | destination | ) | [protected, virtual] |
| destination | the position this object is trying to drive to in local coordinates. |
| virtual const DtVector& DtHumanMoveAlongController::destinationVector | ( | ) | const [protected, virtual] |
Returns the current destination vector for the entity.
| virtual void DtHumanMoveAlongController::setupDestinationVector | ( | ) | const [protected, virtual] |
Sets up a vector from the current destination location to the entity's location to use in determining when/if the entity has passed its destination location.
This is done by subtracting the DtVector representing the destination's position from the one representing the entity’s position.
| virtual double DtHumanMoveAlongController::atDistance | ( | ) | const [protected, virtual] |
Maximum distance at which entity is considered to be 'at' a route vertex.
Returns value stored in descriptor (if it exists), otherwise returns 1.0.
| virtual bool DtHumanMoveAlongController::stayOnRoute | ( | ) | const [protected, virtual] |
If true, will attempt to closely follow route segments as it moves along a route.
If false, will only attempt to reach each waypoint in turn as it moves along the route.
| virtual double DtHumanMoveAlongController::minCorrectionDistance | ( | ) | const [protected, virtual] |
Maximum distance at which entity is considered to be 'at' a route vertex.
| virtual double DtHumanMoveAlongController::maxCorrectionDistance | ( | ) | const [protected, virtual] |
| virtual double DtHumanMoveAlongController::maxCorrectionAngle | ( | ) | const [protected, virtual] |
| virtual bool DtHumanMoveAlongController::getCurrentRouteSegment | ( | DtVector & | routeSegmentStart, |
| DtVector & | routeSegmentEnd | ||
| ) | const [protected, virtual] |
| routeSegmentStart | Starting point of route segment in local coordinates. |
| routeSegmentEnd | End point of route segment in local coordinates. |
Input Port Name: potential-collision-info
Input Port Description:
Input Port Range:
Input Port Default Value:
Input Group Parent: collision-avoidance-control.
Input Port Group Name: collision-avoidance-control
Input Port Group Description:
DtHumanMovementControlOutputPortGroup* DtHumanMoveAlongController::myHumanMovementControlOutputPortGroup [protected] |
Output Group Name: movement-control
.
Output Port Name: destination
Output Port Description: Specifies the current destination of the entity in geocentric coordiantes.
Output Port Range:
Output Group Parent:
Container for state data associated with this component.
This state is saved and restored as part of a scenario (or checkpoint).
DtHumanMoveAlongControllerDescriptor* DtHumanMoveAlongController::myHumanMoveAlongControllerDescriptor [protected] |
DtVrfObject* DtHumanMoveAlongController::myRoute [protected] |
This is looked up once per tick - assumed unchanging while we have control.
bool DtHumanMoveAlongController::myRouteHasChanged [protected] |
This gets set to true when a modifyRoute message for the route we're following is received.
bool DtHumanMoveAlongController::myResetVertex [protected] |
bool DtHumanMoveAlongController::myFirstTick [protected] |
int DtHumanMoveAlongController::myPreviousVertex [protected] |
bool DtHumanMoveAlongController::myAtDestination [protected] |
bool DtHumanMoveAlongController::myNearDestination [protected] |
bool DtHumanMoveAlongController::myPassedDestination [protected] |
double DtHumanMoveAlongController::myDistanceSquared [protected] |
double DtHumanMoveAlongController::myCurrentSpeed [protected] |
bool DtHumanMoveAlongController::myDestinationVectorIsValid [mutable, protected] |
DtVector DtHumanMoveAlongController::myDestinationVector [mutable, protected] |