Ref T681, preparations to use CG from DB

* renamed to "getSimulatorCG" ...
* pass simulator settings to sim.env.provider to decide what CG to use
* store DB CG and init it when aircraft is added
* style
This commit is contained in:
Klaus Basan
2019-06-10 19:54:35 +02:00
parent c89aa553d8
commit 86431a46c7
14 changed files with 196 additions and 64 deletions

View File

@@ -9,6 +9,7 @@
#include "simulationenvironmentprovider.h"
#include <QStringBuilder>
using namespace BlackMisc::Simulation::Settings;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Geo;
using namespace BlackMisc::PhysicalQuantities;
@@ -116,7 +117,7 @@ namespace BlackMisc
return m_cgsPerModelOverridden[modelString.toUpper()];
}
int ISimulationEnvironmentProvider::removeCG(const CCallsign &cs)
int ISimulationEnvironmentProvider::removeSimulatorCG(const CCallsign &cs)
{
QWriteLocker l(&m_lockCG);
return m_cgsPerCallsign.remove(cs);
@@ -124,7 +125,7 @@ namespace BlackMisc
CLength ISimulationEnvironmentProvider::minRange(const CLength &range)
{
return (range < CElevationPlane::singlePointRadius()) ?
return (range.isNull() || range < CElevationPlane::singlePointRadius()) ?
CElevationPlane::singlePointRadius() :
range;
}
@@ -271,16 +272,25 @@ namespace BlackMisc
return m_defaultModel;
}
CLength ISimulationEnvironmentProvider::getCG(const Aviation::CCallsign &callsign) const
CLength ISimulationEnvironmentProvider::getSimulatorCG(const Aviation::CCallsign &callsign) const
{
if (callsign.isEmpty()) { return CLength::null(); }
QReadLocker l(&m_lockCG);
if (!m_enableCG || !m_cgsPerCallsign.contains(callsign)) { return CLength::null(); }
return m_cgsPerCallsign.value(callsign);
}
CLength ISimulationEnvironmentProvider::getCGPerModelString(const QString &modelString) const
CLength ISimulationEnvironmentProvider::getSimulatorOrDbCG(const CCallsign &callsign, const CLength &dbCG) const
{
if (callsign.isEmpty()) { return CLength::null(); }
const CSimulatorSettings::CGSource source = m_settings.getCGSource();
if (source == CSimulatorSettings::CGFromDBOnly || (!dbCG.isNull() && source == CSimulatorSettings::CGFromDBFirst)) { return dbCG; }
const CLength simCG = this->getSimulatorCG(callsign);
if (source == CSimulatorSettings::CGFromSimulatorOnly || (source == CSimulatorSettings::CGFromSimulatorFirst && simCG.isNull())) { return simCG; }
return dbCG;
}
CLength ISimulationEnvironmentProvider::getSimulatorCGPerModelString(const QString &modelString) const
{
if (modelString.isEmpty()) { return CLength::null(); }
const QString ms = modelString.toUpper();
@@ -290,14 +300,29 @@ namespace BlackMisc
return m_cgsPerModel.value(ms);
}
bool ISimulationEnvironmentProvider::hasCG(const Aviation::CCallsign &callsign) const
CLength ISimulationEnvironmentProvider::getSimulatorOrDbCGPerModelString(const QString &modelString, const CLength &dbCG) const
{
if (modelString.isEmpty()) { return CLength::null(); }
const CSimulatorSettings::CGSource source = m_settings.getCGSource();
const QString ms = modelString.toUpper();
{
QReadLocker l(&m_lockCG);
if (m_cgsPerModelOverridden.contains(ms)) { return m_cgsPerModelOverridden.value(ms); }
}
if (source == CSimulatorSettings::CGFromDBOnly || (!dbCG.isNull() && source == CSimulatorSettings::CGFromDBFirst)) { return dbCG; }
const CLength simCG = this->getSimulatorCGPerModelString(modelString);
if (source == CSimulatorSettings::CGFromSimulatorOnly || (source == CSimulatorSettings::CGFromSimulatorFirst && simCG.isNull())) { return simCG; }
return dbCG;
}
bool ISimulationEnvironmentProvider::hasSimulatorCG(const Aviation::CCallsign &callsign) const
{
if (callsign.isEmpty()) { return false; }
QReadLocker l(&m_lockCG);
return m_enableCG && m_cgsPerCallsign.contains(callsign);
}
bool ISimulationEnvironmentProvider::hasSameCG(const CLength &cg, const CCallsign &callsign) const
bool ISimulationEnvironmentProvider::hasSameSimulatorCG(const CLength &cg, const CCallsign &callsign) const
{
if (callsign.isEmpty()) { return false; }
QReadLocker l(&m_lockCG);
@@ -326,11 +351,12 @@ namespace BlackMisc
m_elvFound = m_elvMissed = 0;
}
ISimulationEnvironmentProvider::ISimulationEnvironmentProvider(const CSimulatorPluginInfo &pluginInfo) : m_simulatorPluginInfo(pluginInfo)
ISimulationEnvironmentProvider::ISimulationEnvironmentProvider(const CSimulatorPluginInfo &pluginInfo) :
m_simulatorPluginInfo(pluginInfo)
{ }
ISimulationEnvironmentProvider::ISimulationEnvironmentProvider(const CSimulatorPluginInfo &pluginInfo, bool supportElevation, bool supportCG) :
m_simulatorPluginInfo(pluginInfo), m_enableElevation(supportElevation), m_enableCG(supportCG)
ISimulationEnvironmentProvider::ISimulationEnvironmentProvider(const CSimulatorPluginInfo &pluginInfo, const CSimulatorSettings &settings, bool supportElevation, bool supportCG) :
m_simulatorPluginInfo(pluginInfo), m_settings(settings), m_enableElevation(supportElevation), m_enableCG(supportCG)
{ }
bool ISimulationEnvironmentProvider::isCgProviderEnabled() const
@@ -363,15 +389,19 @@ namespace BlackMisc
setCgProviderEnabled(cgEnabled);
}
void ISimulationEnvironmentProvider::setNewPluginInfo(const CSimulatorPluginInfo &info, const CAircraftModel &defaultModel)
void ISimulationEnvironmentProvider::setNewPluginInfo(const CSimulatorPluginInfo &info, const CSimulatorSettings &settings, const CAircraftModel &defaultModel)
{
{
QWriteLocker l1(&m_lockSimInfo);
m_simulatorPluginInfo = info;
}
this->setNewPluginInfo(info, settings);
this->setDefaultModel(defaultModel);
}
void ISimulationEnvironmentProvider::setNewPluginInfo(const CSimulatorPluginInfo &info, const CSimulatorSettings &settings)
{
QWriteLocker l(&m_lockSimInfo);
m_simulatorPluginInfo = info;
m_settings = settings;
}
void ISimulationEnvironmentProvider::setSimulatorDetails(const QString &name, const QString &details, const QString &version)
{
QWriteLocker l(&m_lockSimInfo);
@@ -416,7 +446,7 @@ namespace BlackMisc
m_elvCoordinates.clear();
m_pendingElevationRequests.clear();
m_statsCurrentElevRequestTimeMs = -1;
m_statsMaxElevRequestTimeMs = -1;
m_statsMaxElevRequestTimeMs = -1;
m_elvFound = m_elvMissed = 0;
}
@@ -510,16 +540,22 @@ namespace BlackMisc
return this->provider()->getDefaultModel();
}
CLength CSimulationEnvironmentAware::getCG(const CCallsign &callsign) const
CLength CSimulationEnvironmentAware::getSimulatorCG(const CCallsign &callsign) const
{
if (!this->hasProvider()) { return CLength::null(); }
return this->provider()->getCG(callsign);
return this->provider()->getSimulatorCG(callsign);
}
bool CSimulationEnvironmentAware::hasCG(const CCallsign &callsign) const
CLength CSimulationEnvironmentAware::getSimulatorOrDbCG(const CCallsign &callsign, const CLength &dbCG) const
{
if (!this->hasProvider()) { return CLength::null(); }
return this->provider()->getSimulatorOrDbCG(callsign, dbCG);
}
bool CSimulationEnvironmentAware::hasSimulatorCG(const CCallsign &callsign) const
{
if (!this->hasProvider()) { return false; }
return this->provider()->hasCG(callsign);
return this->provider()->hasSimulatorCG(callsign);
}
} // namespace
} // namespace