From 0f7f7fce6bd57bea6c93f5d40c89f1b741edff45 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Wed, 29 Dec 2010 22:13:04 +0100 Subject: [PATCH] Expose vertical speed for MP planes vertical speed of MP planes was always 0, calculate their (average) vertical speed since it's required for TCAS and TCAS display --- src/AIModel/AIMultiplayer.cxx | 19 ++++++++++++++++--- src/AIModel/AIMultiplayer.hxx | 2 ++ 2 files changed, 18 insertions(+), 3 deletions(-) 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(), diff --git a/src/AIModel/AIMultiplayer.hxx b/src/AIModel/AIMultiplayer.hxx index d79f0c206..4c8d50a00 100644 --- a/src/AIModel/AIMultiplayer.hxx +++ b/src/AIModel/AIMultiplayer.hxx @@ -78,6 +78,8 @@ private: double mTimeOffset; bool mTimeOffsetSet; + double lastUpdateTime; + /// Properties which are for now exposed for testing bool mAllowExtrapolation; double mLagAdjustSystemSpeed;