/*****************************************************************************
 * $LastChangedDate: 2011-04-23 21:07:07 -0400 (Sat, 23 Apr 2011) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   Aircraft carrier.
 *//*
 * LEGAL:   COPYRIGHT (C) 2008 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef PROGRAM_CARRIER_HH
#define PROGRAM_CARRIER_HH 1

#include <vector>
#include "object/module.hh"
#include "object/aircraft.hh"
using namespace object;

namespace program {

////////////////////////////////////////////////////////////////////////////////
/// @brief Aircraft carrier.
///
/// The Carrier class itself is a container of Carrier instances.
/// Carrier isn't a container of Aircraft objects (World is the container).
///
class Carrier : public Dyna
{
PREVENT_COPYING(Carrier)
typedef Dyna Parent;
public:
                                Carrier( shptr<Graph> graph, const WorldVertex& pos, const uint carrierNum );
                                ~Carrier();
    virtual const string        GetName( void ) { return string("NimitzCarrier"); }
    virtual NodeSort            GetNodeSort( void );
    CLASS_METHOD shptr<Carrier> MakeCarrier( const WorldVertex& carrierPosition, const uint carrierNum );
    void                        PlaceAircraft( shptr<Aircraft> aircraft, const GeoVertex& relativeGeoPosition );
    bool                        IfRunwayAltitude( const WorldVertex& position );  // approx

private:
    CLASS_VAR std::vector<shptr<Carrier> > msCarriers;  ///< class itself is a container of instances
public:
    DECLARE_TYPESIG(TYPESIG_CARRIER)
};

} // namespace program

#endif // PROGRAM_CARRIER_HH
