]> git.mxchange.org Git - flightgear.git/blobdiff - src/AIModel/AIMultiplayer.cxx
Make the vertical acceleration rate scale with vertical performance. The
[flightgear.git] / src / AIModel / AIMultiplayer.cxx
index 9502561bf46047c7e637f1f3a597bd3d16449bcd..e7a3abd47eaad07591e9d7662dc27c75930c00ab 100755 (executable)
@@ -44,7 +44,7 @@ FGAIMultiplayer::~FGAIMultiplayer() {
 }
 
 bool FGAIMultiplayer::init() {
-    refuel_node = fgGetNode("systems/refuel/contact", true);
+    //refuel_node = fgGetNode("systems/refuel/contact", true);
     isTanker = false; // do this until this property is
                       // passed over the net
 
@@ -52,7 +52,7 @@ bool FGAIMultiplayer::init() {
     string str2 = "MOBIL";
 
     unsigned int loc1= str1.find( str2, 0 );
-    if ( (loc1 != string::npos && str2 != "") /*|| mCallSign == "mpdummy" */) {
+    if ( (loc1 != string::npos && str2 != "") ){
         //        cout << " string found "     << str2 << " in " << str1 << endl;
         isTanker = true;
         //        cout << "isTanker " << isTanker << " " << mCallSign <<endl;
@@ -172,6 +172,7 @@ void FGAIMultiplayer::update(double dt)
 
   SGVec3d ecPos;
   SGQuatf ecOrient;
+
   if (tInterp <= curentPkgTime) {
     // Ok, we need a time prevous to the last available packet,
     // that is good ...
@@ -184,6 +185,7 @@ void FGAIMultiplayer::update(double dt)
       MotionInfo::iterator firstIt = mMotionInfo.begin();
       ecPos = firstIt->second.position;
       ecOrient = firstIt->second.orientation;
+      speed = norm(firstIt->second.linearVel) * SG_METER_TO_NM * 3600.0;
 
       std::vector<FGFloatPropertyData>::const_iterator firstPropIt;
       std::vector<FGFloatPropertyData>::const_iterator firstPropItEnd;
@@ -217,6 +219,8 @@ void FGAIMultiplayer::update(double dt)
       ecPos = ((1-tau)*prevIt->second.position + tau*nextIt->second.position);
       ecOrient = interpolate((float)tau, prevIt->second.orientation,
                              nextIt->second.orientation);
+      speed = norm((1-tau)*prevIt->second.linearVel
+                   + tau*nextIt->second.linearVel) * SG_METER_TO_NM * 3600.0;
 
       if (prevIt->second.properties.size()
           == nextIt->second.properties.size()) {
@@ -277,6 +281,8 @@ void FGAIMultiplayer::update(double dt)
       t -= h;
     }
 
+    speed = norm(linearVel) * SG_METER_TO_NM * 3600.0;
+
     std::vector<FGFloatPropertyData>::const_iterator firstPropIt;
     std::vector<FGFloatPropertyData>::const_iterator firstPropItEnd;
     firstPropIt = it->second.properties.begin();
@@ -291,15 +297,13 @@ void FGAIMultiplayer::update(double dt)
   }
   
   // extract the position
-  SGGeod geod = ecPos;
-  pos.setlat(geod.getLatitudeDeg());
-  pos.setlon(geod.getLongitudeDeg());
-  pos.setelev(geod.getElevationM());
-  
+  pos = SGGeod::fromCart(ecPos);
+  altitude_ft = pos.getElevationFt();
+
   // The quaternion rotating from the earth centered frame to the
   // horizontal local frame
-  SGQuatf qEc2Hl = SGQuatf::fromLonLatRad((float)geod.getLongitudeRad(),
-                                          (float)geod.getLatitudeRad());
+  SGQuatf qEc2Hl = SGQuatf::fromLonLatRad((float)pos.getLongitudeRad(),
+                                          (float)pos.getLatitudeRad());
   // The orientation wrt the horizontal local frame
   SGQuatf hlOr = conj(qEc2Hl)*ecOrient;
   float hDeg, pDeg, rDeg;
@@ -309,7 +313,7 @@ void FGAIMultiplayer::update(double dt)
   pitch = pDeg;
 
   SG_LOG(SG_GENERAL, SG_DEBUG, "Multiplayer position and orientation: "
-         << geod << ", " << hlOr);
+         << ecPos << ", " << hlOr);
 
   //###########################//
   // do calculations for radar //
@@ -322,12 +326,13 @@ void FGAIMultiplayer::update(double dt)
 
 
     if ( isTanker) {
-        if ( (range_ft2 < 250.0 * 250.0)
-                /*&& (y_shift > 0.0) && (elevation > 0.0)*/ ) {
-            refuel_node->setBoolValue(true);
+        if ( (range_ft2 < 250.0 * 250.0) &&
+            (y_shift > 0.0)    &&
+            (elevation > 0.0) ){
+                // refuel_node->setBoolValue(true);
             contact = true;
         } else {
-            refuel_node->setBoolValue(false);
+            // refuel_node->setBoolValue(false);
             contact = false;
         }
     } else {