/** \file
 *
 *  Contains the GuidanceModule class implementation.
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#include "GuidanceModule.h"

#include "AbortDrift.h"
#include "AbortDriftIF.h"
#include "AltitudeEnvelope.h"
#include "AltitudeEnvelopeIF.h"
#include "AltitudeServo.h"
#include "AltitudeServoIF.h"
#include "BackseatDriver.h"
#include "BackseatDriverIF.h"
#include "Buoyancy.h"
#include "BuoyancyIF.h"
#include "Circle.h"
#include "CircleIF.h"
#include "DepthEnvelope.h"
#include "DepthEnvelopeIF.h"
#include "DepthServo.h"
#include "DepthServoIF.h"
#include "Execute.h"
#include "ExecuteIF.h"
#include "FrontTracking.h"
#include "FrontTrackingIF.h"
#include "GoToSurface.h"
#include "GoToSurfaceIF.h"
#include "KeepStation.h"
#include "KeepStationIF.h"
#include "Lane.h"
#include "LaneIF.h"
#include "Mass.h"
#include "MassIF.h"
#include "OffshoreEnvelope.h"
#include "OffshoreEnvelopeIF.h"
#include "Pitch.h"
#include "PitchIF.h"
#include "PitchEnvelope.h"
#include "PitchEnvelopeIF.h"
#include "PitchServo.h"
#include "PitchServoIF.h"
#include "Point.h"
#include "PointIF.h"
#include "PrepareToDive.h"
#include "PrepareToDiveIF.h"
#include "SetSpeed.h"
#include "SetSpeedIF.h"
#include "SlowYo.h"
#include "SlowYoIF.h"
#include "StopMission.h"
#include "StopMissionIF.h"
#include "Wait.h"
#include "WaitIF.h"
#include "WaitDepth.h"
#include "WaitDepthIF.h"
#include "WaterDepthEnvelope.h"
#include "WaterDepthEnvelopeIF.h"
#include "Waypoint.h"
#include "WaypointIF.h"
#include "YoYo.h"
#include "YoYoIF.h"
#include "ZigZag.h"
#include "ZigZagIF.h"

GuidanceModule::GuidanceModule()
    : Module( "Guidance",
              "Contains behaviors and commands" )
{}

void GuidanceModule::loadComponents( Logger& logger )
{
    registerBehaviorCreator( AbortDriftIF::NAME, &AbortDrift::CreateBehavior );
    registerBehaviorCreator( AltitudeEnvelopeIF::NAME, &AltitudeEnvelope::CreateBehavior );
    registerBehaviorCreator( AltitudeServoIF::NAME, &AltitudeServo::CreateBehavior );
    registerBehaviorCreator( BackseatDriverIF::NAME, &BackseatDriver::CreateBehavior );
    registerBehaviorCreator( BuoyancyIF::NAME, &Buoyancy::CreateBehavior );
    registerBehaviorCreator( CircleIF::NAME, &Circle::CreateBehavior );
    registerBehaviorCreator( DepthEnvelopeIF::NAME, &DepthEnvelope::CreateBehavior );
    registerBehaviorCreator( DepthServoIF::NAME, &DepthServo::CreateBehavior );
    registerBehaviorCreator( ExecuteIF::NAME, &Execute::CreateBehavior );
    registerBehaviorCreator( FrontTrackingIF::NAME, &FrontTracking::CreateBehavior );
    registerBehaviorCreator( GoToSurfaceIF::NAME, &GoToSurface::CreateBehavior );
    registerBehaviorCreator( KeepStationIF::NAME, &KeepStation::CreateBehavior );
    registerBehaviorCreator( LaneIF::NAME, &Lane::CreateBehavior );
    registerBehaviorCreator( MassIF::NAME, &Mass::CreateBehavior );
    registerBehaviorCreator( OffshoreEnvelopeIF::NAME, &OffshoreEnvelope::CreateBehavior );
    registerBehaviorCreator( PitchIF::NAME, &Pitch::CreateBehavior );
    registerBehaviorCreator( PitchEnvelopeIF::NAME, &PitchEnvelope::CreateBehavior );
    registerBehaviorCreator( PitchServoIF::NAME, &PitchServo::CreateBehavior );
    registerBehaviorCreator( PointIF::NAME, &Point::CreateBehavior );
    registerBehaviorCreator( PrepareToDiveIF::NAME, &PrepareToDive::CreateBehavior );
    registerBehaviorCreator( SetSpeedIF::NAME, &SetSpeed::CreateBehavior );
    registerBehaviorCreator( SlowYoIF::NAME, &SlowYo::CreateBehavior );
    registerBehaviorCreator( StopMissionIF::NAME, &StopMission::CreateBehavior );
    registerBehaviorCreator( WaitIF::NAME, &Wait::CreateBehavior );
    registerBehaviorCreator( WaitDepthIF::NAME, &WaitDepth::CreateBehavior );
    registerBehaviorCreator( WaterDepthEnvelopeIF::NAME, &WaterDepthEnvelope::CreateBehavior );
    registerBehaviorCreator( WaypointIF::NAME, &Waypoint::CreateBehavior );
    registerBehaviorCreator( YoYoIF::NAME, &YoYo::CreateBehavior );
    registerBehaviorCreator( ZigZagIF::NAME, &ZigZag::CreateBehavior );
}

GuidanceModule::~GuidanceModule()
{}
