mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 21:56:43 +08:00
* set log flag in hints, so no lock for each aircraft is needed * as a result log functions have a bool log parameter now * highlight situation and parts changed
130 lines
6.3 KiB
C++
130 lines
6.3 KiB
C++
/* Copyright (C) 2015
|
|
* swift project Community / Contributors
|
|
*
|
|
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
|
|
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
|
|
* including this file, may be copied, modified, propagated, or distributed except according to the terms
|
|
* contained in the LICENSE file.
|
|
*/
|
|
|
|
#include "blackmisc/simulation/remoteaircraftprovider.h"
|
|
|
|
using namespace BlackMisc::Aviation;
|
|
using namespace BlackMisc::Geo;
|
|
|
|
namespace BlackMisc
|
|
{
|
|
namespace Simulation
|
|
{
|
|
CSimulatedAircraftList CRemoteAircraftAware::getAircraftInRange() const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getAircraftInRange();
|
|
}
|
|
|
|
int CRemoteAircraftAware::getAircraftInRangeCount() const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getAircraftInRangeCount();
|
|
}
|
|
|
|
CCallsignSet CRemoteAircraftAware::getAircraftInRangeCallsigns() const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getAircraftInRangeCallsigns();
|
|
}
|
|
|
|
CSimulatedAircraft CRemoteAircraftAware::getAircraftInRangeForCallsign(const CCallsign &callsign) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getAircraftInRangeForCallsign(callsign);
|
|
}
|
|
|
|
CAircraftModel CRemoteAircraftAware::getAircraftInRangeModelForCallsign(const CCallsign &callsign) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getAircraftInRangeModelForCallsign(callsign);
|
|
}
|
|
|
|
CAirspaceAircraftSnapshot CRemoteAircraftAware::getLatestAirspaceAircraftSnapshot() const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->getLatestAirspaceAircraftSnapshot();
|
|
}
|
|
|
|
CAircraftSituationList CRemoteAircraftAware::remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->remoteAircraftSituations(callsign);
|
|
}
|
|
|
|
CAircraftPartsList CRemoteAircraftAware::remoteAircraftParts(const CCallsign &callsign, qint64 cutoffTimeBefore) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->remoteAircraftParts(callsign, cutoffTimeBefore);
|
|
}
|
|
|
|
CCallsignSet CRemoteAircraftAware::remoteAircraftSupportingParts() const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->remoteAircraftSupportingParts();
|
|
}
|
|
|
|
int CRemoteAircraftAware::remoteAircraftSituationsCount(const CCallsign &callsign) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->remoteAircraftSituationsCount(callsign);
|
|
}
|
|
|
|
bool CRemoteAircraftAware::updateAircraftModel(const Aviation::CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateAircraftModel(callsign, model, originator);
|
|
}
|
|
|
|
bool CRemoteAircraftAware::updateAircraftNetworkModel(const CCallsign &callsign, const CAircraftModel &model, const CIdentifier &originator)
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateAircraftNetworkModel(callsign, model, originator);
|
|
}
|
|
|
|
bool CRemoteAircraftAware::updateAircraftRendered(const CCallsign &callsign, bool rendered)
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateAircraftRendered(callsign, rendered);
|
|
}
|
|
|
|
bool CRemoteAircraftAware::updateAircraftGroundElevation(const CCallsign &callsign, const CElevationPlane &elevation)
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateAircraftGroundElevation(callsign, elevation);
|
|
}
|
|
|
|
void CRemoteAircraftAware::updateMarkAllAsNotRendered()
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateMarkAllAsNotRendered();
|
|
}
|
|
|
|
bool CRemoteAircraftAware::isRemoteAircraftSupportingParts(const CCallsign &callsign) const
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->isRemoteAircraftSupportingParts(callsign);
|
|
}
|
|
|
|
bool CRemoteAircraftAware::updateAircraftEnabled(const Aviation::CCallsign &callsign, bool enabledForRedering)
|
|
{
|
|
Q_ASSERT_X(this->m_remoteAircraftProvider, Q_FUNC_INFO, "No object available");
|
|
return this->m_remoteAircraftProvider->updateAircraftEnabled(callsign, enabledForRedering);
|
|
}
|
|
|
|
void IRemoteAircraftProvider::removeOutdatedParts(CAircraftPartsList &partsList)
|
|
{
|
|
// remove outdated parts (but never remove the most recent one)
|
|
const auto predicate = [now = partsList.front().getMSecsSinceEpoch()](const auto & p) { return p.getMSecsSinceEpoch() >= now - PartsPerCallsignMaxAgeInSeconds * 1000; };
|
|
const auto newEnd = std::find_if(partsList.rbegin(), partsList.rend(), predicate).base();
|
|
partsList.erase(newEnd, partsList.end());
|
|
}
|
|
} // namespace
|
|
} // namespace
|