mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-02 15:07:20 +08:00
Ref T259, Ref T243 added functions to use guessed parts in
* sim object * XPlane aircraft * forward aircraft model to interpolator for guessing
This commit is contained in:
committed by
Roland Winklmeier
parent
e3d17859a0
commit
f1faeef84a
@@ -24,11 +24,13 @@ namespace BlackSimPlugin
|
||||
|
||||
CSimConnectObject::CSimConnectObject(const CSimulatedAircraft &aircraft,
|
||||
DWORD requestId,
|
||||
ISimulationEnvironmentProvider *p1, IInterpolationSetupProvider *p2, IRemoteAircraftProvider *p3,
|
||||
ISimulationEnvironmentProvider *simEnvProvider, IInterpolationSetupProvider *setupProvider, IRemoteAircraftProvider *remoteAircraftProvider,
|
||||
CInterpolationLogger *logger) :
|
||||
m_aircraft(aircraft), m_requestId(requestId), m_validRequestId(true),
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign(), p1, p2, p3, logger))
|
||||
{ }
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign(), simEnvProvider, setupProvider, remoteAircraftProvider, logger))
|
||||
{
|
||||
m_interpolator->initCorrespondingModel(aircraft.getModel());
|
||||
}
|
||||
|
||||
void CSimConnectObject::invalidatePartsAsSent()
|
||||
{
|
||||
@@ -146,6 +148,15 @@ namespace BlackSimPlugin
|
||||
return m_interpolator->getInterpolatedParts(currentTimeSinceEpoc, setup, partsStatus, log);
|
||||
}
|
||||
|
||||
CAircraftParts CSimConnectObject::getInterpolatedOrGuessedParts(
|
||||
qint64 currentTimeSinceEpoc,
|
||||
const CInterpolationAndRenderingSetupPerCallsign &setup,
|
||||
CPartsStatus &partsStatus, bool log) const
|
||||
{
|
||||
Q_ASSERT(m_interpolator);
|
||||
return m_interpolator->getInterpolatedOrGuessedParts(currentTimeSinceEpoc, setup, partsStatus, log);
|
||||
}
|
||||
|
||||
const CAircraftSituation &CSimConnectObject::getLastInterpolatedSituation() const
|
||||
{
|
||||
if (!m_interpolator) { return CAircraftSituation::null(); }
|
||||
|
||||
@@ -32,7 +32,8 @@ namespace BlackSimPlugin
|
||||
//! Constructor providing initial situation/parts
|
||||
CSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft,
|
||||
DWORD requestId,
|
||||
BlackMisc::Simulation::ISimulationEnvironmentProvider *p1, BlackMisc::Simulation::IInterpolationSetupProvider *p2, BlackMisc::Simulation::IRemoteAircraftProvider *p3,
|
||||
BlackMisc::Simulation::ISimulationEnvironmentProvider *simEnvProvider, BlackMisc::Simulation::IInterpolationSetupProvider *setupProvider,
|
||||
BlackMisc::Simulation::IRemoteAircraftProvider *remoteAircraftProvider,
|
||||
BlackMisc::Simulation::CInterpolationLogger *logger);
|
||||
|
||||
//! Destructor
|
||||
@@ -134,6 +135,9 @@ namespace BlackSimPlugin
|
||||
//! VTOL?
|
||||
bool isVtol() const { return m_aircraft.isVtol(); }
|
||||
|
||||
//! Engine count
|
||||
int getEngineCount() const { return m_aircraft.getEnginesCount(); }
|
||||
|
||||
//! Was the object really added to simulator
|
||||
bool hasValidRequestAndObjectId() const;
|
||||
|
||||
@@ -161,6 +165,12 @@ namespace BlackSimPlugin
|
||||
const BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign &setup,
|
||||
BlackMisc::Simulation::CPartsStatus &partsStatus, bool log) const;
|
||||
|
||||
//! \copydoc BlackMisc::Simulation::CInterpolator::getInterpolatedOrGuessedParts
|
||||
BlackMisc::Aviation::CAircraftParts getInterpolatedOrGuessedParts(
|
||||
qint64 currentTimeSinceEpoc,
|
||||
const BlackMisc::Simulation::CInterpolationAndRenderingSetupPerCallsign &setup,
|
||||
BlackMisc::Simulation::CPartsStatus &partsStatus, bool log) const;
|
||||
|
||||
//! Last interpolated situation
|
||||
const BlackMisc::Aviation::CAircraftSituation &getLastInterpolatedSituation() const;
|
||||
|
||||
|
||||
@@ -686,23 +686,25 @@ namespace BlackSimPlugin
|
||||
const qint64 currentTimestamp = QDateTime::currentMSecsSinceEpoch();
|
||||
|
||||
// interpolation for all remote aircraft
|
||||
const QList<CXPlaneMPAircraft> xplaneAircrafts(m_xplaneAircraftObjects.values());
|
||||
for (const CXPlaneMPAircraft &xplaneAircraft : xplaneAircrafts)
|
||||
const QList<CXPlaneMPAircraft> xplaneAircraftList(m_xplaneAircraftObjects.values());
|
||||
for (const CXPlaneMPAircraft &xplaneAircraft : xplaneAircraftList)
|
||||
{
|
||||
const CCallsign callsign(xplaneAircraft.getCallsign());
|
||||
Q_ASSERT_X(!callsign.isEmpty(), Q_FUNC_INFO, "missing callsign");
|
||||
|
||||
// fetch parts, as they are needed for ground interpolation
|
||||
// setup
|
||||
const CInterpolationAndRenderingSetupPerCallsign setup = this->getInterpolationSetupPerCallsignOrDefault(callsign);
|
||||
const bool useAircraftParts = aircraftWithParts.contains(callsign) && setup.isAircraftPartsEnabled();
|
||||
const bool logInterpolationAndParts = setup.logInterpolation();
|
||||
CPartsStatus partsStatus(useAircraftParts);
|
||||
const CAircraftParts parts = useAircraftParts ? xplaneAircraft.getInterpolatedParts(currentTimestamp, setup, partsStatus, logInterpolationAndParts) : CAircraftParts();
|
||||
|
||||
// get interpolated situation
|
||||
// interpolated situation
|
||||
CInterpolationStatus interpolatorStatus;
|
||||
const CAircraftSituation interpolatedSituation = xplaneAircraft.getInterpolatedSituation(currentTimestamp, setup, interpolatorStatus);
|
||||
|
||||
// perts
|
||||
const CAircraftParts parts = useAircraftParts ? xplaneAircraft.getInterpolatedParts(currentTimestamp, setup, partsStatus, logInterpolationAndParts) : CAircraftParts::guessedParts(interpolatedSituation, xplaneAircraft.isVtol(), xplaneAircraft.getEngineCount());
|
||||
|
||||
if (interpolatorStatus.hasValidSituation())
|
||||
{
|
||||
// update situation
|
||||
@@ -729,14 +731,6 @@ namespace BlackSimPlugin
|
||||
{
|
||||
this->updateRemoteAircraftParts(xplaneAircraft, parts, partsStatus);
|
||||
}
|
||||
else
|
||||
{
|
||||
// guess on position, but not every frame
|
||||
if (m_interpolationRequest % GuessRemoteAircraftPartsCycle == 0)
|
||||
{
|
||||
this->guessAndUpdateRemoteAircraftParts(xplaneAircraft, interpolatedSituation, interpolatorStatus);
|
||||
}
|
||||
}
|
||||
} // all callsigns
|
||||
|
||||
const qint64 dt = QDateTime::currentMSecsSinceEpoch() - currentTimestamp;
|
||||
@@ -751,14 +745,6 @@ namespace BlackSimPlugin
|
||||
return this->sendRemoteAircraftPartsToSimulator(xplaneAircraft, parts);
|
||||
}
|
||||
|
||||
bool CSimulatorXPlane::guessAndUpdateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft, const CAircraftSituation &interpolatedSituation, const CInterpolationStatus &interpolationStatus)
|
||||
{
|
||||
if (!interpolationStatus.isInterpolated()) { return false; }
|
||||
|
||||
const CAircraftParts parts = CAircraftParts::guessedParts(interpolatedSituation, xplaneAircraft.isVtol());
|
||||
return this->sendRemoteAircraftPartsToSimulator(xplaneAircraft, parts);
|
||||
}
|
||||
|
||||
bool CSimulatorXPlane::sendRemoteAircraftPartsToSimulator(const CXPlaneMPAircraft &xplaneAircraft, const CAircraftParts &parts)
|
||||
{
|
||||
// same as in simulator or same as already send to simulator?
|
||||
|
||||
@@ -181,10 +181,6 @@ namespace BlackSimPlugin
|
||||
bool updateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft,
|
||||
const BlackMisc::Aviation::CAircraftParts &parts, const BlackMisc::Simulation::CPartsStatus &partsStatus);
|
||||
|
||||
//! Update remote aircraft parts by guessing (send to XSwiftBus)
|
||||
bool guessAndUpdateRemoteAircraftParts(const CXPlaneMPAircraft &xplaneAircraft,
|
||||
const BlackMisc::Aviation::CAircraftSituation &interpolatedSituation, const BlackMisc::Simulation::CInterpolationStatus &interpolationStatus);
|
||||
|
||||
//! Send parts to simulator
|
||||
bool sendRemoteAircraftPartsToSimulator(const CXPlaneMPAircraft &xplaneAircraft, const BlackMisc::Aviation::CAircraftParts &parts);
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ namespace BlackSimPlugin
|
||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign(), simulator, simulator, simulator->getRemoteAircraftProvider(), logger))
|
||||
{
|
||||
m_interpolator->attachLogger(logger);
|
||||
m_interpolator->initCorrespondingModel(aircraft.getModel());
|
||||
}
|
||||
|
||||
bool CXPlaneMPAircraft::isSameAsSent(const CAircraftSituation &position) const
|
||||
|
||||
@@ -67,6 +67,9 @@ namespace BlackSimPlugin
|
||||
//! VTOL?
|
||||
bool isVtol() const { return m_aircraft.isVtol(); }
|
||||
|
||||
//! Engine count
|
||||
int getEngineCount() const { return m_aircraft.getEnginesCount(); }
|
||||
|
||||
//! \copydoc BlackMisc::Simulation::CInterpolatorMulti::toggleMode
|
||||
void toggleInterpolatorMode();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user