mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
Ref T275, asynchronous version triggerUpdateRemoteAircraftFromSimulator and only fast updates for moving aircraft
This commit is contained in:
@@ -571,10 +571,26 @@ namespace BlackSimPlugin
|
||||
}
|
||||
}
|
||||
|
||||
void CSimulatorFsxCommon::triggerUpdateRemoteAircraftFromSimulator(const CSimConnectObject &simObject, const DataDefinitionRemoteAircraftSimData &remoteAircraftData)
|
||||
{
|
||||
if (this->isShuttingDown()) { return; }
|
||||
QPointer<CSimulatorFsxCommon> myself(this);
|
||||
QTimer::singleShot(0, this, [ = ]
|
||||
{
|
||||
if (!myself) { return; }
|
||||
myself->updateRemoteAircraftFromSimulator(simObject, remoteAircraftData);
|
||||
});
|
||||
}
|
||||
|
||||
void CSimulatorFsxCommon::updateRemoteAircraftFromSimulator(const CSimConnectObject &simObject, const DataDefinitionRemoteAircraftSimData &remoteAircraftData)
|
||||
{
|
||||
if (this->isShuttingDown()) { return; }
|
||||
|
||||
// Near ground we use faster updates
|
||||
if (remoteAircraftData.aboveGroundFt() <= 100.0)
|
||||
const CCallsign cs(simObject.getCallsign());
|
||||
const CAircraftSituation lastSituation = m_lastSentSituation[cs];
|
||||
const bool moving = lastSituation.isMoving();
|
||||
if (moving && remoteAircraftData.aboveGroundFt() <= 100.0)
|
||||
{
|
||||
// switch to fast updates
|
||||
if (simObject.getSimDataPeriod() != SIMCONNECT_PERIOD_VISUAL_FRAME)
|
||||
@@ -597,7 +613,7 @@ namespace BlackSimPlugin
|
||||
{
|
||||
CElevationPlane elevation(remoteAircraftData.latitudeDeg, remoteAircraftData.longitudeDeg, remoteAircraftData.elevationFt);
|
||||
elevation.setSinglePointRadius();
|
||||
this->rememberElevationAndCG(simObject.getCallsign(), elevation, CLength(remoteAircraftData.cgToGroundFt, CLengthUnit::ft()));
|
||||
this->rememberElevationAndCG(cs, elevation, CLength(remoteAircraftData.cgToGroundFt, CLengthUnit::ft()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -934,9 +950,9 @@ namespace BlackSimPlugin
|
||||
Q_ASSERT_X(m_dispatchProc, Q_FUNC_INFO, "Missing DispatchProc");
|
||||
|
||||
// statistics
|
||||
const qint64 start = QDateTime::currentMSecsSinceEpoch();
|
||||
m_dispatchLastReceiveId = SIMCONNECT_RECV_ID_NULL;
|
||||
m_dispatchLastRequest = CSimConnectDefinitions::RequestEndMarker;
|
||||
const qint64 start = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
// process
|
||||
const HRESULT hr = SimConnect_CallDispatch(m_hSimConnect, m_dispatchProc, this);
|
||||
@@ -1628,6 +1644,7 @@ namespace BlackSimPlugin
|
||||
|
||||
bool CSimulatorFsxCommon::requestPositionDataForSimObject(const CSimConnectObject &simObject, SIMCONNECT_PERIOD period)
|
||||
{
|
||||
if (this->isShuttingDown()) { return false; }
|
||||
if (!simObject.hasValidRequestAndObjectId()) { return false; }
|
||||
if (simObject.isPendingRemoved()) { return false; }
|
||||
if (!m_hSimConnect) { return false; }
|
||||
|
||||
@@ -301,6 +301,10 @@ namespace BlackSimPlugin
|
||||
//! Called when data about our own aircraft are received
|
||||
void updateOwnAircraftFromSimulator(const DataDefinitionOwnAircraft &simulatorOwnAircraft);
|
||||
|
||||
//! Call CSimulatorFsxCommon::updateRemoteAircraftFromSimulator asynchronously
|
||||
//! \remark can help not to send SimConnect data in event loop
|
||||
void triggerUpdateRemoteAircraftFromSimulator(const CSimConnectObject &simObject, const DataDefinitionRemoteAircraftSimData &remoteAircraftData);
|
||||
|
||||
//! Remote aircraft data sent from simulator
|
||||
void updateRemoteAircraftFromSimulator(const CSimConnectObject &simObject, const DataDefinitionRemoteAircraftSimData &remoteAircraftData);
|
||||
|
||||
|
||||
@@ -263,7 +263,7 @@ namespace BlackSimPlugin
|
||||
// extra check, but ids should be the same
|
||||
if (objectId == simObject.getObjectId())
|
||||
{
|
||||
simulatorFsxP3D->updateRemoteAircraftFromSimulator(simObj, *remoteAircraftSimData);
|
||||
simulatorFsxP3D->triggerUpdateRemoteAircraftFromSimulator(simObject, *remoteAircraftSimData);
|
||||
}
|
||||
}
|
||||
else if (CSimulatorFsxCommon::isRequestForProbe(requestId))
|
||||
|
||||
Reference in New Issue
Block a user