X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAIModel%2FAIMultiplayer.cxx;h=a9635c5f7b5541902035b8ee508cd6fbda54f294;hb=38226af24ec01e8f0a20d7fd73ef838a69f6ef25;hp=0652dfef73751daf52f67997d72028ef2e6ad916;hpb=6cd0e5aac4b70bc927ad6f3d705a894ba3ee71ba;p=flightgear.git diff --git a/src/AIModel/AIMultiplayer.cxx b/src/AIModel/AIMultiplayer.cxx index 0652dfef7..a9635c5f7 100644 --- a/src/AIModel/AIMultiplayer.cxx +++ b/src/AIModel/AIMultiplayer.cxx @@ -39,11 +39,11 @@ FGAIMultiplayer::FGAIMultiplayer() : FGAIBase(otMultiplayer) { mTimeOffsetSet = false; mAllowExtrapolation = true; mLagAdjustSystemSpeed = 10; - + mLastTimestamp = 0; aip.getSceneGraph()->setNodeMask(~SG_NODEMASK_TERRAIN_BIT); + lastUpdateTime = 0; -} - +} FGAIMultiplayer::~FGAIMultiplayer() { } @@ -417,8 +417,21 @@ void FGAIMultiplayer::update(double dt) // extract the position pos = SGGeod::fromCart(ecPos); + double recent_alt_ft = altitude_ft; altitude_ft = pos.getElevationFt(); + // expose a valid vertical speed + if (lastUpdateTime != 0) + { + double dT = curtime - lastUpdateTime; + double Weighting=1; + if (dt < 1.0) + Weighting = dt; + // simple smoothing over 1 second + vs = (1.0-Weighting)*vs + Weighting * (altitude_ft - recent_alt_ft) / dT * 60; + } + lastUpdateTime = curtime; + // The quaternion rotating from the earth centered frame to the // horizontal local frame SGQuatf qEc2Hl = SGQuatf::fromLonLatRad((float)pos.getLongitudeRad(),