- _carrier_valid = (carrier_tacan != NULL);
-
- if ( _carrier_valid ) {
- SG_LOG( SG_INSTR, SG_DEBUG, "carrier transmitter valid " << _carrier_valid );
-
- string str1( carrier_tacan->get_name() );
- string str2 ( _carrier_name_node->getStringValue());
- SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 2 " << str2 );
- unsigned int loc1= str1.find( str2, 0 );
- if( loc1 != string::npos && str2 != "" ){
- SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
- _carrier_lat = _carrier_lat_node->getDoubleValue();
- _carrier_lon = _carrier_lon_node->getDoubleValue();
- _carrier_elevation_ft = carrier_tacan->get_elev_ft();
- _carrier_range_nm = carrier_tacan->get_range();
- _carrier_bias = carrier_tacan->get_multiuse();
- _carrier_name = carrier_tacan->get_name();
- }
- else{
- _carrier_valid = 0;
- SG_LOG( SG_INSTR, SG_DEBUG, " carrier transmitter invalid " << _carrier_valid );
- }
-
-
- //_name_node->setStringValue(_transmitter_name.c_str());
-
- SG_LOG( SG_INSTR, SG_DEBUG, "lat " << _carrier_lat << "lon " << _carrier_lon);
- SG_LOG( SG_INSTR, SG_DEBUG, "elev " << _carrier_elevation_ft);
- SG_LOG( SG_INSTR, SG_DEBUG, "name " << _carrier_name);
-
+ freq_valid = (mobile_tacan != NULL);
+ SG_LOG( SG_INSTR, SG_DEBUG, "mobile freqency valid " << freq_valid );
+
+ if ( freq_valid ) {
+
+ string str1( mobile_tacan->get_name() );
+
+ SGPropertyNode * branch = fgGetNode("ai/models", true);
+ vector<SGPropertyNode_ptr> carrier = branch->getChildren("carrier");
+
+ number = carrier.size();
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "carrier " << number );
+
+ 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 );
+ unsigned int 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 );
+ }
+ }
+
+ 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) {
+ SG_LOG( SG_INSTR, SG_DEBUG, "tanker transmitter valid start " << _mobile_valid );
+
+ SGPropertyNode * branch = fgGetNode("ai/models", true);
+ vector<SGPropertyNode_ptr> tanker = branch->getChildren("aircraft");
+
+ number = tanker.size();
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "tanker number " << number );
+
+ 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 );
+ unsigned int 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 );
+ }
+ }
+
+ 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
+
+ if ( !_mobile_valid ) {
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp tanker transmitter valid start " << _mobile_valid );
+
+ SGPropertyNode * branch = fgGetNode("ai/models", true);
+ vector<SGPropertyNode_ptr> mp_tanker = branch->getChildren("multiplayer");
+
+ number = mp_tanker.size();
+
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp tanker number " << number );
+
+ for ( i = 0; i < number; ++i ) {
+ string str6 ( mp_tanker[i]->getStringValue("callsign", ""));
+ SG_LOG( SG_INSTR, SG_DEBUG, "mp tanker callsign " << str6 );
+
+ SG_LOG( SG_INSTR, SG_DEBUG, "strings 1 " << str1 << " 5 " << str6 );
+ unsigned int loc1= str1.find( str6, 0 );
+ if ( loc1 != string::npos && str6 != "" ) {
+ SG_LOG( SG_INSTR, SG_DEBUG, " string found" );
+ _mobile_lat = mp_tanker[i]->getDoubleValue("position/latitude-deg");
+ _mobile_lon = mp_tanker[i]->getDoubleValue("position/longitude-deg");
+ _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_ident = mobile_tacan->get_trans_ident();
+ _mobile_valid = true;
+
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp tanker transmitter valid " << _mobile_valid );
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp_tanker name " << _mobile_name);
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp lat " << _mobile_lat << "lon " << _mobile_lon);
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp elev " << _mobile_elevation_ft);
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp range " << _mobile_range_nm);
+ break;
+ } else {
+ _mobile_valid = false;
+ SG_LOG( SG_INSTR, SG_DEBUG, " mp tanker transmitter invalid " << _mobile_valid );
+ }
+ }
+ }