- static FGMkrBeacon::fgMkrBeacType last_beacon = FGMkrBeacon::NOBEACON;
-
- double lon = lon_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
- double lat = lat_node->getDoubleValue() * SGD_DEGREES_TO_RADIANS;
- double elev = alt_node->getDoubleValue() * SG_FEET_TO_METER;
-
- // FIXME: the panel should handle this
- // don't worry about overhead for now,
- // since this is handled only periodically
- int dme_switch_pos = fgGetInt("/radios/dme/switch-position");
- if (dme_switch_pos == 0) {
- dme_freq = 0;
- dme_inrange = false;
- } else if (dme_switch_pos == 1) {
- if (dme_freq != navcom1.get_nav_freq()) {
- dme_freq = navcom1.get_nav_freq();
- need_update = true;
- }
- } else if (dme_switch_pos == 3) {
- if (dme_freq != navcom2.get_nav_freq()) {
- dme_freq = navcom2.get_nav_freq();
- need_update = true;
- }
- }
-
- FGILS ils;
- FGNav nav;
-
- navcom1.search();
- navcom2.search();
-
- ////////////////////////////////////////////////////////////////////////
- // DME
- ////////////////////////////////////////////////////////////////////////
-
- if ( current_ilslist->query( lon, lat, elev, dme_freq, &ils ) ) {
- if (ils.get_has_dme()) {
- dme_valid = true;
- dme_lon = ils.get_loclon();
- dme_lat = ils.get_loclat();
- dme_elev = ils.get_gselev();
- dme_range = FG_ILS_DEFAULT_RANGE;
- dme_effective_range = kludgeRange(dme_elev, elev, dme_range);
- dme_x = ils.get_dme_x();
- dme_y = ils.get_dme_y();
- dme_z = ils.get_dme_z();
- }
- } else if ( current_navlist->query( lon, lat, elev, dme_freq, &nav ) ) {
- if (nav.get_has_dme()) {
- dme_valid = true;
- dme_lon = nav.get_lon();
- dme_lat = nav.get_lat();
- dme_elev = nav.get_elev();
- dme_range = nav.get_range();
- dme_effective_range = kludgeRange(dme_elev, elev, dme_range);
- dme_x = nav.get_x();
- dme_y = nav.get_y();
- dme_z = nav.get_z();
- }
- } else {
- dme_valid = false;
- dme_dist = 0;
- }
-
-
- ////////////////////////////////////////////////////////////////////////
- // Beacons.
- ////////////////////////////////////////////////////////////////////////
-
- FGMkrBeacon::fgMkrBeacType beacon_type
- = current_beacons->query( lon * SGD_RADIANS_TO_DEGREES,
- lat * SGD_RADIANS_TO_DEGREES, elev );
-
- outer_marker = middle_marker = inner_marker = false;
-
- if ( beacon_type == FGMkrBeacon::OUTER ) {
- outer_marker = true;
- // cout << "OUTER MARKER" << endl;
-#ifdef ENABLE_AUDIO_SUPPORT
- if ( last_beacon != FGMkrBeacon::OUTER ) {
- if ( ! globals->get_soundmgr()->exists( "outer-marker" ) ) {
- FGSimpleSound *sound = beacon.get_outer();
- sound->set_volume( 0.3 );
- globals->get_soundmgr()->add( sound, "outer-marker" );
- }
- if ( !globals->get_soundmgr()->is_playing("outer-marker") ) {
- globals->get_soundmgr()->play_looped( "outer-marker" );
- }
- }
-#endif
- } else if ( beacon_type == FGMkrBeacon::MIDDLE ) {
- middle_marker = true;
- // cout << "MIDDLE MARKER" << endl;
-#ifdef ENABLE_AUDIO_SUPPORT
- if ( last_beacon != FGMkrBeacon::MIDDLE ) {
- if ( ! globals->get_soundmgr()->exists( "middle-marker" ) ) {
- FGSimpleSound *sound = beacon.get_middle();
- sound->set_volume( 0.3 );
- globals->get_soundmgr()->add( sound, "middle-marker" );
- }
- if ( !globals->get_soundmgr()->is_playing("middle-marker") ) {
- globals->get_soundmgr()->play_looped( "middle-marker" );
- }
- }
-#endif
- } else if ( beacon_type == FGMkrBeacon::INNER ) {
- inner_marker = true;
- // cout << "INNER MARKER" << endl;
-#ifdef ENABLE_AUDIO_SUPPORT
- if ( last_beacon != FGMkrBeacon::INNER ) {
- if ( ! globals->get_soundmgr()->exists( "inner-marker" ) ) {
- FGSimpleSound *sound = beacon.get_inner();
- sound->set_volume( 0.3 );
- globals->get_soundmgr()->add( sound, "inner-marker" );
- }
- if ( !globals->get_soundmgr()->is_playing("inner-marker") ) {
- globals->get_soundmgr()->play_looped( "inner-marker" );
- }
- }
-#endif
- } else {
- // cout << "no marker" << endl;
-#ifdef ENABLE_AUDIO_SUPPORT
- globals->get_soundmgr()->stop( "outer-marker" );
- globals->get_soundmgr()->stop( "middle-marker" );
- globals->get_soundmgr()->stop( "inner-marker" );
-#endif
- }
- last_beacon = beacon_type;
-