]> git.mxchange.org Git - flightgear.git/commitdiff
stop sending velocity and acceleration in the motion information when crashed
authorjanodesbois <jean.pellotier@wanadoo.fr>
Sat, 13 Jun 2015 09:02:30 +0000 (11:02 +0200)
committerjanodesbois <jean.pellotier@wanadoo.fr>
Sat, 13 Jun 2015 09:02:30 +0000 (11:02 +0200)
and using speed up time to allow a fine displayed predicted position
 when time accelerated (no more jumping planes accelerated using the mp patch)
tell me if it's not the good pace to do such things ;)

src/AIModel/AIMultiplayer.cxx
src/MultiPlayer/multiplaymgr.cxx

index f79ca4153f8aebb08d70f54165a1613ef5b88e58..6e80f3776a122d198fad6a1a35959827634c5d02 100644 (file)
@@ -154,6 +154,7 @@ void FGAIMultiplayer::update(double dt)
     } else if (compensateLag == 1) { offset = curentPkgTime - curtime - lag;
 
     // using the prediction mode to display the mpaircraft in the futur/past with given playerlag value
+    //currently compensatelag = 2
     } else { offset = curentPkgTime - curtime + 0.48*lag + playerLag;
     }
     if ((!mAllowExtrapolation && offset + lag < mTimeOffset)
index ae6fa9f299778b23e3bebbc0f56733cb5abc31a2..fda9a271567d4948e29d9065bb238ed446973bce 100644 (file)
@@ -783,15 +783,30 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
       motionInfo.orientation.getAngleAxis(angleAxis);
       for (unsigned i = 0 ; i < 3; ++i)
         PosMsg->orientation[i] = XDR_encode_float (angleAxis(i));
-      for (unsigned i = 0 ; i < 3; ++i)
-        PosMsg->linearVel[i] = XDR_encode_float (motionInfo.linearVel(i));
-      for (unsigned i = 0 ; i < 3; ++i)
-        PosMsg->angularVel[i] = XDR_encode_float (motionInfo.angularVel(i));
-      for (unsigned i = 0 ; i < 3; ++i)
-        PosMsg->linearAccel[i] = XDR_encode_float (motionInfo.linearAccel(i));
-      for (unsigned i = 0 ; i < 3; ++i)
-        PosMsg->angularAccel[i] = XDR_encode_float (motionInfo.angularAccel(i));
-
+      if (fgGetBool("/sim/crashed",true))
+      {
+        for (unsigned i = 0 ; i < 3; ++i)
+        {
+          // no speed or acceleration sent when crashed, for better mp patch
+          PosMsg->linearVel[i] = XDR_encode_float (0.0);
+          PosMsg->angularVel[i] = XDR_encode_float (0.0);
+          PosMsg->linearAccel[i] = XDR_encode_float (0.0);
+          PosMsg->angularAccel[i] = XDR_encode_float (0.0);
+        }
+      }
+      else
+      {
+        //including speed up time in velocity and acceleration
+        double timeAccel = fgGetDouble("/sim/speed-up");
+        for (unsigned i = 0 ; i < 3; ++i)
+          PosMsg->linearVel[i] = XDR_encode_float (motionInfo.linearVel(i) * timeAccel);
+        for (unsigned i = 0 ; i < 3; ++i)
+          PosMsg->angularVel[i] = XDR_encode_float (motionInfo.angularVel(i) * timeAccel);
+        for (unsigned i = 0 ; i < 3; ++i)
+          PosMsg->linearAccel[i] = XDR_encode_float (motionInfo.linearAccel(i) * timeAccel * timeAccel);
+        for (unsigned i = 0 ; i < 3; ++i)
+          PosMsg->angularAccel[i] = XDR_encode_float (motionInfo.angularAccel(i) * timeAccel * timeAccel);
+      }
       xdr_data_t* ptr = msgBuf.properties();
       std::vector<FGPropertyData*>::const_iterator it;
       it = motionInfo.properties.begin();