VR-Forces 4.0.4 Class Documentation
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
DtFixedWingMoveAlongController Class Reference

DtFixedWingMoveAlongController is a controller that models the movement of a fixed wing entity along a route. More...

Inheritance diagram for DtFixedWingMoveAlongController:
Inheritance graph
[legend]

List of all members.

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 DtSimComponentcreator (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
DtFixedWingMoveAlongControlleroperator= (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

DtVrfObjectmyRoute
 This is looked up once per tick - assumed unchanging while we have control.
bool myRouteHasChanged
bool myFirstTick

Detailed Description

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


Constructor & Destructor Documentation

DtFixedWingMoveAlongController::DtFixedWingMoveAlongController ( const DtString name,
DtVrfObject owner,
DtSimManager simManager,
DtComponentDescriptor desc = 0,
DtReaderWriterRegistry parentRegistry = 0 
)

(const DtString&,DtVrfObject*,DtSimManager*,

Parameters:
nameReader writer name of this component.
ownerThe DtVrfObject that owns this component
simManagerThe simulation manager (provides access to terrain, message interface, simulation clock).
descThe component descriptor used to initialize this component.
parentRegistryPointer to the parent reader writer registry (the containing object that reads/writes this object).
(const DtString&,DtVrfObject*,DtSimManager*, DtComponentDescriptor*,DtReaderWriterRegistry* parentRegistry)

destructor

default constructor - should not be called

copy constructor


Member Function Documentation

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.

Returns:
DtFixedWingMoveAlongControllerType

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.

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.

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.

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.

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.

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.

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]

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.

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.

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.

Makes sure to update the state of the controller appropriately if either the route or any other relevent vrfobject was deleted.

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*,

Parameters:
nameReader writer name of this component.
ownerThe DtVrfObject that owns this component
simManagerThe simulation manager (provides access to terrain, message interface, simulation clock).
descThe component descriptor used to initialize this component.
parentRegistryPointer to the parent reader writer registry (the containing object that reads/writes this object).
(const DtString&,DtVrfObject*,DtSimManager*, DtComponentDescriptor*,DtReaderWriterRegistry* parentRegistry)

Returns:
New instance of this class.

Reimplemented from DtFixedWingPilotController.

Reimplemented in DtFixedWingPatrolRouteController, and DtCruiseMissileMoveAlongController.

DtFixedWingMoveAlongController& DtFixedWingMoveAlongController::operator= ( const DtFixedWingMoveAlongController orig) [protected]

assignment operator

deletes the route currently stored.

Updates the take off direction vector in the process state repository by calculating the direction from the current location to the current route point.

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.

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:

  • myProcessState and myProcessState->routeState()
  • myFixedWingEntityState
  • simManager() && entity()->terrainAttachedTo() The movement status is set as follows: Entity Current Pt. in Rt. Movement Status on ground on ground taxi (only if there are no further points in the route or the next point is on the ground as well. on ground on ground take off (ONLY if next point in route is in the air) on ground in air take off in air on ground landing in air in air flying If the terrain data under each point in the route is not available, myWaitingToSetMovementStatus in myProcessState is set to true, the movement state is left unchanged and false is returned. Otherwise the movement state is set as described above, myWaitingToSetMovementStatus is set to false and true is returned.

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.


Member Data Documentation

This is looked up once per tick - assumed unchanging while we have control.


The documentation for this class was generated from the following file:

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)