]> git.mxchange.org Git - flightgear.git/blobdiff - src/Instrumentation/tacan.cxx
Typo in project file
[flightgear.git] / src / Instrumentation / tacan.cxx
old mode 100755 (executable)
new mode 100644 (file)
index ecab85b..b17c8bb
@@ -17,7 +17,7 @@
 
 #include "tacan.hxx"
 
-SG_USING_STD(vector);
+using std::vector;
 
 
 /**
@@ -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);
@@ -293,7 +296,7 @@ TACAN::search (double frequency_mhz, double longitude_rad,
 
     if ( freq_valid ) {
 
-        string str1( mobile_tacan->get_name() );
+        string str1( mobile_tacan->name() );
 
         SGPropertyNode * branch = fgGetNode("ai/models", true);
         vector<SGPropertyNode_ptr> carrier = branch->getChildren("carrier");
@@ -301,36 +304,30 @@ 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->get_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 );
             }
         }
 
-        SG_LOG( SG_INSTR, SG_DEBUG, "name " << _mobile_name);
-        SG_LOG( SG_INSTR, SG_DEBUG, "lat " << _mobile_lat << "lon " << _mobile_lon);
-        SG_LOG( SG_INSTR, SG_DEBUG, "elev " << _mobile_elevation_ft);
-
         //try any AI tankers second
 
         if ( !_mobile_valid) {
@@ -343,36 +340,29 @@ 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->get_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 );
             }
         }
-
-        SG_LOG( SG_INSTR, SG_DEBUG, "tanker name " << _mobile_name);
-        SG_LOG( SG_INSTR, SG_DEBUG, "lat " << _mobile_lat << "lon " << _mobile_lon);
-        SG_LOG( SG_INSTR, SG_DEBUG, "elev " << _mobile_elevation_ft);
-        SG_LOG( SG_INSTR, SG_DEBUG, "range " << _mobile_range_nm);
     }
 
     //try any mp tankers third, if we haven't found the tanker in the ai aircraft
@@ -401,7 +391,7 @@ TACAN::search (double frequency_mhz, double longitude_rad,
                     _mobile_elevation_ft = mp_tanker[i]->getDoubleValue("position/altitude-ft");
                     _mobile_range_nm = mobile_tacan->get_range();
                     _mobile_bias = mobile_tacan->get_multiuse();
-                    _mobile_name = mobile_tacan->get_name();
+                    _mobile_name = mobile_tacan->name();
                     _mobile_ident = mobile_tacan->get_trans_ident();
                     _mobile_valid = true;
 
@@ -424,19 +414,18 @@ TACAN::search (double frequency_mhz, double longitude_rad,
     }
 
     // try the TACAN/VORTAC list next
-    FGNavRecord *tacan
-        = globals->get_tacanlist()->findByFreq( frequency_mhz, longitude_rad,
-                                                latitude_rad, altitude_m);
+    FGNavRecord *tacan = globals->get_tacanlist()->findByFreq( frequency_mhz,
+      SGGeod::fromRadM(longitude_rad, latitude_rad, altitude_m));
 
     _transmitter_valid = (tacan != NULL);
 
     if ( _transmitter_valid ) {
         SG_LOG( SG_INSTR, SG_DEBUG, "transmitter valid " << _transmitter_valid );
 
-        _transmitter_pos = tacan->get_pos();
+        _transmitter_pos = tacan->geod();
         _transmitter_range_nm = tacan->get_range();
         _transmitter_bias = tacan->get_multiuse();
-        _transmitter_name = tacan->get_name();
+        _transmitter_name = tacan->name();
         _name_node->setStringValue(_transmitter_name.c_str());
         _transmitter_ident = tacan->get_trans_ident();
         _ident_node->setStringValue(_transmitter_ident.c_str());