refs #369, adjusted simulator drivers

* common base class BlackCore::CSimulatorCommon
* using providers IOwnAircraftProvider, IRenderedAircraftProvider
* using revers lookup in mapping
* using CSimulatedAircraft / CSimulatedAircraftList
* return values (success/failed) for member functions (e.g. setTimeSynchronization)
* getMaxRenderedAircraft / setMaxRenderedAircraft prepared
This commit is contained in:
Klaus Basan
2015-02-06 00:26:58 +01:00
parent f56a401505
commit 8c3547c33d
12 changed files with 347 additions and 215 deletions

View File

@@ -26,9 +26,9 @@ namespace BlackSimPlugin
{
namespace FsCommon
{
CSimulatorFsCommon::CSimulatorFsCommon(const BlackSim::CSimulatorInfo &simInfo, BlackMisc::Simulation::IOwnAircraftProvider *ownAircraft, QObject *parent) :
ISimulator(parent), COwnAircraftProviderSupport(ownAircraft), m_simulatorInfo(simInfo), m_fsuipc(new FsCommon::CFsuipc())
CSimulatorFsCommon::CSimulatorFsCommon(const BlackSim::CSimulatorInfo &simInfo, BlackMisc::Simulation::IOwnAircraftProvider *ownAircraftProvider, IRenderedAircraftProvider *renderedAircraftProvider, QObject *parent) :
CSimulatorCommon(simInfo, ownAircraftProvider, renderedAircraftProvider, parent),
m_fsuipc(new FsCommon::CFsuipc())
{
// hack to init mapper
CAircraftMapper *mapper = mapperInstance();
@@ -60,28 +60,18 @@ namespace BlackSimPlugin
return m_syncTimeOffset;
}
void CSimulatorFsCommon::setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset)
bool CSimulatorFsCommon::setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset)
{
this->m_simTimeSynced = enable;
this->m_syncTimeOffset = offset;
}
BlackSim::CSimulatorInfo CSimulatorFsCommon::getSimulatorInfo() const
{
return this->m_simulatorInfo;
}
CSimulatedAircraftList CSimulatorFsCommon::getRemoteAircraft() const
{
return this->m_remoteAircraft;
return true;
}
CAirportList CSimulatorFsCommon::getAirportsInRange() const
{
return this->m_airportsInRange;
return m_airportsInRange;
}
void CSimulatorFsCommon::setOwnAircraftModel(const QString &modelName)
{
CAircraftModel model = ownAircraft().getModel();
@@ -95,21 +85,22 @@ namespace BlackSimPlugin
{
CAircraftModel newModel(model);
newModel.setModelType(CAircraftModel::TypeOwnSimulatorModel);
if (this->mapperInstance() && this->mapperInstance()->isInitialized())
{
// reverse lookup of ICAO
CAircraftMappingList ml = this->mapperInstance()->getAircraftMappingList().findByModelString(model.getModelString());
if (!ml.isEmpty())
{
CAircraftMapping mapping = ml.front();
newModel.setIcao(mapping.getIcao());
}
}
CSimulatorFsCommon::reverseLookupIcaoData(newModel);
ownAircraft().setModel(newModel);
emit ownAircraftModelChanged(ownAircraft());
}
}
void CSimulatorFsCommon::reverseLookupIcaoData(CAircraftModel &model)
{
if (mapperInstance() && mapperInstance()->isInitialized())
{
// reverse lookup of ICAO
CAircraftIcao icao = mapperInstance()->getIcaoForModelString(model.getModelString());
icao.updateMissingParts(icao);
}
}
CAircraftMapper *CSimulatorFsCommon::mapperInstance()
{
static CAircraftMapper *mapper = new CAircraftMapper(
@@ -121,24 +112,26 @@ namespace BlackSimPlugin
CAircraftModel CSimulatorFsCommon::modelMatching(const CSimulatedAircraft &remoteAircraft)
{
// Manually set string?
if (remoteAircraft.getModel().hasManuallySetString())
{
// manual set model
return remoteAircraft.getModel();
}
//! \todo Model Matching before models are read
// default model
CAircraftModel aircraftModel(remoteAircraft); // set defaults
// Manually set string?
if (remoteAircraft.getModel().hasManuallySetString())
{
// manual set model, maybe update missing parts
aircraftModel.updateMissingParts(remoteAircraft.getModel());
CSimulatorFsCommon::reverseLookupIcaoData(aircraftModel);
return aircraftModel;
}
// mapper ready?
if (!mapperInstance()->isInitialized())
{
//! \todo Model Matching before models are read
// will be removed later, just for experimental version
aircraftModel.setModelString("Boeing 737-800 Paint1");
aircraftModel.setDescription("Model mapper not ready");
aircraftModel = CAircraftMapper::getDefaultModel();
aircraftModel.setCallsign(remoteAircraft.getCallsign());
CLogMessage(static_cast<CSimulatorFsCommon *>(nullptr)).warning("Mapper not ready, set to default model");
return aircraftModel;
}
@@ -174,9 +167,7 @@ namespace BlackSimPlugin
// default or sanity check
if (!aircraftModel.hasModelString())
{
aircraftModel.setModelString("Boeing 737-800 Paint1");
aircraftModel.setDescription("Default model");
aircraftModel.setModelType(CAircraftModel::TypeModelMatching);
aircraftModel = CAircraftMapper::getDefaultModel();
}
else
{
@@ -187,8 +178,8 @@ namespace BlackSimPlugin
Q_ASSERT_X(false, "modelMatching", m.toLocal8Bit().constData());
}
}
aircraftModel.setCallsign(remoteAircraft.getCallsign());
Q_ASSERT(!aircraftModel.getCallsign().isEmpty());
Q_ASSERT(aircraftModel.hasModelString());
Q_ASSERT(aircraftModel.getModelType() != CAircraftModel::TypeUnknown);
@@ -210,6 +201,12 @@ namespace BlackSimPlugin
return mapperInstance()->getAircraftCfgEntriesList().toAircraftModelList();
}
CAircraftIcao CSimulatorFsCommon::getIcaoForModelString(const QString &modelString) const
{
if (!mapperInstance()) { return CAircraftIcao(); }
return mapperInstance()->getIcaoForModelString(modelString);
}
CPixmap CSimulatorFsCommon::iconForModel(const QString &modelString) const
{
static const CPixmap empty;
@@ -241,7 +238,34 @@ namespace BlackSimPlugin
return empty;
}
int CSimulatorFsCommon::getMaxRenderedAircraft() const
{
return this->m_maxRenderedAircraft;
}
void CSimulatorFsCommon::setMaxRenderedAircraft(int maxRenderedAircraft)
{
this->m_maxRenderedAircraft = maxRenderedAircraft;
}
bool CSimulatorFsCommon::changeRenderedAircraftModel(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator)
{
return this->changeAircraftEnabled(aircraft, originator);
}
bool CSimulatorFsCommon::changeAircraftEnabled(const CSimulatedAircraft &aircraft, const QString &originator)
{
if (originator == simulatorOriginator()) { return false; }
if (aircraft.isEnabled())
{
this->addRemoteAircraft(aircraft);
}
else
{
this->removeRenderedAircraft(aircraft.getCallsign());
}
return true;
}
} // namespace
} // namespace