![]() |
VR-Forces 4.0.4 Class Documentation
|
DtFixedWingMoveAlongController is a controller that models the movement of a fixed wing entity along a route. More...

Public Member Functions | |
| DtFixedWingMoveAlongController (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) | |
| (const DtString&,DtVrfObject*,DtSimManager*, | |
| virtual | ~DtFixedWingMoveAlongController () |
| destructor | |
| virtual void | tick () |
| Calculate new control values. | |
| virtual DtString | type () const |
| Returns a string identifies the class type of component. | |
| virtual void | doFinishing () |
| Based on the current movement status of the entity, calls the appropriate doFinishing function. | |
| virtual void | doFinishingForFlying () |
| Checks to see if the entity is within two seconds of being at the waypoint, or if the entity’s distance from the waypoint is greater than it was the previous frame (by comparing myProcessState->distanceSquared() to myProcessState->lastDistanceSquared()). | |
| virtual void | doFinishingForTaxiing () |
| Only called if the entity is near its goal. | |
| virtual void | doMoving () |
| Determines what state the entity is currently in and then calls the appropriate doMoving function for that state. | |
| virtual void | doFlying () |
| Determines if the entity is five seconds or fewer away from being at the waypoint using the entity’s speed and myDistanceSquared. | |
| virtual void | doTaxiing () |
| Determines if the entity is near its goal. | |
| virtual void | doTakeOff () |
| Changes the ordered speed to be the max ground speed and then taxi's in the direction of the waypoint. | |
| virtual void | doLanding () |
| Checks to see if the entity is on the ground. | |
| virtual double | findDesiredSpeed () |
| This function returns the appropriate speed for the movement status of the FWE. | |
| virtual bool | nearGoal () |
| Determines if the entity is close enough to the waypoint that it can be considered near its goal. | |
| virtual bool | atGoal () |
| Determines if the entity is "at" the goal. | |
| virtual bool | passedGoal () |
| Determines if the entity will move passed the control point to which it is moving this frame if it continues at its current velocity and acceleration. | |
| virtual void | processFlyAlongTask (DtSimMessage *msg) |
| virtual void | processMoveAlongTask (DtSimMessage *msg) |
| virtual void | processRouteChanged (DtVrfObject *obj) |
| Called when the route to which this entity is tasked is modified. | |
| virtual void | processSetAltitude (DtSimMessage *msg) |
| In all of the process functions, if an altitude change occured, then the function redetermines the proper value for the movement status and any other state variables. | |
| virtual void | processSetLocation (DtSimMessage *msg) |
| virtual void | processSetRestore (DtSimMessage *msg) |
| virtual void | processModifyVrfObject (DtSimMessage *msg) |
| If the entity is tasked, the route is valid, and the object moved was the entity, then this resets the current route state to the closest point on the route. | |
| virtual void | processDeleteVrfObject (DtVrfObject *msg) |
| Makes sure to update the state of the controller appropriately if either the route or any other relevent vrfobject was deleted. | |
| virtual bool | setupRoute () |
| virtual void | registerTaskMsgCallbacks () |
| Overrides this so it can register it's interest in the radio messages defined above. | |
Static Public Member Functions | |
| static void | moveAlongCallback (DtSimMessage *msg, void *usrData) |
| Instances of this component will register these callbacks with their own 'this' pointer as user data with the msg executive requesting notification of move-along tasks. | |
| static void | flyAlongCallback (DtSimMessage *msg, void *usrData) |
| static void | routeChangedCallback (DtVrfObject *obj, void *usrData) |
| static void | setAltitudeCallback (DtSimMessage *msg, void *usrData) |
| static void | setLocationCallback (DtSimMessage *msg, void *usrData) |
| static void | setRestoreCallback (DtSimMessage *msg, void *usrData) |
| static void | modifyVrfObjectCallback (DtSimMessage *msg, void *usr) |
| static void | deleteVrfObjectCallback (DtVrfObject *msg, void *usr) |
| static DtSimComponent * | creator (const DtString &name, DtVrfObject *owner, DtSimManager *simManager, DtComponentDescriptor *desc=0, DtReaderWriterRegistry *parentRegistry=0) |
| (const DtString&,DtVrfObject*,DtSimManager*, | |
Protected Member Functions | |
| DtFixedWingMoveAlongController () | |
| default constructor - should not be called | |
| DtFixedWingMoveAlongController (const DtFixedWingMoveAlongController &orig) | |
| copy constructor | |
| DtFixedWingMoveAlongController & | operator= (const DtFixedWingMoveAlongController &orig) |
| assignment operator | |
| void | clearStoredRoute () |
| deletes the route currently stored. | |
| void | updateTakeOffDir () |
| Updates the take off direction vector in the process state repository by calculating the direction from the current location to the current route point. | |
| void | updateLandingDir () |
| void | processEntityLocationChange () |
| This function is meant to be called after the entity's location has been changed by the user. | |
| virtual bool | setMovementStatusFromRoute () |
| Looks at the current point in the route and the entity's position and determines which type of movement status is appropriate. | |
| virtual void | resetValues () |
| This method will clear out internal values for new calculations. | |
| virtual void | clearTask () |
| Calls resetValues. | |
Protected Attributes | |
| DtVrfObject * | myRoute |
| This is looked up once per tick - assumed unchanging while we have control. | |
| bool | myRouteHasChanged |
| bool | myFirstTick |
DtFixedWingMoveAlongController is a controller that models the movement of a fixed wing entity along a route.
Developer Description: DtFixedWingMoveAlongController implements the move-along task for fixed-wing entities. It creates, in init(), a DtRouteState object (pointed to by the process state repository member myRouteState). This object is used by a DtRoute object to maintain the state of a route following task. All of its data and members are hidden from all but the DtRoute object; however, since it is created (and destroyed) by the controller, and not the DtRoute itself, it is possible for any number of controllers to follow the same DtRoute. DtFixedWingMoveAlongController overrides DtTaskControllerComponent:: registerTaskMsgCallbacks() and registers the callback function moveAlongCallback() for DtMoveAlongType radio messages.
Uses Descriptor Type: DtFixedWingPilotControllerDescriptor
| DtFixedWingMoveAlongController::DtFixedWingMoveAlongController | ( | 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 DtFixedWingMoveAlongController::~DtFixedWingMoveAlongController | ( | ) | [virtual] |
destructor
| DtFixedWingMoveAlongController::DtFixedWingMoveAlongController | ( | ) | [protected] |
default constructor - should not be called
| DtFixedWingMoveAlongController::DtFixedWingMoveAlongController | ( | const DtFixedWingMoveAlongController & | orig | ) | [protected] |
copy constructor
| virtual void DtFixedWingMoveAlongController::tick | ( | ) | [virtual] |
Calculate new control values.
If myWaitingToSetMovementStatus is set in myProcessState, then setMovementStatusFromRoute is called to see if the required terrain data is now available.
Reimplemented from DtFixedWingPilotController.
| virtual DtString DtFixedWingMoveAlongController::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.
Reimplemented from DtFixedWingPilotController.
Reimplemented in DtFixedWingPatrolRouteController, and DtCruiseMissileMoveAlongController.
| virtual void DtFixedWingMoveAlongController::doFinishing | ( | ) | [virtual] |
Based on the current movement status of the entity, calls the appropriate doFinishing function.
| virtual void DtFixedWingMoveAlongController::doFinishingForFlying | ( | ) | [virtual] |
Checks to see if the entity is within two seconds of being at the waypoint, or if the entity’s distance from the waypoint is greater than it was the previous frame (by comparing myProcessState->distanceSquared() to myProcessState->lastDistanceSquared()).
If so, all port values are set to 0.0, myFinishing is set to false, and taskComplete() is called. Otherwise, flyTo() is called, and myProcessState->lastDistanceSquared() is set to myDistanceSquared.
Reimplemented in DtFixedWingPatrolRouteController.
| virtual void DtFixedWingMoveAlongController::doFinishingForTaxiing | ( | ) | [virtual] |
Only called if the entity is near its goal.
Checks to see if the entity is at the goal or passed it. If so, then it stops. Otherwise, it continues to taxi, but at its approach speed if it has one.
Reimplemented in DtFixedWingPatrolRouteController.
| virtual void DtFixedWingMoveAlongController::doMoving | ( | ) | [virtual] |
Determines what state the entity is currently in and then calls the appropriate doMoving function for that state.
| virtual void DtFixedWingMoveAlongController::doFlying | ( | ) | [virtual] |
Determines if the entity is five seconds or fewer away from being at the waypoint using the entity’s speed and myDistanceSquared.
If it is, it sets the myFinishing flag to true; The myProcessState->lastDistanceSquared() is set to myDistanceSquared. otherwise, it calls the flyTo() function provided by its parent class.
| virtual void DtFixedWingMoveAlongController::doTaxiing | ( | ) | [virtual] |
Determines if the entity is near its goal.
If it is, it sets the finishing flag to true. The myProcessState->lastDistanceSquared() is set to myDistanceSquared. Otherwise, it calls the taxiTo() function provided by its parent class.
| virtual void DtFixedWingMoveAlongController::doTakeOff | ( | ) | [virtual] |
Changes the ordered speed to be the max ground speed and then taxi's in the direction of the waypoint.
By setting the ordered speed to be the max ground speed, the plane will acclerate until either maxing out its speed or reaching min lift speed and taking off.
| virtual void DtFixedWingMoveAlongController::doLanding | ( | ) | [virtual] |
Checks to see if the entity is on the ground.
If so, it assumes that the entity has landed, updates the movement status, and calls makes sure the correct movement takes place. If not, then it creates the landing direction vector if it doesn't exist, ensures that the ordered altitude is set appropriately, and proceeds to fly towards the touch down point at the desired speed.
Reimplemented in DtFixedWingPatrolRouteController.
| virtual double DtFixedWingMoveAlongController::findDesiredSpeed | ( | ) | [virtual] |
This function returns the appropriate speed for the movement status of the FWE.
Flying - the ordered speed. For now, the ordered speed doesn't change whether approaching a goal or not. Taxiing - the ordered ground speed unless it is approaching the goal, at which point it will return the approach speed. Landing - the minimum lift speed Taking off - the maximum ground speed.
| virtual bool DtFixedWingMoveAlongController::nearGoal | ( | ) | [virtual] |
Determines if the entity is close enough to the waypoint that it can be considered near its goal.
For ground motion, this means determining if its breaking distance is greater than or equal to the specified near distance. For flying, this determines if the entity is within 10 seconds of the goal at current speed or orientation. NOTE: if the entity is not, but because it is at it's maximum altitude and the altitude is further above, it then determines if it is close enough to the goal as if that goal was at its altitude.
| virtual bool DtFixedWingMoveAlongController::atGoal | ( | ) | [virtual] |
Determines if the entity is "at" the goal.
For taxiing, it determines if entity is within the specified at-distance. For flying, it basically performs the same calculation for closeness, including altitude conditions, as nearGoal(), but for within 2 seconds.
| virtual bool DtFixedWingMoveAlongController::passedGoal | ( | ) | [virtual] |
Determines if the entity will move passed the control point to which it is moving this frame if it continues at its current velocity and acceleration.
If so, then it returns true.
| static void DtFixedWingMoveAlongController::moveAlongCallback | ( | DtSimMessage * | msg, |
| void * | usrData | ||
| ) | [static] |
Instances of this component will register these callbacks with their own 'this' pointer as user data with the msg executive requesting notification of move-along tasks.
ASSUMPTION: All of these functions assume that the messages and the associated data are valid.
| static void DtFixedWingMoveAlongController::flyAlongCallback | ( | DtSimMessage * | msg, |
| void * | usrData | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::routeChangedCallback | ( | DtVrfObject * | obj, |
| void * | usrData | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::setAltitudeCallback | ( | DtSimMessage * | msg, |
| void * | usrData | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::setLocationCallback | ( | DtSimMessage * | msg, |
| void * | usrData | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::setRestoreCallback | ( | DtSimMessage * | msg, |
| void * | usrData | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::modifyVrfObjectCallback | ( | DtSimMessage * | msg, |
| void * | usr | ||
| ) | [static] |
| static void DtFixedWingMoveAlongController::deleteVrfObjectCallback | ( | DtVrfObject * | msg, |
| void * | usr | ||
| ) | [static] |
| virtual void DtFixedWingMoveAlongController::processFlyAlongTask | ( | DtSimMessage * | msg | ) | [virtual] |
| virtual void DtFixedWingMoveAlongController::processMoveAlongTask | ( | DtSimMessage * | msg | ) | [virtual] |
| virtual void DtFixedWingMoveAlongController::processRouteChanged | ( | DtVrfObject * | obj | ) | [virtual] |
Called when the route to which this entity is tasked is modified.
The function determines if the route change warrants updating the internal state and, if so, updates the internal state appropriately.
| virtual void DtFixedWingMoveAlongController::processSetAltitude | ( | DtSimMessage * | msg | ) | [virtual] |
In all of the process functions, if an altitude change occured, then the function redetermines the proper value for the movement status and any other state variables.
| virtual void DtFixedWingMoveAlongController::processSetLocation | ( | DtSimMessage * | msg | ) | [virtual] |
| virtual void DtFixedWingMoveAlongController::processSetRestore | ( | DtSimMessage * | msg | ) | [virtual] |
| virtual void DtFixedWingMoveAlongController::processModifyVrfObject | ( | DtSimMessage * | msg | ) | [virtual] |
If the entity is tasked, the route is valid, and the object moved was the entity, then this resets the current route state to the closest point on the route.
If the current movement status is taking off then it also resets the take off direction vector.
| virtual void DtFixedWingMoveAlongController::processDeleteVrfObject | ( | DtVrfObject * | msg | ) | [virtual] |
Makes sure to update the state of the controller appropriately if either the route or any other relevent vrfobject was deleted.
| virtual bool DtFixedWingMoveAlongController::setupRoute | ( | ) | [virtual] |
| virtual void DtFixedWingMoveAlongController::registerTaskMsgCallbacks | ( | ) | [virtual] |
Overrides this so it can register it's interest in the radio messages defined above.
Reimplemented from DtTaskControllerComponent.
Reimplemented in DtFixedWingPatrolRouteController.
| static DtSimComponent* DtFixedWingMoveAlongController::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). |
Reimplemented from DtFixedWingPilotController.
Reimplemented in DtFixedWingPatrolRouteController, and DtCruiseMissileMoveAlongController.
| DtFixedWingMoveAlongController& DtFixedWingMoveAlongController::operator= | ( | const DtFixedWingMoveAlongController & | orig | ) | [protected] |
assignment operator
| void DtFixedWingMoveAlongController::clearStoredRoute | ( | ) | [protected] |
deletes the route currently stored.
| void DtFixedWingMoveAlongController::updateTakeOffDir | ( | ) | [protected] |
Updates the take off direction vector in the process state repository by calculating the direction from the current location to the current route point.
| void DtFixedWingMoveAlongController::updateLandingDir | ( | ) | [protected] |
| void DtFixedWingMoveAlongController::processEntityLocationChange | ( | ) | [protected] |
This function is meant to be called after the entity's location has been changed by the user.
Usually this is through a setLocation, setAltitude, or drag and drop in the front end, but not necessarily. It resets the route state to the closest point in the route to the entity. Then it resets all necessary state including the ordered altitude and the current movement status. "Finishing" state is set to false and the lastDistanceSquared value is also reset.
| virtual bool DtFixedWingMoveAlongController::setMovementStatusFromRoute | ( | ) | [protected, virtual] |
Looks at the current point in the route and the entity's position and determines which type of movement status is appropriate.
NOTE: The following objects must be valid before this function can be called or its behavior is undefined:
Reimplemented in DtCruiseMissileMoveAlongController.
| virtual void DtFixedWingMoveAlongController::resetValues | ( | ) | [protected, virtual] |
This method will clear out internal values for new calculations.
| virtual void DtFixedWingMoveAlongController::clearTask | ( | ) | [protected, virtual] |
Calls resetValues.
Reimplemented from DtFixedWingPilotController.
DtVrfObject* DtFixedWingMoveAlongController::myRoute [protected] |
This is looked up once per tick - assumed unchanging while we have control.
bool DtFixedWingMoveAlongController::myFirstTick [protected] |