]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/tacan.cxx
fix NAV receiver vs GPS bugs
[flightgear.git] / src / Instrumentation / tacan.cxx
index 92bb7df0edff6473607339a0fb1f78db7ad1e7b8..b17c8bb346386e06a01cc995085621808b966d48 100755 (executable)
@@ -127,6 +127,9 @@ TACAN::init ()
 void
 TACAN::update (double delta_time_sec)
 {
+    // don't do anything when paused
+    if (delta_time_sec == 0) return;
+
     if (!_serviceable_node->getBoolValue() || !_electrical_node->getBoolValue()) {
         _last_distance_nm = 0;
         _in_range_node->setBoolValue(false);
@@ -237,7 +240,7 @@ TACAN::update (double delta_time_sec)
         }
         _distance_node->setDoubleValue( tmp_dist );
         _speed_node->setDoubleValue(speed_kt);
-        _time_node->setDoubleValue(distance_nm/speed_kt*60.0);
+        _time_node->setDoubleValue(speed_kt > 0 ? (distance_nm/speed_kt*60.0) : 0);
         _bearing_node->setDoubleValue(bearing);
         _x_shift_node->setDoubleValue(x_shift);
         _y_shift_node->setDoubleValue(y_shift);
@@ -301,29 +304,27 @@ TACAN::search (double frequency_mhz, double longitude_rad,
         number = carrier.size();
 
         SG_LOG( SG_INSTR, SG_DEBUG, "carrier " << number );
-        if ( number > 0 ) {      // don't do this if there are no carriers
-            for ( i = 0; i < number; ++i ) {
-                string str2 ( carrier[i]->getStringValue("name", ""));
-                SG_LOG( SG_INSTR, SG_DEBUG, "carrier name " << str2 );
-
-                SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 2 " << str2 );
-                string::size_type loc1= str1.find( str2, 0 );
-                if ( loc1 != string::npos && str2 != "" ) {
-                    SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
-                    _mobile_lat = carrier[i]->getDoubleValue("position/latitude-deg");
-                    _mobile_lon = carrier[i]->getDoubleValue("position/longitude-deg");
-                    _mobile_elevation_ft = mobile_tacan->get_elev_ft();
-                    _mobile_range_nm = mobile_tacan->get_range();
-                    _mobile_bias = mobile_tacan->get_multiuse();
-                    _mobile_name = mobile_tacan->name();
-                    _mobile_ident = mobile_tacan->get_trans_ident();
-                    _mobile_valid = true;
-                    SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter valid " << _mobile_valid );
-                    break;
-                } else {
-                    _mobile_valid = false;
-                    SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter invalid " << _mobile_valid );
-                }
+        for ( i = 0; i < number; ++i ) {
+            string str2 ( carrier[i]->getStringValue("name", ""));
+            SG_LOG( SG_INSTR, SG_DEBUG, "carrier name " << str2 );
+
+            SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 2 " << str2 );
+            string::size_type loc1= str1.find( str2, 0 );
+            if ( loc1 != string::npos && str2 != "" ) {
+                SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
+                _mobile_lat = carrier[i]->getDoubleValue("position/latitude-deg");
+                _mobile_lon = carrier[i]->getDoubleValue("position/longitude-deg");
+                _mobile_elevation_ft = mobile_tacan->get_elev_ft();
+                _mobile_range_nm = mobile_tacan->get_range();
+                _mobile_bias = mobile_tacan->get_multiuse();
+                _mobile_name = mobile_tacan->name();
+                _mobile_ident = mobile_tacan->get_trans_ident();
+                _mobile_valid = true;
+                SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter valid " << _mobile_valid );
+                break;
+            } else {
+                _mobile_valid = false;
+                SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter invalid " << _mobile_valid );
             }
         }
 
@@ -339,29 +340,27 @@ TACAN::search (double frequency_mhz, double longitude_rad,
 
         SG_LOG( SG_INSTR, SG_DEBUG, "tanker number " << number );
 
-        if ( number > 0 ) {      // don't do this if there are no AI aircraft
-            for ( i = 0; i < number; ++i ) {
-                string str4 ( tanker[i]->getStringValue("callsign", ""));
-                SG_LOG( SG_INSTR, SG_DEBUG, "tanker callsign " << str4 );
-
-                SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 4 " << str4 );
-                string::size_type loc1= str1.find( str4, 0 );
-                if ( loc1 != string::npos && str4 != "" ) {
-                    SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
-                    _mobile_lat = tanker[i]->getDoubleValue("position/latitude-deg");
-                    _mobile_lon = tanker[i]->getDoubleValue("position/longitude-deg");
-                    _mobile_elevation_ft = tanker[i]->getDoubleValue("position/altitude-ft");
-                    _mobile_range_nm = mobile_tacan->get_range();
-                    _mobile_bias = mobile_tacan->get_multiuse();
-                    _mobile_name = mobile_tacan->name();
-                    _mobile_ident = mobile_tacan->get_trans_ident();
-                    _mobile_valid = true;
-                    SG_LOG( SG_INSTR, SG_DEBUG, " tanker transmitter valid " << _mobile_valid );
-                    break;
-                } else {
-                    _mobile_valid = false;
-                    SG_LOG( SG_INSTR, SG_DEBUG, " tanker transmitter invalid " << _mobile_valid );
-                }
+        for ( i = 0; i < number; ++i ) {
+            string str4 ( tanker[i]->getStringValue("callsign", ""));
+            SG_LOG( SG_INSTR, SG_DEBUG, "tanker callsign " << str4 );
+
+            SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 4 " << str4 );
+            string::size_type loc1= str1.find( str4, 0 );
+            if ( loc1 != string::npos && str4 != "" ) {
+                SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
+                _mobile_lat = tanker[i]->getDoubleValue("position/latitude-deg");
+                _mobile_lon = tanker[i]->getDoubleValue("position/longitude-deg");
+                _mobile_elevation_ft = tanker[i]->getDoubleValue("position/altitude-ft");
+                _mobile_range_nm = mobile_tacan->get_range();
+                _mobile_bias = mobile_tacan->get_multiuse();
+                _mobile_name = mobile_tacan->name();
+                _mobile_ident = mobile_tacan->get_trans_ident();
+                _mobile_valid = true;
+                SG_LOG( SG_INSTR, SG_DEBUG, " tanker transmitter valid " << _mobile_valid );
+                break;
+            } else {
+                _mobile_valid = false;
+                SG_LOG( SG_INSTR, SG_DEBUG, " tanker transmitter invalid " << _mobile_valid );
             }
         }
     }