mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 14:55:36 +08:00
feat: new lights and number of engines increased to 6
This commit is contained in:
@@ -551,8 +551,8 @@ namespace swift::core
|
||||
|
||||
// TODO TZ remove when testing is done
|
||||
CLogMessage(this).info(u"CAirspaceMonitor::sendReadyForModelMatching "
|
||||
u"callsign %1 ")
|
||||
<< callsign;
|
||||
u"callsign %1 Flag %2 ")
|
||||
<< callsign << rf;
|
||||
// TODO remove
|
||||
|
||||
// set flag and init ts
|
||||
@@ -1212,17 +1212,7 @@ namespace swift::core
|
||||
const CSimulatedAircraft aircraft = this->getAircraftInRangeForCallsign(callsign);
|
||||
if (aircraft.hasValidCallsign())
|
||||
{
|
||||
// TODO TZ at this point we have a poblem if the model has no DB key yet (msfs2024 liveries)
|
||||
// only if we do not have a DB model yet
|
||||
// int testType = aircraft.getModelType();1
|
||||
CLogMessage(this).info(u"CAirspaceMonitor::addOrUpdateAircraftInRange CHECK:"
|
||||
u"aircraft.getModelType %1 "
|
||||
u"callsign %2 "
|
||||
u"aircraftIcao %3 "
|
||||
u"incomming modelType %4 ")
|
||||
<< aircraft.getModelType() << callsign.toQString() << aircraftIcao << modelType;
|
||||
|
||||
// we do not change manually assigned models
|
||||
// we do not change manually assigned models (msfs2024)
|
||||
if (!aircraft.getModel().hasValidDbKey() && aircraft.getModelType() != CAircraftModel::TypeManuallySet)
|
||||
{
|
||||
|
||||
@@ -1491,6 +1481,7 @@ namespace swift::core
|
||||
this->updateAircraftInRange(callsign, vm);
|
||||
}
|
||||
|
||||
// TODO TZ I think, we can remove this method in future, as we have now longer IVAO supported protocols
|
||||
void CAirspaceMonitor::onRevBAircraftConfigReceived(const CCallsign &callsign, const QString &config,
|
||||
qint64 currentOffsetMs)
|
||||
{
|
||||
|
||||
@@ -1142,10 +1142,6 @@ namespace swift::core::context
|
||||
if (c)
|
||||
{
|
||||
const CSimulatedAircraft aircraft(this->getAircraftInRangeForCallsign(callsign));
|
||||
// TODO TZ
|
||||
CLogMessage(this).info(u"CContextNetwork::updateAircraftModel model.getModelString %1 model.getModelLivery "
|
||||
u"%2 model.getModelType %3 aircraft.getModelType '%4'")
|
||||
<< model.getModelString() << model.getModelLivery() << model.getModelType() << aircraft.getModelType();
|
||||
|
||||
Q_ASSERT_X(!aircraft.getCallsign().isEmpty(), Q_FUNC_INFO, "missing callsign");
|
||||
emit this->changedRemoteAircraftModel(aircraft, originator); // update aircraft model
|
||||
|
||||
@@ -981,15 +981,6 @@ namespace swift::core
|
||||
bool ISimulator::changeRemoteAircraftEnabled(const CSimulatedAircraft &aircraft)
|
||||
{
|
||||
if (this->isShuttingDown()) { return false; }
|
||||
|
||||
// TODO TZ remove after testing
|
||||
CLogMessage(this).info(u"ISimulator::changeRemoteAircraftEnabled CHECK:"
|
||||
u"aircraft.getModelType %1 "
|
||||
u"aircraft.getModelString %2 "
|
||||
u"aircraft.getLiveryString %3 ")
|
||||
<< aircraft.getModelType() << aircraft.getModelString() << aircraft.getLiveryString();
|
||||
;
|
||||
|
||||
return aircraft.isEnabled() ? this->physicallyAddRemoteAircraft(aircraft) :
|
||||
this->physicallyRemoveRemoteAircraft(aircraft.getCallsign());
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
#include "misc/logmessage.h"
|
||||
#include "misc/network/connectionstatus.h"
|
||||
#include "misc/network/entityflags.h"
|
||||
// TODO TZ remove afte testing
|
||||
// TODO TZ remove after testing. it is in another branch already
|
||||
#include "misc/network/server.h"
|
||||
// TODO TZ end remove afte testing
|
||||
#include "misc/network/serverlist.h"
|
||||
@@ -301,7 +301,7 @@ namespace swift::gui::components
|
||||
{
|
||||
if (!m_updatePilotOnServerChanges) { return; }
|
||||
const bool vatsim = this->isVatsimNetworkTabSelected();
|
||||
// TODO TZ remove after testing
|
||||
// TODO TZ remove after testing. it is on another branch already
|
||||
// const CUser user = vatsim ? this->getCurrentVatsimServer().getUser() : server.getUser();
|
||||
const CUser user =
|
||||
server.getServerType() != CServer::FSDServer ? this->getCurrentVatsimServer().getUser() : server.getUser();
|
||||
|
||||
@@ -370,12 +370,6 @@ namespace swift::gui::components
|
||||
{
|
||||
const CAircraftModelList models = sGui->getIContextSimulator()->getModelSetModelsStartingWith(modelString);
|
||||
|
||||
// TODO TZ DEBUG only for testing
|
||||
const CStatusMessage msg = CStatusMessage(this).validationInfo(u"Found: %1 models for %2")
|
||||
<< models.size() << modelString;
|
||||
this->showOverlayMessage(msg, OverlayMessageMs);
|
||||
// END testing
|
||||
|
||||
if (models.isEmpty())
|
||||
{
|
||||
const CStatusMessage msg = CStatusMessage(this).validationError(u"No model for title: '%1'")
|
||||
|
||||
@@ -100,6 +100,9 @@ namespace swift::gui::editors
|
||||
ui->cb_AircraftPartsLightsBeacon->setChecked(on);
|
||||
ui->cb_AircraftPartsLightsNav->setChecked(on);
|
||||
ui->cb_AircraftPartsLightsLogo->setChecked(on);
|
||||
ui->cb_AircraftPartsLightsWing->setChecked(on);
|
||||
ui->cb_AircraftPartsLightsRecognition->setChecked(on);
|
||||
ui->cb_AircraftPartsLightsCabin->setChecked(on);
|
||||
}
|
||||
|
||||
void CAircraftPartsForm::setAllEngines()
|
||||
@@ -115,10 +118,13 @@ namespace swift::gui::editors
|
||||
|
||||
aviation::CAircraftParts CAircraftPartsForm::guiToAircraftParts() const
|
||||
{
|
||||
// added new values for lights and engines here
|
||||
const CAircraftLights lights(
|
||||
ui->cb_AircraftPartsLightsStrobe->isChecked(), ui->cb_AircraftPartsLightsLanding->isChecked(),
|
||||
ui->cb_AircraftPartsLightsTaxi->isChecked(), ui->cb_AircraftPartsLightsBeacon->isChecked(),
|
||||
ui->cb_AircraftPartsLightsNav->isChecked(), ui->cb_AircraftPartsLightsLogo->isChecked());
|
||||
ui->cb_AircraftPartsLightsNav->isChecked(), ui->cb_AircraftPartsLightsLogo->isChecked(),
|
||||
ui->cb_AircraftPartsLightsRecognition->isChecked(), ui->cb_AircraftPartsLightsCabin->isChecked(),
|
||||
ui->cb_AircraftPartsLightsWing->isChecked());
|
||||
const CAircraftEngineList engines(
|
||||
{ ui->cb_AircraftPartsEngine1->isChecked(), ui->cb_AircraftPartsEngine2->isChecked(),
|
||||
ui->cb_AircraftPartsEngine3->isChecked(), ui->cb_AircraftPartsEngine4->isChecked(),
|
||||
@@ -143,6 +149,7 @@ namespace swift::gui::editors
|
||||
ui->cb_AircraftPartsLightsNav->setChecked(lights.isNavOn());
|
||||
ui->cb_AircraftPartsLightsStrobe->setChecked(lights.isStrobeOn());
|
||||
ui->cb_AircraftPartsLightsTaxi->setChecked(lights.isTaxiOn());
|
||||
ui->cb_AircraftPartsLightsWing->setChecked(lights.isWingOn());
|
||||
|
||||
const CAircraftEngineList engines = parts.getEngines();
|
||||
ui->cb_AircraftPartsEngine1->setChecked(engines.isEngineOn(1));
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item row="4" column="1">
|
||||
<item row="3" column="4">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsStrobe">
|
||||
<property name="text">
|
||||
<string>Strobe</string>
|
||||
@@ -70,6 +70,30 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsWing">
|
||||
<property name="text">
|
||||
<string>Wing</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsRecognition">
|
||||
<property name="text">
|
||||
<string>Recognition</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="3">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsCabin">
|
||||
<property name="text">
|
||||
<string>Cabin</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsNav">
|
||||
<property name="text">
|
||||
@@ -91,7 +115,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="3">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsBeacon">
|
||||
<property name="text">
|
||||
<string>Beacon</string>
|
||||
@@ -140,7 +164,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="cb_AircraftPartsLightsLogo">
|
||||
<property name="text">
|
||||
<string>Logo</string>
|
||||
|
||||
@@ -36,7 +36,6 @@ namespace swift::gui::models
|
||||
(void)QT_TRANSLATE_NOOP("CAircraftModelListModel", "model");
|
||||
}
|
||||
|
||||
// TODO TZ check if some columns can be hidden automatically for different sims
|
||||
void CAircraftModelListModel::setAircraftModelMode(CAircraftModelListModel::AircraftModelMode mode)
|
||||
{
|
||||
if (m_mode == mode) { return; }
|
||||
|
||||
@@ -535,6 +535,8 @@ add_library(misc SHARED
|
||||
simulation/flightgear/flightgearutil.h
|
||||
simulation/msfs2024/aircraftmodelloadermsfs2024.cpp
|
||||
simulation/msfs2024/aircraftmodelloadermsfs2024.h
|
||||
simulation/msfs2024/simconnectutilities.cpp
|
||||
simulation/msfs2024/simconnectutilities.h
|
||||
simulation/fscommon/aircraftcfgentries.cpp
|
||||
simulation/fscommon/aircraftcfgentries.h
|
||||
simulation/fscommon/aircraftcfgentrieslist.cpp
|
||||
@@ -681,7 +683,7 @@ add_library(misc SHARED
|
||||
weather/windlayer.h
|
||||
weather/windlayerlist.cpp
|
||||
weather/windlayerlist.h
|
||||
)
|
||||
)
|
||||
|
||||
if(APPLE)
|
||||
target_sources(misc PRIVATE
|
||||
|
||||
@@ -20,17 +20,23 @@ namespace swift::misc::aviation
|
||||
CAircraftLights::CAircraftLights(bool strobeOn, bool landingOn, bool taxiOn, bool beaconOn, bool navOn, bool logoOn,
|
||||
bool recognition, bool cabin)
|
||||
: m_strobeOn(strobeOn), m_landingOn(landingOn), m_taxiOn(taxiOn), m_beaconOn(beaconOn), m_navOn(navOn),
|
||||
m_logoOn(logoOn), m_recognition(recognition), m_cabin(cabin)
|
||||
m_logoOn(logoOn), m_recognitionOn(recognition), m_cabinOn(cabin)
|
||||
{}
|
||||
|
||||
CAircraftLights::CAircraftLights(bool strobeOn, bool landingOn, bool taxiOn, bool beaconOn, bool navOn, bool logoOn,
|
||||
bool recognition, bool cabin, bool wing)
|
||||
: m_strobeOn(strobeOn), m_landingOn(landingOn), m_taxiOn(taxiOn), m_beaconOn(beaconOn), m_navOn(navOn),
|
||||
m_logoOn(logoOn), m_recognitionOn(recognition), m_cabinOn(cabin), m_wingOn(wing)
|
||||
{}
|
||||
|
||||
CAircraftLights CAircraftLights::allLightsOn()
|
||||
{
|
||||
return CAircraftLights { true, true, true, true, true, true, true, true };
|
||||
return CAircraftLights { true, true, true, true, true, true, true, true, true };
|
||||
}
|
||||
|
||||
CAircraftLights CAircraftLights::allLightsOff()
|
||||
{
|
||||
return CAircraftLights { false, false, false, false, false, false, false, false };
|
||||
return CAircraftLights { false, false, false, false, false, false, false, false, false };
|
||||
}
|
||||
|
||||
QString CAircraftLights::convertToQString(bool i18n) const
|
||||
@@ -39,7 +45,8 @@ namespace swift::misc::aviation
|
||||
const QString s = u"strobe: " % boolToYesNo(m_strobeOn) % u" landing: " % boolToYesNo(m_landingOn) %
|
||||
u" taxi: " % boolToYesNo(m_taxiOn) % u" beacon: " % boolToYesNo(m_beaconOn) % u" nav: " %
|
||||
boolToYesNo(m_navOn) % u" logo: " % boolToYesNo(m_logoOn) % u" recognition: " %
|
||||
boolToYesNo(m_recognition) % u" cabin: " % boolToYesNo(m_cabin);
|
||||
boolToYesNo(m_recognitionOn) % u" cabin: " % boolToYesNo(m_cabinOn) % u" cabin: " %
|
||||
boolToYesNo(m_wingOn);
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -57,8 +64,9 @@ namespace swift::misc::aviation
|
||||
case IndexNav: return QVariant::fromValue(m_navOn);
|
||||
case IndexStrobe: return QVariant::fromValue(m_strobeOn);
|
||||
case IndexTaxi: return QVariant::fromValue(m_taxiOn);
|
||||
case IndexRecognition: return QVariant::fromValue(m_recognition);
|
||||
case IndexCabin: return QVariant::fromValue(m_cabin);
|
||||
case IndexRecognition: return QVariant::fromValue(m_recognitionOn);
|
||||
case IndexCabin: return QVariant::fromValue(m_cabinOn);
|
||||
case IndexWing: return QVariant::fromValue(m_wingOn);
|
||||
default: return CValueObject::propertyByIndex(index);
|
||||
}
|
||||
}
|
||||
@@ -81,8 +89,9 @@ namespace swift::misc::aviation
|
||||
case IndexNav: m_navOn = variant.toBool(); break;
|
||||
case IndexStrobe: m_strobeOn = variant.toBool(); break;
|
||||
case IndexTaxi: m_taxiOn = variant.toBool(); break;
|
||||
case IndexCabin: m_cabin = variant.toBool(); break;
|
||||
case IndexRecognition: m_recognition = variant.toBool(); break;
|
||||
case IndexCabin: m_cabinOn = variant.toBool(); break;
|
||||
case IndexRecognition: m_recognitionOn = variant.toBool(); break;
|
||||
case IndexWing: m_wingOn = variant.toBool(); break;
|
||||
default: CValueObject::setPropertyByIndex(index, variant); break;
|
||||
}
|
||||
}
|
||||
@@ -99,8 +108,9 @@ namespace swift::misc::aviation
|
||||
case IndexNav: return Compare::compare(m_navOn, compareValue.isNavOn());
|
||||
case IndexStrobe: return Compare::compare(m_strobeOn, compareValue.isStrobeOn());
|
||||
case IndexTaxi: return Compare::compare(m_taxiOn, compareValue.isTaxiOn());
|
||||
case IndexCabin: return Compare::compare(m_cabin, compareValue.isCabinOn());
|
||||
case IndexRecognition: return Compare::compare(m_recognition, compareValue.isRecognitionOn());
|
||||
case IndexCabin: return Compare::compare(m_cabinOn, compareValue.isCabinOn());
|
||||
case IndexRecognition: return Compare::compare(m_recognitionOn, compareValue.isRecognitionOn());
|
||||
case IndexWing: return Compare::compare(m_wingOn, compareValue.isWingOn());
|
||||
default: break;
|
||||
}
|
||||
return 0;
|
||||
@@ -114,8 +124,9 @@ namespace swift::misc::aviation
|
||||
m_navOn = true;
|
||||
m_strobeOn = true;
|
||||
m_taxiOn = true;
|
||||
m_cabin = true;
|
||||
m_recognition = true;
|
||||
m_cabinOn = true;
|
||||
m_recognitionOn = true;
|
||||
m_wingOn = true;
|
||||
}
|
||||
|
||||
void CAircraftLights::setAllOff()
|
||||
@@ -126,7 +137,8 @@ namespace swift::misc::aviation
|
||||
m_navOn = false;
|
||||
m_strobeOn = false;
|
||||
m_taxiOn = false;
|
||||
m_recognition = false;
|
||||
m_cabin = false;
|
||||
m_recognitionOn = false;
|
||||
m_cabinOn = false;
|
||||
m_wingOn = false;
|
||||
}
|
||||
} // namespace swift::misc::aviation
|
||||
|
||||
@@ -33,7 +33,8 @@ namespace swift::misc::aviation
|
||||
IndexNav,
|
||||
IndexLogo,
|
||||
IndexRecognition,
|
||||
IndexCabin
|
||||
IndexCabin,
|
||||
IndexWing,
|
||||
};
|
||||
|
||||
//! Default constructor
|
||||
@@ -49,6 +50,10 @@ namespace swift::misc::aviation
|
||||
CAircraftLights(bool strobeOn, bool landingOn, bool taxiOn, bool beaconOn, bool navOn, bool logoOn,
|
||||
bool recognition, bool cabin);
|
||||
|
||||
//! Constructor
|
||||
CAircraftLights(bool strobeOn, bool landingOn, bool taxiOn, bool beaconOn, bool navOn, bool logoOn,
|
||||
bool recognitionOn, bool cabin, bool wingOn);
|
||||
|
||||
//! Strobes lights on?
|
||||
bool isStrobeOn() const { return m_strobeOn; }
|
||||
|
||||
@@ -86,16 +91,22 @@ namespace swift::misc::aviation
|
||||
void setLogoOn(bool on) { m_logoOn = on; }
|
||||
|
||||
//! Recognition lights on?
|
||||
bool isRecognitionOn() const { return m_recognition; }
|
||||
bool isRecognitionOn() const { return m_recognitionOn; }
|
||||
|
||||
//! Set recognition lights
|
||||
void setRecognitionOn(bool on) { m_recognition = on; }
|
||||
void setRecognitionOn(bool on) { m_recognitionOn = on; }
|
||||
|
||||
//! Cabin lights on?
|
||||
bool isCabinOn() const { return m_cabin; }
|
||||
bool isCabinOn() const { return m_cabinOn; }
|
||||
|
||||
//! Set cabin lights
|
||||
void setCabinOn(bool on) { m_cabin = on; }
|
||||
void setCabinOn(bool on) { m_cabinOn = on; }
|
||||
|
||||
//! Wing light on?
|
||||
bool isWingOn() const { return m_wingOn; }
|
||||
|
||||
//! Set wing lights
|
||||
void setWingOn(bool on) { m_wingOn = on; }
|
||||
|
||||
//! All on
|
||||
void setAllOn();
|
||||
@@ -135,9 +146,11 @@ namespace swift::misc::aviation
|
||||
bool m_beaconOn = false;
|
||||
bool m_navOn = false;
|
||||
bool m_logoOn = false;
|
||||
bool m_recognition = false; //!< not supported by aircraft config (VATSIM)
|
||||
bool m_cabin = false; //!< not supported by aircraft config (VATSIM)
|
||||
bool m_recognitionOn = false; //!< not supported by aircraft config (VATSIM)
|
||||
bool m_cabinOn = false; //!< not supported by aircraft config (VATSIM)
|
||||
bool m_wingOn = false; //!< not supported by aircraft config (VATSIM)
|
||||
|
||||
// TODO TZ check if disabled lights can be activated. for testing we keep them enabled in JSON
|
||||
SWIFT_METACLASS(
|
||||
CAircraftLights,
|
||||
SWIFT_METAMEMBER(isNull, 0, DisabledForJson), // disable since JSON is used for network
|
||||
@@ -147,8 +160,12 @@ namespace swift::misc::aviation
|
||||
SWIFT_METAMEMBER_NAMED(beaconOn, "beacon_on"),
|
||||
SWIFT_METAMEMBER_NAMED(navOn, "nav_on"),
|
||||
SWIFT_METAMEMBER_NAMED(logoOn, "logo_on"),
|
||||
SWIFT_METAMEMBER(recognition, 0, DisabledForJson), // disable since JSON is used for network
|
||||
SWIFT_METAMEMBER(cabin, 0, DisabledForJson) // disable since JSON is used for network
|
||||
SWIFT_METAMEMBER_NAMED(recognitionOn,"recognition_on"),
|
||||
SWIFT_METAMEMBER_NAMED(cabinOn, "cabin_on"),
|
||||
SWIFT_METAMEMBER_NAMED(wingOn, "wing_on")
|
||||
//SWIFT_METAMEMBER(recognitionOn, 0, DisabledForJson), // disable since JSON is used for network
|
||||
//SWIFT_METAMEMBER(cabinOn, 0, DisabledForJson), // disable since JSON is used for network
|
||||
//SWIFT_METAMEMBER(wingOn, 0, DisabledForJson) // disable since JSON is used for network
|
||||
);
|
||||
};
|
||||
} // namespace swift::misc::aviation
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace swift::misc::simulation
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO TZ
|
||||
// TODO TZ 2024: skip loading for MSFS2024?
|
||||
QStringList modelDirs = { "", "" };
|
||||
// if (simulator.isMSFS2024())
|
||||
//{
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace swift::misc::simulation::msfs2024
|
||||
|
||||
// TODO TZ Implement model queries via SimConnect if possible
|
||||
// misc shut not include simconnect headers or plugins directly
|
||||
|
||||
// still no idea how to do that
|
||||
const CSimulatorInfo simulatorInfo = CSimulatorInfo::msfs2024();
|
||||
allModels =
|
||||
CCentralMultiSimulatorModelCachesProvider::modelCachesInstance().getSynchronizedCachedModels(simulatorInfo);
|
||||
@@ -83,7 +83,7 @@ namespace swift::misc::simulation::msfs2024
|
||||
if (m_parserWorker && !m_parserWorker->isFinished()) { return; }
|
||||
emit this->diskLoadingStarted(simulator, mode);
|
||||
|
||||
// TODO TZ simplify, we don't need directories
|
||||
// TODO TZ need help: simplify, we don't need directories in this->performParsing for MSFS2024
|
||||
m_parserWorker = CWorker::fromTask(this, "CAircraftModelLoaderMsfs2024::performParsing",
|
||||
[this, modelDirs, excludedDirectoryPatterns, modelConsolidation]() {
|
||||
auto models = this->performParsing();
|
||||
|
||||
75
src/misc/simulation/msfs2024/simconnectutilities.cpp
Normal file
75
src/misc/simulation/msfs2024/simconnectutilities.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
|
||||
|
||||
#include "misc/simulation/msfs2024/simconnectutilities.h"
|
||||
|
||||
#include <QFlags>
|
||||
#include <QLatin1String>
|
||||
#include <QMetaEnum>
|
||||
#include <QMetaObject>
|
||||
|
||||
#include "misc/stringutils.h"
|
||||
|
||||
using namespace swift::misc;
|
||||
using namespace swift::misc::aviation;
|
||||
|
||||
namespace swift::misc::simulation::msfs2024
|
||||
{
|
||||
CSimConnectUtilities::CSimConnectUtilities() {}
|
||||
|
||||
QString CSimConnectUtilities::resolveEnumToString(const DWORD id, const char *enumName)
|
||||
{
|
||||
const int i = CSimConnectUtilities::staticMetaObject.indexOfEnumerator(enumName);
|
||||
if (i < 0) { return QStringLiteral("No enumerator for %1").arg(enumName); }
|
||||
const QMetaEnum m = CSimConnectUtilities::staticMetaObject.enumerator(i);
|
||||
const char *k = m.valueToKey(static_cast<int>(id));
|
||||
return (k) ? QLatin1String(k) : QStringLiteral("Id '%1' not found for %2").arg(id).arg(enumName);
|
||||
}
|
||||
|
||||
QString CSimConnectUtilities::simConnectExceptionToString(const DWORD id)
|
||||
{
|
||||
return CSimConnectUtilities::resolveEnumToString(id, "SIMCONNECT_EXCEPTION");
|
||||
}
|
||||
|
||||
QString CSimConnectUtilities::simConnectSurfaceTypeToString(const DWORD type, bool beautify)
|
||||
{
|
||||
QString sf = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_SURFACE");
|
||||
return beautify ? sf.replace('_', ' ') : sf;
|
||||
}
|
||||
|
||||
QString CSimConnectUtilities::simConnectReceiveIdToString(DWORD type)
|
||||
{
|
||||
const QString ri = CSimConnectUtilities::resolveEnumToString(type, "SIMCONNECT_RECV_ID");
|
||||
return ri;
|
||||
}
|
||||
|
||||
int CSimConnectUtilities::lightsToLightStates(const CAircraftLights &lights)
|
||||
{
|
||||
int lightMask = 0;
|
||||
if (lights.isBeaconOn()) { lightMask |= Beacon; }
|
||||
if (lights.isLandingOn()) { lightMask |= Landing; }
|
||||
if (lights.isLogoOn()) { lightMask |= Logo; }
|
||||
if (lights.isNavOn()) { lightMask |= Nav; }
|
||||
if (lights.isStrobeOn()) { lightMask |= Strobe; }
|
||||
if (lights.isTaxiOn()) { lightMask |= Taxi; }
|
||||
return lightMask;
|
||||
}
|
||||
|
||||
void CSimConnectUtilities::registerMetadata()
|
||||
{
|
||||
qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_EXCEPTION>();
|
||||
qRegisterMetaType<CSimConnectUtilities::SIMCONNECT_SURFACE>();
|
||||
}
|
||||
|
||||
CWinDllUtils::DLLInfo CSimConnectUtilities::simConnectDllInfo()
|
||||
{
|
||||
const QList<CWinDllUtils::ProcessModule> modules = CWinDllUtils::getModules(-1, "simconnect");
|
||||
if (modules.isEmpty())
|
||||
{
|
||||
CWinDllUtils::DLLInfo info;
|
||||
info.errorMsg = "No SimConnect.dll loaded";
|
||||
return info;
|
||||
}
|
||||
return CWinDllUtils::getDllInfo(modules.first().executable);
|
||||
}
|
||||
} // namespace swift::misc::simulation::msfs2024
|
||||
204
src/misc/simulation/msfs2024/simconnectutilities.h
Normal file
204
src/misc/simulation/msfs2024/simconnectutilities.h
Normal file
@@ -0,0 +1,204 @@
|
||||
// SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
|
||||
|
||||
//! \file
|
||||
|
||||
#ifndef SWIFT_MISC_SIMULATION_MSFS2024_SIMCONNECTUTILITIES_H
|
||||
#define SWIFT_MISC_SIMULATION_MSFS2024_SIMCONNECTUTILITIES_H
|
||||
|
||||
#include <QMetaType>
|
||||
#include <QObject>
|
||||
#include <QSettings>
|
||||
#include <QString>
|
||||
|
||||
#include "misc/aviation/aircraftlights.h"
|
||||
#include "misc/simulation/simulatorinfo.h"
|
||||
#include "misc/swiftmiscexport.h"
|
||||
#include "misc/windllutils.h"
|
||||
|
||||
// Apart from the below definitions, the following code is OS independent,
|
||||
// though it does not make sense to be used on non WIN machines.
|
||||
// But it allows such parts to compile on all platforms.
|
||||
#ifdef Q_OS_WIN
|
||||
# ifndef NOMINMAX
|
||||
# define NOMINMAX
|
||||
# endif
|
||||
# include <Windows.h>
|
||||
#else
|
||||
using DWORD = unsigned long; //!< Fake Windows DWORD
|
||||
#endif
|
||||
|
||||
namespace swift::misc::simulation::msfs2024
|
||||
{
|
||||
//! Utilities for SimConnect
|
||||
//! \remark not using the simconnect.h headers as Misc classes are not driver aware
|
||||
class SWIFT_MISC_EXPORT CSimConnectUtilities : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
//! Resolve SimConnect exception (based on Qt metadata).
|
||||
//! \param id enum element
|
||||
//! \return enum element's name
|
||||
static QString simConnectExceptionToString(const DWORD id);
|
||||
|
||||
//! Resolve SimConnect surface (based on Qt metadata).
|
||||
//! \param type enum element
|
||||
//! \param beautify remove "_"
|
||||
static QString simConnectSurfaceTypeToString(const DWORD type, bool beautify = true);
|
||||
|
||||
//! SimConnect surfaces.
|
||||
//! \sa http://msdn.microsoft.com/en-us/library/cc526981.aspx#AircraftFlightInstrumentationData
|
||||
enum SIMCONNECT_SURFACE
|
||||
{
|
||||
Concrete,
|
||||
Grass,
|
||||
Water,
|
||||
Grass_bumpy,
|
||||
Asphalt,
|
||||
Short_grass,
|
||||
Long_grass,
|
||||
Hard_turf,
|
||||
Snow,
|
||||
Ice,
|
||||
Urban,
|
||||
Forest,
|
||||
Dirt,
|
||||
Coral,
|
||||
Gravel,
|
||||
Oil_treated,
|
||||
Steel_mats,
|
||||
Bituminus,
|
||||
Brick,
|
||||
Macadam,
|
||||
Planks,
|
||||
Sand,
|
||||
Shale,
|
||||
Tarmac,
|
||||
Wright_flyer_track
|
||||
};
|
||||
Q_ENUM(SIMCONNECT_SURFACE)
|
||||
|
||||
//! SimConnect exceptions.
|
||||
enum SIMCONNECT_EXCEPTION
|
||||
{
|
||||
SIMCONNECT_EXCEPTION_NONE,
|
||||
SIMCONNECT_EXCEPTION_ERROR,
|
||||
SIMCONNECT_EXCEPTION_SIZE_MISMATCH,
|
||||
SIMCONNECT_EXCEPTION_UNRECOGNIZED_ID,
|
||||
SIMCONNECT_EXCEPTION_UNOPENED,
|
||||
SIMCONNECT_EXCEPTION_VERSION_MISMATCH,
|
||||
SIMCONNECT_EXCEPTION_TOO_MANY_GROUPS,
|
||||
SIMCONNECT_EXCEPTION_NAME_UNRECOGNIZED,
|
||||
SIMCONNECT_EXCEPTION_TOO_MANY_EVENT_NAMES,
|
||||
SIMCONNECT_EXCEPTION_EVENT_ID_DUPLICATE,
|
||||
SIMCONNECT_EXCEPTION_TOO_MANY_MAPS,
|
||||
SIMCONNECT_EXCEPTION_TOO_MANY_OBJECTS,
|
||||
SIMCONNECT_EXCEPTION_TOO_MANY_REQUESTS,
|
||||
SIMCONNECT_EXCEPTION_WEATHER_INVALID_PORT,
|
||||
SIMCONNECT_EXCEPTION_WEATHER_INVALID_METAR,
|
||||
SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_GET_OBSERVATION,
|
||||
SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_CREATE_STATION,
|
||||
SIMCONNECT_EXCEPTION_WEATHER_UNABLE_TO_REMOVE_STATION,
|
||||
SIMCONNECT_EXCEPTION_INVALID_DATA_TYPE,
|
||||
SIMCONNECT_EXCEPTION_INVALID_DATA_SIZE,
|
||||
SIMCONNECT_EXCEPTION_DATA_ERROR,
|
||||
SIMCONNECT_EXCEPTION_INVALID_ARRAY,
|
||||
SIMCONNECT_EXCEPTION_CREATE_OBJECT_FAILED,
|
||||
SIMCONNECT_EXCEPTION_LOAD_FLIGHTPLAN_FAILED,
|
||||
SIMCONNECT_EXCEPTION_OPERATION_INVALID_FOR_OBJECT_TYPE,
|
||||
SIMCONNECT_EXCEPTION_ILLEGAL_OPERATION,
|
||||
SIMCONNECT_EXCEPTION_ALREADY_SUBSCRIBED,
|
||||
SIMCONNECT_EXCEPTION_INVALID_ENUM,
|
||||
SIMCONNECT_EXCEPTION_DEFINITION_ERROR,
|
||||
SIMCONNECT_EXCEPTION_DUPLICATE_ID,
|
||||
SIMCONNECT_EXCEPTION_DATUM_ID,
|
||||
SIMCONNECT_EXCEPTION_OUT_OF_BOUNDS,
|
||||
SIMCONNECT_EXCEPTION_ALREADY_CREATED,
|
||||
SIMCONNECT_EXCEPTION_OBJECT_OUTSIDE_REALITY_BUBBLE,
|
||||
SIMCONNECT_EXCEPTION_OBJECT_CONTAINER,
|
||||
SIMCONNECT_EXCEPTION_OBJECT_AI,
|
||||
SIMCONNECT_EXCEPTION_OBJECT_ATC,
|
||||
SIMCONNECT_EXCEPTION_OBJECT_SCHEDULE
|
||||
};
|
||||
Q_ENUM(SIMCONNECT_EXCEPTION)
|
||||
|
||||
//! Lights for FSX/P3D "LIGHT ON STATES"
|
||||
//! \sa http://www.prepar3d.com/SDKv2/LearningCenter/utilities/variables/simulation_variables.html
|
||||
enum LIGHT_STATES
|
||||
{
|
||||
Nav = 0x0001,
|
||||
Beacon = 0x0002,
|
||||
Landing = 0x0004,
|
||||
Taxi = 0x0008,
|
||||
Strobe = 0x0010,
|
||||
Panel = 0x0020,
|
||||
Recognition = 0x0040,
|
||||
Wing = 0x0080,
|
||||
Logo = 0x0100,
|
||||
Cabin = 0x0200
|
||||
};
|
||||
|
||||
//! Receive IDs for SimConnect
|
||||
enum SIMCONNECT_RECV_ID
|
||||
{
|
||||
SIMCONNECT_RECV_ID_NULL,
|
||||
SIMCONNECT_RECV_ID_EXCEPTION,
|
||||
SIMCONNECT_RECV_ID_OPEN,
|
||||
SIMCONNECT_RECV_ID_QUIT,
|
||||
SIMCONNECT_RECV_ID_EVENT,
|
||||
SIMCONNECT_RECV_ID_EVENT_OBJECT_ADDREMOVE,
|
||||
SIMCONNECT_RECV_ID_EVENT_FILENAME,
|
||||
SIMCONNECT_RECV_ID_EVENT_FRAME,
|
||||
SIMCONNECT_RECV_ID_SIMOBJECT_DATA,
|
||||
SIMCONNECT_RECV_ID_SIMOBJECT_DATA_BYTYPE,
|
||||
SIMCONNECT_RECV_ID_WEATHER_OBSERVATION,
|
||||
SIMCONNECT_RECV_ID_CLOUD_STATE,
|
||||
SIMCONNECT_RECV_ID_ASSIGNED_OBJECT_ID,
|
||||
SIMCONNECT_RECV_ID_RESERVED_KEY,
|
||||
SIMCONNECT_RECV_ID_CUSTOM_ACTION,
|
||||
SIMCONNECT_RECV_ID_SYSTEM_STATE,
|
||||
SIMCONNECT_RECV_ID_CLIENT_DATA,
|
||||
SIMCONNECT_RECV_ID_EVENT_WEATHER_MODE,
|
||||
SIMCONNECT_RECV_ID_AIRPORT_LIST,
|
||||
SIMCONNECT_RECV_ID_VOR_LIST,
|
||||
SIMCONNECT_RECV_ID_NDB_LIST,
|
||||
SIMCONNECT_RECV_ID_WAYPOINT_LIST,
|
||||
SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SERVER_STARTED,
|
||||
SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_CLIENT_STARTED,
|
||||
SIMCONNECT_RECV_ID_EVENT_MULTIPLAYER_SESSION_ENDED,
|
||||
SIMCONNECT_RECV_ID_EVENT_RACE_END,
|
||||
SIMCONNECT_RECV_ID_EVENT_RACE_LAP,
|
||||
};
|
||||
Q_ENUM(SIMCONNECT_RECV_ID)
|
||||
|
||||
//! Receive id to string
|
||||
static QString simConnectReceiveIdToString(DWORD type);
|
||||
|
||||
//! Lights to states
|
||||
static int lightsToLightStates(const aviation::CAircraftLights &lights);
|
||||
|
||||
//! Get info about SimConnect DLL
|
||||
static swift::misc::CWinDllUtils::DLLInfo simConnectDllInfo();
|
||||
|
||||
//! Register metadata
|
||||
static void registerMetadata();
|
||||
|
||||
private:
|
||||
//!
|
||||
//! Resolve enum value to its cleartext (based on Qt metadata).
|
||||
//! \param id enum element
|
||||
//! \param enumName name of the resolved enum
|
||||
//! \return enum element's name
|
||||
static QString resolveEnumToString(const DWORD id, const char *enumName);
|
||||
|
||||
//! Hidden constructor
|
||||
CSimConnectUtilities();
|
||||
};
|
||||
} // namespace swift::misc::simulation::msfs2024
|
||||
|
||||
Q_DECLARE_METATYPE(swift::misc::simulation::msfs2024::CSimConnectUtilities::SIMCONNECT_EXCEPTION)
|
||||
Q_DECLARE_METATYPE(swift::misc::simulation::msfs2024::CSimConnectUtilities::SIMCONNECT_SURFACE)
|
||||
Q_DECLARE_METATYPE(swift::misc::simulation::msfs2024::CSimConnectUtilities::SIMCONNECT_RECV_ID)
|
||||
|
||||
#endif // SWIFT_MISC_SIMULATION_MSFS2024_SIMCONNECTUTILITIES_H
|
||||
@@ -130,6 +130,13 @@ namespace swift::simplugin::msfs2024common
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT NAV", "Bool");
|
||||
hr +=
|
||||
SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT LOGO", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT RECOGNITION",
|
||||
"Bool");
|
||||
hr +=
|
||||
SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT CABIN", "Bool");
|
||||
hr +=
|
||||
SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "LIGHT WING", "Bool");
|
||||
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "TRANSPONDER CODE:1",
|
||||
nullptr);
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
|
||||
@@ -171,6 +178,11 @@ namespace swift::simplugin::msfs2024common
|
||||
"GENERAL ENG COMBUSTION:3", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
|
||||
"GENERAL ENG COMBUSTION:4", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
|
||||
"GENERAL ENG COMBUSTION:5", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft,
|
||||
"GENERAL ENG COMBUSTION:6", "Bool");
|
||||
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD X",
|
||||
"Feet per second");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraft, "VELOCITY WORLD Y",
|
||||
@@ -236,6 +248,10 @@ namespace swift::simplugin::msfs2024common
|
||||
"GENERAL ENG COMBUSTION:3", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftPartsWithoutLights,
|
||||
"GENERAL ENG COMBUSTION:4", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftPartsWithoutLights,
|
||||
"GENERAL ENG COMBUSTION:5", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftPartsWithoutLights,
|
||||
"GENERAL ENG COMBUSTION:6", "Bool");
|
||||
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataOwnAircraftTitle, "TITLE",
|
||||
nullptr, SIMCONNECT_DATATYPE_STRING256);
|
||||
@@ -255,12 +271,12 @@ namespace swift::simplugin::msfs2024common
|
||||
"Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftLights,
|
||||
"LIGHT LOGO", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftLights, "LIGHT NAV",
|
||||
"Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftLights,
|
||||
"LIGHT RECOGNITION", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftLights,
|
||||
"LIGHT CABIN", "Bool");
|
||||
hr += SimConnect_AddToDataDefinition(hSimConnect, CSimConnectDefinitions::DataRemoteAircraftLights,
|
||||
"LIGHT WING", "Bool");
|
||||
|
||||
if (isFailure(hr))
|
||||
{
|
||||
@@ -473,11 +489,12 @@ namespace swift::simplugin::msfs2024common
|
||||
{
|
||||
return std::tie(flapsLeadingEdgeLeftPercent, flapsLeadingEdgeRightPercent, flapsTrailingEdgeLeftPercent,
|
||||
flapsTrailingEdgeRightPercent, gearHandlePosition, spoilersHandlePosition, engine1Combustion,
|
||||
engine2Combustion, engine3Combustion, engine4Combustion) ==
|
||||
engine2Combustion, engine3Combustion, engine4Combustion, engine5Combustion,
|
||||
engine6Combustion) ==
|
||||
std::tie(rhs.flapsLeadingEdgeLeftPercent, rhs.flapsLeadingEdgeRightPercent,
|
||||
rhs.flapsTrailingEdgeLeftPercent, rhs.flapsTrailingEdgeRightPercent, rhs.gearHandlePosition,
|
||||
rhs.spoilersHandlePosition, rhs.engine1Combustion, rhs.engine2Combustion, rhs.engine3Combustion,
|
||||
rhs.engine4Combustion);
|
||||
rhs.engine4Combustion, rhs.engine5Combustion, rhs.engine6Combustion);
|
||||
}
|
||||
|
||||
void DataDefinitionRemoteAircraftPartsWithoutLights::setAllEngines(bool on)
|
||||
@@ -486,6 +503,8 @@ namespace swift::simplugin::msfs2024common
|
||||
engine2Combustion = on ? 1 : 0;
|
||||
engine3Combustion = on ? 1 : 0;
|
||||
engine4Combustion = on ? 1 : 0;
|
||||
engine5Combustion = on ? 1 : 0;
|
||||
engine6Combustion = on ? 1 : 0;
|
||||
}
|
||||
|
||||
void DataDefinitionRemoteAircraftPartsWithoutLights::setEngine(int number1based, bool on)
|
||||
@@ -497,6 +516,8 @@ namespace swift::simplugin::msfs2024common
|
||||
case 2: engine2Combustion = v; break;
|
||||
case 3: engine3Combustion = v; break;
|
||||
case 4: engine4Combustion = v; break;
|
||||
case 5: engine5Combustion = v; break;
|
||||
case 6: engine6Combustion = v; break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
@@ -523,6 +544,8 @@ namespace swift::simplugin::msfs2024common
|
||||
engine2Combustion = -1;
|
||||
engine3Combustion = -1;
|
||||
engine4Combustion = -1;
|
||||
engine5Combustion = -1;
|
||||
engine6Combustion = -1;
|
||||
}
|
||||
|
||||
void DataDefinitionRemoteAircraftPartsWithoutLights::initFromParts(const CAircraftParts &parts)
|
||||
@@ -544,7 +567,7 @@ namespace swift::simplugin::msfs2024common
|
||||
CAircraftLights DataDefinitionRemoteAircraftLights::toLights() const
|
||||
{
|
||||
return CAircraftLights(dtb(lightStrobe), dtb(lightLanding), dtb(lightTaxi), dtb(lightBeacon), dtb(lightNav),
|
||||
dtb(lightLogo), dtb(lightRecognition), dtb(lightCabin));
|
||||
dtb(lightLogo), dtb(lightRecognition), dtb(lightCabin), dtb(lightWing));
|
||||
}
|
||||
|
||||
QString DataDefinitionClientAreaSb::toQString() const
|
||||
|
||||
@@ -47,7 +47,10 @@ namespace swift::simplugin::msfs2024common
|
||||
double lightBeacon; //!< Is beacon light on?
|
||||
double lightNav; //!< Is nav light on?
|
||||
double lightLogo; //!< Is logo light on?
|
||||
// 18
|
||||
double lightRecognition;
|
||||
double lightCabin; //!< Is cabin light on?
|
||||
double lightWing; //!< Is wing light on?
|
||||
// 21
|
||||
double transponderCode; //!< Transponder Code
|
||||
double com1ActiveMHz; //!< COM1 active frequency
|
||||
double com2ActiveMHz; //!< COM2 active frequency
|
||||
@@ -60,26 +63,28 @@ namespace swift::simplugin::msfs2024common
|
||||
double comTest2; //!< COM2 test
|
||||
double comStatus1; //!< COM1 status
|
||||
double comStatus2; //!< COM2 status
|
||||
// 30
|
||||
// 33
|
||||
double flapsHandlePosition; //!< Flaps handle position in percent
|
||||
double spoilersHandlePosition; //!< Spoilers out? (flag)
|
||||
double gearHandlePosition; //!< Gear handle position (flag)
|
||||
// 33
|
||||
// 36
|
||||
double numberOfEngines; //!< Number of engines
|
||||
double engine1Combustion; //!< Engine 1 combustion flag
|
||||
double engine2Combustion; //!< Engine 2 combustion flag
|
||||
double engine3Combustion; //!< Engine 3 combustion flag
|
||||
double engine4Combustion; //!< Engine 4 combustion flag
|
||||
// 38
|
||||
double engine5Combustion; //!< Engine 5 combustion flag
|
||||
double engine6Combustion; //!< Engine 6 combustion flag
|
||||
// 43
|
||||
double velocityWorldX; //!< Velocity World X
|
||||
double velocityWorldY; //!< Velocity World Y
|
||||
double velocityWorldZ; //!< Velocity World Z
|
||||
double rotationVelocityBodyX; //!< Rotation Velocity Body X
|
||||
double rotationVelocityBodyY; //!< Rotation Velocity Body Y
|
||||
double rotationVelocityBodyZ; //!< Rotation Velocity Body Z
|
||||
// 44
|
||||
// 49
|
||||
double altitudeCalibratedFt; //!< Altitude without temperature effect (ft, FS2020)
|
||||
// 45
|
||||
// 50
|
||||
};
|
||||
|
||||
//! Data struct of aircraft position
|
||||
@@ -159,6 +164,8 @@ namespace swift::simplugin::msfs2024common
|
||||
double engine2Combustion; //!< Engine 2 combustion flag
|
||||
double engine3Combustion; //!< Engine 3 combustion flag
|
||||
double engine4Combustion; //!< Engine 4 combustion flag
|
||||
double engine5Combustion; //!< Engine 5 combustion flag
|
||||
double engine6Combustion; //!< Engine 6 combustion flag
|
||||
|
||||
//! Ctor
|
||||
DataDefinitionRemoteAircraftPartsWithoutLights();
|
||||
@@ -199,7 +206,7 @@ namespace swift::simplugin::msfs2024common
|
||||
double lightLogo; //!< Is logo light on?
|
||||
double lightRecognition; //!< Is recognition light on
|
||||
double lightCabin; //!< Is cabin light on
|
||||
|
||||
double lightWing; //!< Is cabin light on
|
||||
//! Convert to lights
|
||||
swift::misc::aviation::CAircraftLights toLights() const;
|
||||
};
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace swift::simplugin::msfs2024
|
||||
IClientProvider *clientProvider, QObject *parent)
|
||||
: CSimulatorMsfs2024(info, ownAircraftProvider, remoteAircraftProvider, clientProvider, parent)
|
||||
{
|
||||
this->setDefaultModel({ "A320neo V2", CAircraftModel::TypeModelMatchingDefaultModel,
|
||||
this->setDefaultModel({ "A320NEO V2", CAircraftModel::TypeModelMatchingDefaultModel,
|
||||
"Airbus A320 default model", CAircraftIcaoCode("A320", "L2J") });
|
||||
}
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
#include "misc/simulation/fscommon/aircraftcfgparser.h"
|
||||
#include "misc/simulation/fscommon/bcdconversions.h"
|
||||
#include "misc/simulation/fscommon/fscommonutil.h"
|
||||
#include "misc/simulation/fsx/simconnectutilities.h"
|
||||
#include "misc/simulation/interpolation/interpolatormulti.h"
|
||||
#include "misc/simulation/msfs2024/simconnectutilities.h"
|
||||
#include "misc/simulation/settings/simulatorsettings.h"
|
||||
#include "misc/simulation/simulatorplugininfo.h"
|
||||
#include "misc/statusmessagelist.h"
|
||||
@@ -56,8 +56,7 @@ using namespace swift::misc::math;
|
||||
using namespace swift::misc::simulation;
|
||||
using namespace swift::misc::simulation::data;
|
||||
using namespace swift::misc::simulation::fscommon;
|
||||
using namespace swift::misc::simulation::fsx;
|
||||
// using namespace swift::misc::simulation::msfs2024;
|
||||
using namespace swift::misc::simulation::msfs2024;
|
||||
using namespace swift::misc::simulation::settings;
|
||||
using namespace swift::core;
|
||||
using namespace swift::core::db;
|
||||
@@ -362,7 +361,6 @@ namespace swift::simplugin::msfs2024common
|
||||
sSimmobjectLoadedState.bLoadStarted = true;
|
||||
CLogMessage(this).info(u"Start loading SimObjects and liverys from simulator");
|
||||
|
||||
// TODO TZ a message should be displayed here because the gui freezes during loading large amounts of data
|
||||
const CStatusMessage m = CStatusMessage(this, CStatusMessage::SeverityInfo,
|
||||
u"Start loading SimObjects and liverys from simulator");
|
||||
}
|
||||
@@ -399,9 +397,6 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
void CSimulatorMsfs2024::setSimObjectAndLiveries()
|
||||
{
|
||||
// TODO TZ a message should be displayed here because the gui freezes during loading
|
||||
// better: move to the background (e.g., use CWorker::fromTask(...)), avoid GUI freeze.
|
||||
|
||||
CLogMessage(this).info(u"%1 SimObjects and Liveries in vSimObjectsAndLiveries")
|
||||
<< vSimObjectsAndLiveries.size();
|
||||
|
||||
@@ -410,7 +405,7 @@ namespace swift::simplugin::msfs2024common
|
||||
return QVariant(); // void-Result
|
||||
});
|
||||
|
||||
// TODO TZ where to place this message better?
|
||||
// TODO TZ need help: Where can a message be placed indicating that loading is complete?
|
||||
worker->then(this, [=] { CLogMessage(this).info(u"SimObjects and Liveries in vSimObjectsAndLiveries ready"); });
|
||||
}
|
||||
|
||||
@@ -567,7 +562,7 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
CLogMessage(this).info(u"%1 SimObjects and Liveries in DbModelList") << NewSet.size();
|
||||
|
||||
// TODO TZ only for debugging
|
||||
// TODO TZ can used only for debugging
|
||||
// int cstoremodels = writeSimObjectsAndLiveriesToFile(NewSet);
|
||||
}
|
||||
}
|
||||
@@ -676,17 +671,18 @@ namespace swift::simplugin::msfs2024common
|
||||
this->sendRemoteAircraftPartsToSimulator(simObject, parts);
|
||||
u++;
|
||||
}
|
||||
if (!situation.isNull())
|
||||
{
|
||||
SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToFsxPosition(situation, true);
|
||||
const bool traceSendId = this->isTracingSendId();
|
||||
const HRESULT hr = this->logAndTraceSendId(
|
||||
SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSetPosition,
|
||||
static_cast<SIMCONNECT_OBJECT_ID>(simObject.getObjectId()), 0, 0,
|
||||
sizeof(SIMCONNECT_DATA_INITPOSITION), &position),
|
||||
traceSendId, simObject, "Failed to set position", Q_FUNC_INFO, "SimConnect_SetDataOnSimObject");
|
||||
if (hr == S_OK) { u++; }
|
||||
}
|
||||
// TODO TZ check: The function call destroys the configured simulation.
|
||||
// if (!situation.isNull())
|
||||
//{
|
||||
// SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToPosition(situation, true);
|
||||
// const bool traceSendId = this->isTracingSendId();
|
||||
// const HRESULT hr = this->logAndTraceSendId(
|
||||
// SimConnect_SetDataOnSimObject(m_hSimConnect, CSimConnectDefinitions::DataRemoteAircraftSetPosition,
|
||||
// static_cast<SIMCONNECT_OBJECT_ID>(simObject.getObjectId()), 0, 0,
|
||||
// sizeof(SIMCONNECT_DATA_INITPOSITION), &position),
|
||||
// traceSendId, simObject, "Failed to set position", Q_FUNC_INFO, "SimConnect_SetDataOnSimObject");
|
||||
// if (hr == S_OK) { u++; }
|
||||
//}
|
||||
return u > 0;
|
||||
}
|
||||
|
||||
@@ -860,12 +856,14 @@ namespace swift::simplugin::msfs2024common
|
||||
return m_simConnectObjects.removeByOtherSimObject(trace.simObject);
|
||||
}
|
||||
|
||||
// TODO TZ check if nessesary in MSFS2024
|
||||
void CSimulatorMsfs2024::removeCamera(CSimConnectObject &simObject)
|
||||
{
|
||||
// not in FSX
|
||||
Q_UNUSED(simObject)
|
||||
}
|
||||
|
||||
// TODO TZ check if nessesary in MSFS2024
|
||||
void CSimulatorMsfs2024::removeObserver(CSimConnectObject &simObject)
|
||||
{
|
||||
// not in FSX
|
||||
@@ -883,7 +881,7 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
static const QString format("hh:mm:ss.zzz");
|
||||
const QString untilString = QDateTime::fromMSecsSinceEpoch(traceUntil).toString(format);
|
||||
CLogMessage(this).info(u"Triggered FSX/P3D auto trace until %1") << untilString;
|
||||
CLogMessage(this).info(u"Triggered MSFS2024 auto trace until %1") << untilString;
|
||||
const QPointer<CSimulatorMsfs2024> myself(this);
|
||||
QTimer::singleShot(traceTimeMs * 1.2, this, [=] {
|
||||
// triggered by mself (ts check), otherwise ignore
|
||||
@@ -914,13 +912,13 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
if (simulatorOwnAircraft.pitchDeg < -90.0 || simulatorOwnAircraft.pitchDeg >= 90.0)
|
||||
{
|
||||
CLogMessage(this).warning(u"FSX: Pitch value (own aircraft) out of limits: %1")
|
||||
CLogMessage(this).warning(u"MSFS2024: Pitch value (own aircraft) out of limits: %1")
|
||||
<< simulatorOwnAircraft.pitchDeg;
|
||||
}
|
||||
CAircraftSituation aircraftSituation;
|
||||
aircraftSituation.setMSecsSinceEpoch(ts);
|
||||
aircraftSituation.setPosition(position);
|
||||
// MSFS has inverted pitch and bank angles
|
||||
// MSFS2024 has inverted pitch and bank angles
|
||||
aircraftSituation.setPitch(CAngle(-simulatorOwnAircraft.pitchDeg, CAngleUnit::deg()));
|
||||
aircraftSituation.setBank(CAngle(-simulatorOwnAircraft.bankDeg, CAngleUnit::deg()));
|
||||
aircraftSituation.setHeading(CHeading(simulatorOwnAircraft.trueHeadingDeg, CHeading::True, CAngleUnit::deg()));
|
||||
@@ -946,13 +944,18 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
const CAircraftLights lights(dtb(simulatorOwnAircraft.lightStrobe), dtb(simulatorOwnAircraft.lightLanding),
|
||||
dtb(simulatorOwnAircraft.lightTaxi), dtb(simulatorOwnAircraft.lightBeacon),
|
||||
dtb(simulatorOwnAircraft.lightNav), dtb(simulatorOwnAircraft.lightLogo));
|
||||
dtb(simulatorOwnAircraft.lightNav), dtb(simulatorOwnAircraft.lightLogo),
|
||||
dtb(simulatorOwnAircraft.lightRecognition), dtb(simulatorOwnAircraft.lightCabin),
|
||||
dtb(simulatorOwnAircraft.lightWing)
|
||||
|
||||
);
|
||||
|
||||
CAircraftEngineList engines;
|
||||
const QList<bool> helperList { dtb(simulatorOwnAircraft.engine1Combustion),
|
||||
dtb(simulatorOwnAircraft.engine2Combustion),
|
||||
dtb(simulatorOwnAircraft.engine3Combustion),
|
||||
dtb(simulatorOwnAircraft.engine4Combustion) };
|
||||
const QList<bool> helperList {
|
||||
dtb(simulatorOwnAircraft.engine1Combustion), dtb(simulatorOwnAircraft.engine2Combustion),
|
||||
dtb(simulatorOwnAircraft.engine3Combustion), dtb(simulatorOwnAircraft.engine4Combustion),
|
||||
dtb(simulatorOwnAircraft.engine5Combustion), dtb(simulatorOwnAircraft.engine6Combustion)
|
||||
};
|
||||
|
||||
for (int index = 0; index < simulatorOwnAircraft.numberOfEngines; ++index)
|
||||
{
|
||||
@@ -1057,7 +1060,7 @@ namespace swift::simplugin::msfs2024common
|
||||
}
|
||||
else { --m_skipCockpitUpdateCycles; }
|
||||
|
||||
// TODO TZ check if we need to update terrain probes
|
||||
// TODO TZ check this entire function for msfs2024
|
||||
// slower updates
|
||||
if (m_ownAircraftUpdateCycles % 10 == 0)
|
||||
{
|
||||
@@ -1165,7 +1168,6 @@ namespace swift::simplugin::msfs2024common
|
||||
CSimConnectObject &so = m_simConnectObjects[cs];
|
||||
if (so.isPendingRemoved()) { return; }
|
||||
|
||||
// TODO TZ verify model and livery
|
||||
QString combinedModelstring =
|
||||
QString::fromUtf8(remoteAircraftModel.title) + " " + QString::fromUtf8(remoteAircraftModel.livery);
|
||||
const QString modelString(combinedModelstring.trimmed());
|
||||
@@ -1943,7 +1945,7 @@ namespace swift::simplugin::msfs2024common
|
||||
// TODO TZ handle underflow properly
|
||||
CStatusMessage underflowStatus;
|
||||
const SIMCONNECT_DATA_INITPOSITION initialPosition =
|
||||
CSimulatorMsfs2024::aircraftSituationToFsxPosition(initialSituation, sendGround, true, &underflowStatus);
|
||||
CSimulatorMsfs2024::aircraftSituationToPosition(initialSituation, sendGround, true, &underflowStatus);
|
||||
|
||||
QString modelString(newRemoteAircraft.getShortModelString());
|
||||
const QString modelLiveryString(newRemoteAircraft.getLiveryString());
|
||||
@@ -1968,12 +1970,12 @@ namespace swift::simplugin::msfs2024common
|
||||
correspondingSimObject.getType() == CSimConnectObject::AircraftNonAtc)
|
||||
{
|
||||
CStatusMessage(this).warning(
|
||||
u"Model '%1' for '%2' failed %1 time(s) before, using AICreateSimulatedObject now")
|
||||
<< newRemoteAircraft.getModelString() << callsign.toQString();
|
||||
u"Model '%1' for '%2' failed %3 time(s) before, using SimConnect_AICreateSimulatedObject_EX1 now")
|
||||
<< newRemoteAircraft.getModelString() << callsign.toQString()
|
||||
<< correspondingSimObject.getAddingExceptions();
|
||||
|
||||
hr = SimConnect_AICreateNonATCAircraft_EX1(m_hSimConnect, modelStringBa.constData(),
|
||||
modelLiveryBa.constData(), csBa.constData(), initialPosition,
|
||||
requestId);
|
||||
hr = SimConnect_AICreateSimulatedObject_EX1(m_hSimConnect, modelStringBa.constData(),
|
||||
modelLiveryBa.constData(), initialPosition, requestId);
|
||||
|
||||
type = CSimConnectObject::AircraftSimulatedObject;
|
||||
}
|
||||
@@ -2121,7 +2123,7 @@ namespace swift::simplugin::msfs2024common
|
||||
hr += SimConnect_SubscribeToSystemEvent(m_hSimConnect, SystemEventFlightLoaded, "FlightLoaded");
|
||||
if (isFailure(hr))
|
||||
{
|
||||
CLogMessage(this).error(u"FSX plugin error: %1") << "SimConnect_SubscribeToSystemEvent failed";
|
||||
CLogMessage(this).error(u"MSFS2024 plugin error: %1") << "SimConnect_SubscribeToSystemEvent failed";
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -2147,31 +2149,34 @@ namespace swift::simplugin::msfs2024common
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventSetTimeZuluHours, "ZULU_HOURS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventSetTimeZuluMinutes, "ZULU_MINUTES_SET");
|
||||
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandingLightsOff, "LANDING_LIGHTS_OFF");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandinglightsOn, "LANDING_LIGHTS_ON");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandingLightsOff, "LANDING_LIGHTS_OFF");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandinglightsOn, "LANDING_LIGHTS_ON");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandingLightsSet, "LANDING_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandingLightsToggle, "LANDING_LIGHTS_TOGGLE");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsOff, "PANEL_LIGHTS_OFF");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsOn, "PANEL_LIGHTS_ON");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsSet, "PANEL_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesOff, "STROBES_OFF");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesOn, "STROBES_ON");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesSet, "STROBES_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesToggle, "STROBES_TOGGLE");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleBeaconLights, "TOGGLE_BEACON_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleCabinLights, "TOGGLE_CABIN_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleLogoLights, "TOGGLE_LOGO_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleNavLights, "TOGGLE_NAV_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleRecognitionLights,
|
||||
"TOGGLE_RECOGNITION_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleTaxiLights, "TOGGLE_TAXI_LIGHTS");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventToggleWingLights, "TOGGLE_WING_LIGHTS");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLandingLightsToggle, "LANDING_LIGHTS_TOGGLE");
|
||||
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsOff, "PANEL_LIGHTS_OFF");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsOn, "PANEL_LIGHTS_ON");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventPanelLightsSet, "PANEL_LIGHTS_SET");
|
||||
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesOff, "STROBES_OFF");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesOn, "STROBES_ON");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesSet, "STROBES_SET");
|
||||
// hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventStrobesToggle, "STROBES_TOGGLE");
|
||||
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventBeaconLightsSet, "BEACON_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventCabinLightsSet, "CABIN_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventLogoLightsSet, "LOGO_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventNavLightsSet, "NAV_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventRecognitionLightsSet, "RECOGNITION_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventTaxiLightsSet, "TAXI_LIGHTS_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventWingLightsSet, "WING_LIGHTS_SET");
|
||||
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventGearSet, "GEAR_SET");
|
||||
hr += SimConnect_MapClientEventToSimEvent(m_hSimConnect, EventFlapsSet, "FLAPS_SET");
|
||||
|
||||
if (isFailure(hr))
|
||||
{
|
||||
CLogMessage(this).error(u"FSX plugin error: %1") << "SimConnect_MapClientEventToSimEvent failed";
|
||||
CLogMessage(this).error(u"MSFS2024 plugin error: %1") << "SimConnect_MapClientEventToSimEvent failed";
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -2201,7 +2206,7 @@ namespace swift::simplugin::msfs2024common
|
||||
HRESULT hr = this->initEvents();
|
||||
if (isFailure(hr))
|
||||
{
|
||||
CLogMessage(this).error(u"FSX plugin: initEvents failed");
|
||||
CLogMessage(this).error(u"MSFS2024 plugin: initEvents failed");
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -2209,7 +2214,7 @@ namespace swift::simplugin::msfs2024common
|
||||
hr += this->initDataDefinitionsWhenConnected();
|
||||
if (isFailure(hr))
|
||||
{
|
||||
CLogMessage(this).error(u"FSX plugin: initDataDefinitionsWhenConnected failed");
|
||||
CLogMessage(this).error(u"MSFS2024 plugin: initDataDefinitionsWhenConnected failed");
|
||||
return hr;
|
||||
}
|
||||
|
||||
@@ -2218,7 +2223,7 @@ namespace swift::simplugin::msfs2024common
|
||||
|
||||
void CSimulatorMsfs2024::updateRemoteAircraft()
|
||||
{
|
||||
static_assert(sizeof(DataDefinitionRemoteAircraftPartsWithoutLights) == sizeof(double) * 10,
|
||||
static_assert(sizeof(DataDefinitionRemoteAircraftPartsWithoutLights) == sizeof(double) * 12,
|
||||
"DataDefinitionRemoteAircraftPartsWithoutLights has an incorrect size.");
|
||||
Q_ASSERT_X(CThreadUtils::isInThisThread(this), Q_FUNC_INFO, "thread");
|
||||
|
||||
@@ -2283,7 +2288,7 @@ namespace swift::simplugin::msfs2024common
|
||||
situation.setAltitude({ situation.getAltitude() + m_altitudeDelta * altitudeDeltaWeight,
|
||||
situation.getAltitude().getReferenceDatum() });
|
||||
|
||||
SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToFsxPosition(situation, sendGround);
|
||||
SIMCONNECT_DATA_INITPOSITION position = this->aircraftSituationToPosition(situation, sendGround);
|
||||
const HRESULT hr = this->logAndTraceSendId(
|
||||
SimConnect_SetDataOnSimObject(m_hSimConnect,
|
||||
CSimConnectDefinitions::DataRemoteAircraftSetPosition,
|
||||
@@ -2371,28 +2376,81 @@ namespace swift::simplugin::msfs2024common
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed so set flaps", Q_FUNC_INFO, "SimConnect_TransmitClientEvent::EventFlapsSet");
|
||||
|
||||
// lights we can set directly
|
||||
const HRESULT hr3 = this->logAndTraceSendId(
|
||||
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventGearSet, parts.isFixedGearDown() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed so set gears", Q_FUNC_INFO, "SimConnect_TransmitClientEvent::EventGearSet");
|
||||
|
||||
const CAircraftLights lightsIsState = simObject.getCurrentLightsInSimulator();
|
||||
if (lights == lightsIsState) { return isOk(hr1, hr2, hr3); }
|
||||
|
||||
// lights we can set directly
|
||||
const HRESULT hr4 = this->logAndTraceSendId(
|
||||
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventLandingLightsSet,
|
||||
lights.isLandingOn() ? 1.0 : 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed so set landing lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventLandingLightsSet");
|
||||
|
||||
const HRESULT hr4 =
|
||||
const HRESULT hr5 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventStrobesSet, lights.isStrobeOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set strobe lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventStrobesSet");
|
||||
|
||||
// lights we need to toggle
|
||||
// (potential risk with quickly changing values that we accidentally toggle back, also we need the light
|
||||
// state before we can toggle)
|
||||
this->sendToggledLightsToSimulator(simObject, lights);
|
||||
const HRESULT hr6 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventTaxiLightsSet, lights.isTaxiOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set taxi lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventTaxiLightsSet");
|
||||
|
||||
const HRESULT hr7 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventNavLightsSet, lights.isNavOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set nav lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventNavLightsSet");
|
||||
|
||||
const HRESULT hr8 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventLogoLightsSet, lights.isLogoOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set logo lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventLogoLightsSet");
|
||||
|
||||
const HRESULT hr9 = this->logAndTraceSendId(
|
||||
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventRecognitionLightsSet,
|
||||
lights.isRecognitionOn() ? 1.0 : 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set recognitione lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventRecognitionLightsSet");
|
||||
|
||||
const HRESULT hr10 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventCabinLightsSet, lights.isCabinOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set cabin lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventCabinLightsSet");
|
||||
|
||||
const HRESULT hr11 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventBeaconLightsSet, lights.isBeaconOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set beacon lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventBeaconLightsSet");
|
||||
|
||||
const HRESULT hr12 =
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(
|
||||
m_hSimConnect, objectId, EventWingLightsSet, lights.isWingOn() ? 1.0 : 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
traceId, simObject, "Failed to set wing lights", Q_FUNC_INFO,
|
||||
"SimConnect_TransmitClientEvent::EventWingLightsSet");
|
||||
|
||||
// done
|
||||
return isOk(hr1, hr2, hr3, hr4);
|
||||
return isOk(hr1, hr2, hr3, (hr4 & hr5 & hr6 & hr7 & hr8 & hr9 & hr10 & hr11 & hr12));
|
||||
}
|
||||
|
||||
bool CSimulatorMsfs2024::sendRemoteAircraftAtcDataToSimulator(const CSimConnectObject &simObject)
|
||||
@@ -2423,103 +2481,106 @@ namespace swift::simplugin::msfs2024common
|
||||
return isOk(hr);
|
||||
}
|
||||
|
||||
void CSimulatorMsfs2024::sendToggledLightsToSimulator(const CSimConnectObject &simObj,
|
||||
const CAircraftLights &lightsWanted, bool force)
|
||||
{
|
||||
if (!simObj.isReadyToSend()) { return; } // stale
|
||||
// TODO TZ under investigation, toggling lights seems to be unreliable. The settings mentioned above can be used
|
||||
// directly. void CSimulatorMsfs2024::sendToggledLightsToSimulator(const CSimConnectObject &simObj,
|
||||
// const CAircraftLights &lightsWanted, bool force)
|
||||
//{
|
||||
// if (!simObj.isReadyToSend()) { return; } // stale
|
||||
|
||||
const CAircraftLights lightsIsState = simObj.getCurrentLightsInSimulator();
|
||||
if (lightsWanted == lightsIsState) { return; }
|
||||
if (!force && lightsWanted == simObj.getLightsAsSent()) { return; }
|
||||
const CCallsign callsign(simObj.getCallsign());
|
||||
// const CAircraftLights lightsIsState = simObj.getCurrentLightsInSimulator();
|
||||
// if (lightsWanted == lightsIsState) { return; }
|
||||
// if (!force && lightsWanted == simObj.getLightsAsSent()) { return; }
|
||||
// const CCallsign callsign(simObj.getCallsign());
|
||||
|
||||
// Update data
|
||||
if (m_simConnectObjects.contains(callsign))
|
||||
{
|
||||
CSimConnectObject &simObjToUpdate = m_simConnectObjects[callsign];
|
||||
simObjToUpdate.setLightsAsSent(lightsWanted);
|
||||
}
|
||||
// // Update data
|
||||
// if (m_simConnectObjects.contains(callsign))
|
||||
// {
|
||||
// CSimConnectObject &simObjToUpdate = m_simConnectObjects[callsign];
|
||||
// simObjToUpdate.setLightsAsSent(lightsWanted);
|
||||
// }
|
||||
|
||||
// state available, then I can toggle
|
||||
if (!lightsIsState.isNull())
|
||||
{
|
||||
const DWORD objectId = simObj.getObjectId();
|
||||
const bool trace = this->isTracingSendId();
|
||||
// // state available, then I can toggle
|
||||
// if (!lightsIsState.isNull())
|
||||
// {
|
||||
// const DWORD objectId = simObj.getObjectId();
|
||||
// const bool trace = this->isTracingSendId();
|
||||
|
||||
if (lightsWanted.isTaxiOn() != lightsIsState.isTaxiOn())
|
||||
{
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleTaxiLights,
|
||||
0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle taxi lights", Q_FUNC_INFO, "EventToggleTaxiLights");
|
||||
}
|
||||
if (lightsWanted.isNavOn() != lightsIsState.isNavOn())
|
||||
{
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleNavLights,
|
||||
0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle nav.lights", Q_FUNC_INFO, "EventToggleNavLights");
|
||||
}
|
||||
if (lightsWanted.isBeaconOn() != lightsIsState.isBeaconOn())
|
||||
{
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleBeaconLights,
|
||||
0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle becon lights", Q_FUNC_INFO, "EventToggleBeaconLights");
|
||||
}
|
||||
if (lightsWanted.isLogoOn() != lightsIsState.isLogoOn())
|
||||
{
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleLogoLights,
|
||||
0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle logo lights", Q_FUNC_INFO, "EventToggleLogoLights");
|
||||
}
|
||||
if (lightsWanted.isRecognitionOn() != lightsIsState.isRecognitionOn())
|
||||
{
|
||||
this->logAndTraceSendId(
|
||||
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleRecognitionLights, 0.0,
|
||||
SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle recognition lights", Q_FUNC_INFO, "EventToggleRecognitionLights");
|
||||
}
|
||||
if (lightsWanted.isCabinOn() != lightsIsState.isCabinOn())
|
||||
{
|
||||
this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleCabinLights,
|
||||
0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
trace, simObj, "Toggle cabin lights", Q_FUNC_INFO, "EventToggleCabinLights");
|
||||
}
|
||||
return;
|
||||
}
|
||||
// if (lightsWanted.isTaxiOn() != lightsIsState.isTaxiOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleTaxiLights,
|
||||
// 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle taxi lights", Q_FUNC_INFO, "EventToggleTaxiLights");
|
||||
// }
|
||||
// if (lightsWanted.isNavOn() != lightsIsState.isNavOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleNavLights,
|
||||
// 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle nav.lights", Q_FUNC_INFO, "EventToggleNavLights");
|
||||
// }
|
||||
// if (lightsWanted.isBeaconOn() != lightsIsState.isBeaconOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId,
|
||||
// EventToggleBeaconLights,
|
||||
// 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle becon lights", Q_FUNC_INFO, "EventToggleBeaconLights");
|
||||
// }
|
||||
// if (lightsWanted.isLogoOn() != lightsIsState.isLogoOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleLogoLights,
|
||||
// 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle logo lights", Q_FUNC_INFO, "EventToggleLogoLights");
|
||||
// }
|
||||
// if (lightsWanted.isRecognitionOn() != lightsIsState.isRecognitionOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(
|
||||
// SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventToggleRecognitionLights, 0.0,
|
||||
// SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle recognition lights", Q_FUNC_INFO, "EventToggleRecognitionLights");
|
||||
// }
|
||||
// if (lightsWanted.isCabinOn() != lightsIsState.isCabinOn())
|
||||
// {
|
||||
// this->logAndTraceSendId(SimConnect_TransmitClientEvent(m_hSimConnect, objectId,
|
||||
// EventToggleCabinLights,
|
||||
// 0.0, SIMCONNECT_GROUP_PRIORITY_HIGHEST,
|
||||
// SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||
// trace, simObj, "Toggle cabin lights", Q_FUNC_INFO, "EventToggleCabinLights");
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
// missing lights info from simulator so far
|
||||
if (this->showDebugLogMessage())
|
||||
{
|
||||
this->debugLogMessage(Q_FUNC_INFO, QStringLiteral("Missing light state in simulator for '%1', model '%2'")
|
||||
.arg(callsign.asString(), simObj.getAircraftModelString()));
|
||||
}
|
||||
// // missing lights info from simulator so far
|
||||
// if (this->showDebugLogMessage())
|
||||
// {
|
||||
// this->debugLogMessage(Q_FUNC_INFO, QStringLiteral("Missing light state in simulator for '%1', model '%2'")
|
||||
// .arg(callsign.asString(), simObj.getAircraftModelString()));
|
||||
// }
|
||||
|
||||
const QPointer<CSimulatorMsfs2024> myself(this);
|
||||
QTimer::singleShot(DeferResendingLights, this, [=] {
|
||||
if (!myself) { return; }
|
||||
if (!m_simConnectObjects.contains(callsign)) { return; }
|
||||
const CSimConnectObject currentSimObject = m_simConnectObjects[callsign];
|
||||
if (!currentSimObject.isReadyToSend()) { return; } // stale
|
||||
if (lightsWanted != currentSimObject.getLightsAsSent())
|
||||
{
|
||||
return;
|
||||
} // changed in between, so another call sendToggledLightsToSimulator is pending
|
||||
if (this->showDebugLogMessage())
|
||||
{
|
||||
this->debugLogMessage(Q_FUNC_INFO, QStringLiteral("Resending light state for '%1', model '%2'")
|
||||
.arg(callsign.asString(), simObj.getAircraftModelString()));
|
||||
}
|
||||
this->sendToggledLightsToSimulator(currentSimObject, lightsWanted, true);
|
||||
});
|
||||
}
|
||||
// const QPointer<CSimulatorMsfs2024> myself(this);
|
||||
// QTimer::singleShot(DeferResendingLights, this, [=] {
|
||||
// if (!myself) { return; }
|
||||
// if (!m_simConnectObjects.contains(callsign)) { return; }
|
||||
// const CSimConnectObject currentSimObject = m_simConnectObjects[callsign];
|
||||
// if (!currentSimObject.isReadyToSend()) { return; } // stale
|
||||
// if (lightsWanted != currentSimObject.getLightsAsSent())
|
||||
// {
|
||||
// return;
|
||||
// } // changed in between, so another call sendToggledLightsToSimulator is pending
|
||||
// if (this->showDebugLogMessage())
|
||||
// {
|
||||
// this->debugLogMessage(Q_FUNC_INFO, QStringLiteral("Resending light state for '%1', model '%2'")
|
||||
// .arg(callsign.asString(), simObj.getAircraftModelString()));
|
||||
// }
|
||||
// this->sendToggledLightsToSimulator(currentSimObject, lightsWanted, true);
|
||||
// });
|
||||
//}
|
||||
|
||||
SIMCONNECT_DATA_INITPOSITION
|
||||
CSimulatorMsfs2024::aircraftSituationToFsxPosition(const CAircraftSituation &situation, bool sendGnd,
|
||||
CSimulatorMsfs2024::aircraftSituationToPosition(const CAircraftSituation &situation, bool sendGnd,
|
||||
bool forceUnderflowDetection, CStatusMessage *details)
|
||||
{
|
||||
Q_ASSERT_X(!situation.isGeodeticHeightNull(), Q_FUNC_INFO, "Missing height (altitude)");
|
||||
@@ -2583,7 +2644,7 @@ namespace swift::simplugin::msfs2024common
|
||||
// crosscheck
|
||||
if (CBuildConfig::isLocalDeveloperDebugBuild())
|
||||
{
|
||||
SWIFT_VERIFY_X(isValidFsxPosition(position), Q_FUNC_INFO, "Invalid FSX pos.");
|
||||
SWIFT_VERIFY_X(isValidFsxPosition(position), Q_FUNC_INFO, "Invalid MSFS2024 pos.");
|
||||
}
|
||||
|
||||
return position;
|
||||
@@ -3091,24 +3152,7 @@ namespace swift::simplugin::msfs2024common
|
||||
const QString connectedSimName = m_simulatorName.toLower().trimmed();
|
||||
|
||||
if (connectedSimName.isEmpty()) { return false; }
|
||||
if (pluginSim.isP3D())
|
||||
{
|
||||
// P3D drivers only works with P3D
|
||||
return connectedSimName.contains("lockheed") || connectedSimName.contains("martin") ||
|
||||
connectedSimName.contains("p3d") || connectedSimName.contains("prepar");
|
||||
}
|
||||
else if (pluginSim.isFSX())
|
||||
{
|
||||
// FSX drivers only works with FSX
|
||||
return connectedSimName.contains("fsx") || connectedSimName.contains("microsoft") ||
|
||||
connectedSimName.contains("simulator x");
|
||||
}
|
||||
else if (pluginSim.isMSFS())
|
||||
{
|
||||
// MSFS 2020 drivers only works with MSFS
|
||||
return connectedSimName.contains("kittyhawk");
|
||||
}
|
||||
else if (pluginSim.isMSFS2024())
|
||||
if (pluginSim.isMSFS2024())
|
||||
{
|
||||
// MSFS2024 drivers only works with MSFS2024
|
||||
return connectedSimName.contains("sunrise");
|
||||
|
||||
@@ -68,26 +68,27 @@ namespace swift::simplugin::msfs2024common
|
||||
EventSetTimeZuluHours,
|
||||
EventSetTimeZuluMinutes,
|
||||
// ------------ lights -------------
|
||||
EventLandingLightsOff,
|
||||
EventLandinglightsOn,
|
||||
// EventLandingLightsOff,
|
||||
// EventLandinglightsOn,
|
||||
EventLandingLightsSet,
|
||||
EventLandingLightsToggle,
|
||||
EventPanelLightsOff,
|
||||
EventPanelLightsOn,
|
||||
// EventLandingLightsToggle,
|
||||
// EventPanelLightsOff,
|
||||
// EventPanelLightsOn,
|
||||
EventPanelLightsSet,
|
||||
EventStrobesOff,
|
||||
EventStrobesOn,
|
||||
// EventStrobesOff,
|
||||
// EventStrobesOn,
|
||||
EventStrobesSet,
|
||||
EventStrobesToggle,
|
||||
EventToggleBeaconLights,
|
||||
EventToggleCabinLights,
|
||||
EventToggleLogoLights,
|
||||
EventToggleNavLights,
|
||||
EventToggleRecognitionLights,
|
||||
EventToggleTaxiLights,
|
||||
EventToggleWingLights,
|
||||
// EventStrobesToggle,
|
||||
EventBeaconLightsSet,
|
||||
EventCabinLightsSet,
|
||||
EventLogoLightsSet,
|
||||
EventNavLightsSet,
|
||||
EventRecognitionLightsSet,
|
||||
EventTaxiLightsSet,
|
||||
EventWingLightsSet,
|
||||
// ------------- flaps -------------
|
||||
EventFlapsSet,
|
||||
EventGearSet,
|
||||
// ---------- end marker -----------
|
||||
EventFSXEndMarker
|
||||
};
|
||||
@@ -337,7 +338,7 @@ namespace swift::simplugin::msfs2024common
|
||||
//! Format conversion
|
||||
//! \note must be valid situation
|
||||
static SIMCONNECT_DATA_INITPOSITION
|
||||
aircraftSituationToFsxPosition(const swift::misc::aviation::CAircraftSituation &situation, bool sendGnd = true,
|
||||
aircraftSituationToPosition(const swift::misc::aviation::CAircraftSituation &situation, bool sendGnd = true,
|
||||
bool forceUnderflowDetection = false,
|
||||
swift::misc::CStatusMessage *details = nullptr);
|
||||
|
||||
@@ -474,9 +475,9 @@ namespace swift::simplugin::msfs2024common
|
||||
//! Send lights to simulator (those which have to be toggled)
|
||||
//! \remark challenge here is that I can only sent those value if I have already obtained the current light
|
||||
//! state from simulator \param force send lights even if they appear to be the same
|
||||
void sendToggledLightsToSimulator(const CSimConnectObject &simObject,
|
||||
const swift::misc::aviation::CAircraftLights &lightsWanted,
|
||||
bool force = false);
|
||||
// void sendToggledLightsToSimulator(const CSimConnectObject &simObject,
|
||||
// const swift::misc::aviation::CAircraftLights &lightsWanted,
|
||||
// bool force = false);
|
||||
|
||||
//! Call CSimulatorFsxCommon::updateRemoteAircraftFromSimulator asynchronously
|
||||
//! \remark do not to send SimConnect data in event loop
|
||||
|
||||
@@ -281,7 +281,7 @@ namespace swift::simplugin::msfs2024common
|
||||
{
|
||||
case CSimConnectDefinitions::RequestOwnAircraft:
|
||||
{
|
||||
static_assert(sizeof(DataDefinitionOwnAircraft) == 45 * sizeof(double),
|
||||
static_assert(sizeof(DataDefinitionOwnAircraft) == 50 * sizeof(double),
|
||||
"DataDefinitionOwnAircraft has an incorrect size.");
|
||||
const DataDefinitionOwnAircraft *ownAircaft =
|
||||
reinterpret_cast<const DataDefinitionOwnAircraft *>(&pObjData->dwData);
|
||||
@@ -333,7 +333,7 @@ namespace swift::simplugin::msfs2024common
|
||||
} // model
|
||||
else if (subRequest == CSimConnectDefinitions::SimObjectLights)
|
||||
{
|
||||
static_assert(sizeof(DataDefinitionRemoteAircraftLights) == 8 * sizeof(double),
|
||||
static_assert(sizeof(DataDefinitionRemoteAircraftLights) == 9 * sizeof(double),
|
||||
"DataDefinitionRemoteAircraftLights has an incorrect size.");
|
||||
const DataDefinitionRemoteAircraftLights *remoteAircraftLights =
|
||||
reinterpret_cast<const DataDefinitionRemoteAircraftLights *>(&pObjData->dwData);
|
||||
@@ -374,11 +374,6 @@ namespace swift::simplugin::msfs2024common
|
||||
(SIMCONNECT_RECV_ENUMERATE_SIMOBJECT_AND_LIVERY_LIST *)pData;
|
||||
switch (msg->dwRequestID)
|
||||
{
|
||||
// case CSimConnectDefinitions::REQUEST_ALL:
|
||||
// case CSimConnectDefinitions::REQUEST_USER:
|
||||
// case CSimConnectDefinitions::REQUEST_BOAT:
|
||||
// case CSimConnectDefinitions::REQUEST_GROUND:
|
||||
// case CSimConnectDefinitions::REQUEST_ANIMAL:
|
||||
case CSimConnectDefinitions::REQUEST_AIRPLANE:
|
||||
case CSimConnectDefinitions::REQUEST_HELICOPTER:
|
||||
case CSimConnectDefinitions::REQUEST_HOT_AIR: simulatorMsfs2024->CacheSimObjectAndLiveries(msg); break;
|
||||
|
||||
@@ -23,7 +23,6 @@ CSwiftDataApplication::CSwiftDataApplication()
|
||||
// this->addAudioOptions();
|
||||
}
|
||||
|
||||
// TODO TZ remove commented code after testing
|
||||
CStatusMessageList CSwiftDataApplication::startHookIn()
|
||||
{
|
||||
Q_ASSERT_X(m_parsed, Q_FUNC_INFO, "Not yet parsed cmd line arguments");
|
||||
@@ -33,59 +32,15 @@ CStatusMessageList CSwiftDataApplication::startHookIn()
|
||||
this->isParserOptionSet(m_cmdFacadeMode) ? this->getParserValue(m_cmdFacadeMode) : QString();
|
||||
CoreModes::CoreMode coreMode = CoreModes::stringToCoreMode(coreModeStr);
|
||||
|
||||
//// Valid combination?
|
||||
// if (!coreModeStr.isEmpty())
|
||||
//{
|
||||
// if (coreMode == CoreModes::Standalone && !dBusAddress.isEmpty())
|
||||
// {
|
||||
// const CStatusMessage m =
|
||||
// CStatusMessage(this, CLogCategories::validation()).error(u"Inconsistent pair DBus: '%1' and core:
|
||||
// '%2'")
|
||||
// << dBusAddress << coreModeStr;
|
||||
// return CStatusMessageList(m);
|
||||
// }
|
||||
// }
|
||||
|
||||
//// Implicit configuration
|
||||
CStatusMessageList msgs;
|
||||
// if (!dBusAddress.isEmpty() && coreModeStr.isEmpty())
|
||||
//{
|
||||
// coreMode = CoreModes::Distributed; // default
|
||||
// const CStatusMessage m =
|
||||
// CStatusMessage(this, CLogCategories::validation()).info(u"No DBus address, setting core mode: '%1'")
|
||||
// << CoreModes::coreModeToString(coreMode);
|
||||
// msgs.push_back(m);
|
||||
// }
|
||||
// else if (dBusAddress.isEmpty() && coreMode == CoreModes::Distributed)
|
||||
//{
|
||||
// dBusAddress = CDBusServer::sessionBusAddress(); // a possible default
|
||||
// const CStatusMessage m =
|
||||
// CStatusMessage(this, CLogCategories::validation()).info(u"Setting DBus address to '%1'") << dBusAddress;
|
||||
// msgs.push_back(m);
|
||||
// }
|
||||
|
||||
CCoreFacadeConfig runtimeConfig = coreModeToCoreFacadeConfig(coreMode, dBusAddress);
|
||||
const CStatusMessageList contextMsgs = this->initContextsAndStartCoreFacade(runtimeConfig);
|
||||
// const CStatusMessageList contextMsgs = { CStatusMessage(this, CLogCategories::validation()).info(u"TEST") };
|
||||
msgs.push_back(contextMsgs);
|
||||
return contextMsgs;
|
||||
}
|
||||
|
||||
bool CSwiftDataApplication::parsingHookIn()
|
||||
{
|
||||
// Parse core relevant arguments
|
||||
// const QString dBusAddress(this->getCmdDBusAddressValue());
|
||||
// if (!dBusAddress.isEmpty())
|
||||
//{
|
||||
// // check if reachable
|
||||
// if (!CDBusServer::isDBusAvailable(dBusAddress))
|
||||
// {
|
||||
// this->cmdLineErrorMessage("DBus error", "DBus server at '" + dBusAddress + "' can not be reached");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
return CGuiApplication::parsingHookIn();
|
||||
}
|
||||
bool CSwiftDataApplication::parsingHookIn() { return CGuiApplication::parsingHookIn(); }
|
||||
|
||||
CSwiftDataApplication *CSwiftDataApplication::instance()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user