/**************************************************************************
 * navaids.hpp -- navigation defines and prototypes
 *
 * Written by Charles Hotchkiss, started March 1998.
 *
 * Copyright (C) 1998  Charles Hotchkiss chotchkiss@namg.us.anritsu.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * $Id$
 **************************************************************************/


// Class nav_aid
//
//  Includes NDB and IMO Markers, base for all other navigational aids.
//  The destructor is virtual to permit use of nav_aid pointers to derived
//  classes, but is instantiable none the less.
//  Assumes global pointer to current aircraft.

class nav_aid
  private:
    LRECT  here_at;   // Codes left = Long,
                      //        top = Lat,
                      //      right = Alt,
                      //     bottom = Range
    UINT   frequency; // special coding
    UINT   range;
    char  *ID;
    char  *Name;

  public:
    nav_aid( LRECT loc,
             UNIT freq, UINT range,
             const char *eye_dee, const char *MyName );

    virtual ~nav_aid();
    operator ==

    void update_status( void );  // Called by main loop?

    bool        in_range   ( LRECT loc );
    const char *pID        ( void );
    const char *pName      ( void );
    Cartestian  Location   ( void );
};

// Class ATIS_stn
//

class ATIS_stn :: public nav_aid {
  private:
    int   runways;
    int  *pref_rnwys; // prefered runway list;
    char *format;

  public:
    bool set_message( const char *pmsg ); // MSFS coded message
    ~ATIS_stn();
    ATIS_stn( LRECT here,
              UINT  radius,
              char *eye_dee,
              char *itsname,
              int  *runways,
              char *defaultmsg);
};

// Class DirBeacon
//
// Includes VOR Stations. Base for Omni?

class DirBeacon :: public nav_aid{
  private:
    UINT        radial;

  public:
    int         phase_angle( void );
    int         deflection ( void );
    double      ground_rate( void );
};

// Class ils_station
//
// Includes ILS

class ils_station :: public DirBeacon{
  private:
    long slope_freq;
    UINT glide_angle;
    UINT approach_angle;

  public:
    ULONG deflection( void );
};