]> git.mxchange.org Git - flightgear.git/blobdiff - src/Cockpit/kr_87.cxx
Refactored some of the navlist code and removed the built in "fail to find"
[flightgear.git] / src / Cockpit / kr_87.cxx
index c26f30348e94d1362129a15ddafeab3f81f0e8c3..9c06f9a491968290c22d87464032793af1e714c6 100644 (file)
@@ -88,6 +88,7 @@ FGKR_87::FGKR_87() :
     count_mode(0),
     rotation(0),
     power_btn(true),
+    audio_btn(true),
     vol_btn(0.5),
     adf_btn(true),
     bfo_btn(false),
@@ -97,7 +98,6 @@ FGKR_87::FGKR_87() :
     last_flt_et_btn(false),
     set_rst_btn(false),
     last_set_rst_btn(false),
-    ident_btn(false),
     freq(0.0),
     stby_freq(0.0),
     needle_deg(0.0),
@@ -144,6 +144,10 @@ void FGKR_87::bind () {
          &FGKR_87::get_power_btn,
          &FGKR_87::set_power_btn);
     fgSetArchivable("/radios/kr-87/inputs/power-btn");
+    fgTie("/radios/kr-87/inputs/audio-btn", this,
+         &FGKR_87::get_audio_btn,
+         &FGKR_87::set_audio_btn);
+    fgSetArchivable("/radios/kr-87/inputs/audio-btn");
     fgTie("/radios/kr-87/inputs/volume", this,
          &FGKR_87::get_vol_btn,
          &FGKR_87::set_vol_btn);
@@ -163,8 +167,6 @@ void FGKR_87::bind () {
     fgTie("/radios/kr-87/inputs/set-rst-btn", this,
          &FGKR_87::get_set_rst_btn,
          &FGKR_87::set_set_rst_btn);
-    fgTie("/radios/kr-87/inputs/ident-btn", this,
-         &FGKR_87::get_ident_btn, &FGKR_87::set_ident_btn);
 
     // outputs
     fgTie("/radios/kr-87/outputs/selected-khz", this,
@@ -439,15 +441,18 @@ void FGKR_87::update( double dt ) {
     // cout << "flt = " << flight_timer << " et = " << elapsed_timer 
     //      << " needle = " << needle_deg << endl;
 
-#ifdef ENABLE_AUDIO_SUPPORT
     if ( valid && inrange && servicable->getBoolValue() ) {
-       // play station ident via audio system if on + ident_btn,
+       // play station ident via audio system if on + ant mode,
        // otherwise turn it off
-       if ( vol_btn >= 0.01 && ident_btn ) {
+       if ( vol_btn >= 0.01 && audio_btn ) {
            FGSimpleSound *sound;
            sound = globals->get_soundmgr()->find( "adf-ident" );
             if ( sound != NULL ) {
-                sound->set_volume( vol_btn );
+                if ( !adf_btn ) {
+                    sound->set_volume( vol_btn );
+                } else {
+                    sound->set_volume( vol_btn / 4.0 );
+                }
             } else {
                 SG_LOG( SG_COCKPIT, SG_ALERT, "Can't find adf-ident sound" );
             }
@@ -467,7 +472,6 @@ void FGKR_87::update( double dt ) {
            globals->get_soundmgr()->stop( "adf-ident" );
        }
     }
-#endif
 }
 
 
@@ -478,35 +482,35 @@ void FGKR_87::search() {
     double acft_elev = alt_node->getDoubleValue() * SG_FEET_TO_METER;
 
                                // FIXME: the panel should handle this
-    FGNav nav;
-
     static string last_ident = "";
 
     ////////////////////////////////////////////////////////////////////////
     // ADF.
     ////////////////////////////////////////////////////////////////////////
 
-    if ( current_navlist->query( acft_lon, acft_lat, acft_elev, freq, &nav ) ) {
+    FGNav *nav
+        = current_navlist->findByFreq(freq, acft_lon, acft_lat, acft_elev);
+
+    if ( nav != NULL ) {
        char sfreq[128];
        snprintf( sfreq, 10, "%.0f", freq );
        ident = sfreq;
-       ident += nav.get_ident();
-//     cout << "adf ident = " << ident << endl;
+       ident += nav->get_ident();
+        // cout << "adf ident = " << ident << endl;
        valid = true;
        if ( last_ident != ident ) {
            last_ident = ident;
 
-           trans_ident = nav.get_trans_ident();
-           stn_lon = nav.get_lon();
-           stn_lat = nav.get_lat();
-           stn_elev = nav.get_elev();
-           range = nav.get_range();
+           trans_ident = nav->get_trans_ident();
+           stn_lon = nav->get_lon();
+           stn_lat = nav->get_lat();
+           stn_elev = nav->get_elev();
+           range = nav->get_range();
            effective_range = kludgeRange(stn_elev, acft_elev, range);
-           x = nav.get_x();
-           y = nav.get_y();
-           z = nav.get_z();
+           x = nav->get_x();
+           y = nav->get_y();
+           z = nav->get_z();
 
-#ifdef ENABLE_AUDIO_SUPPORT
            if ( globals->get_soundmgr()->exists( "adf-ident" ) ) {
                globals->get_soundmgr()->remove( "adf-ident" );
            }
@@ -523,18 +527,15 @@ void FGKR_87::search() {
            //      << play_count << " last_time = "
            //      << last_time << " current time = "
            //      << globals->get_time_params()->get_cur_time() << endl;
-#endif
 
            // cout << "Found an adf station in range" << endl;
-           // cout << " id = " << nav.get_ident() << endl;
+           // cout << " id = " << nav->get_ident() << endl;
        }
     } else {
        valid = false;
        ident = "";
        trans_ident = "";
-#ifdef ENABLE_AUDIO_SUPPORT
        globals->get_soundmgr()->remove( "adf-ident" );
-#endif
        last_ident = "";
        // cout << "not picking up adf. :-(" << endl;
     }