From ab0c34b16ab4f3016ae9198f8395df0c201ded4a Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 4 May 2018 22:16:06 +0200 Subject: [PATCH] Ref T261, added toFullJson in parts * needed, since the "is full" attribute needs to be added * fixed usage in network vatlib --- src/blackcore/vatsim/networkvatlib.cpp | 2 +- src/blackmisc/aviation/aircraftparts.cpp | 31 +++++++++++++------ src/blackmisc/aviation/aircraftparts.h | 8 +++++ .../simulation/remoteaircraftprovider.cpp | 2 +- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index 8528be953..9e1924ab5 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -679,7 +679,7 @@ namespace BlackCore void CNetworkVatlib::replyToConfigQuery(const CCallsign &callsign) { QJsonObject config = this->getOwnAircraftParts().toJson(); - config.insert("is_full_data", true); + config.insert(CAircraftParts::attributeNameIsFullJson(), true); QString data = QJsonDocument(QJsonObject { { "config", config } }).toJson(QJsonDocument::Compact); data = convertToUnicodeEscaped(data); Vat_SendAircraftConfig(m_net.data(), toFSD(callsign), toFSD(data)); diff --git a/src/blackmisc/aviation/aircraftparts.cpp b/src/blackmisc/aviation/aircraftparts.cpp index aee1568d5..81542dab7 100644 --- a/src/blackmisc/aviation/aircraftparts.cpp +++ b/src/blackmisc/aviation/aircraftparts.cpp @@ -50,8 +50,16 @@ namespace BlackMisc QJsonObject CAircraftParts::toIncrementalJson() const { QJsonObject json = this->toJson(); - json.remove("is_full_data"); - json.insert("is_full_data", QJsonValue(false)); + json.remove(attributeNameIsFullJson()); + json.insert(attributeNameIsFullJson(), QJsonValue(false)); + return json; + } + + QJsonObject CAircraftParts::toFullJson() const + { + QJsonObject json = this->toJson(); + json.remove(attributeNameIsFullJson()); + json.insert(attributeNameIsFullJson(), QJsonValue(true)); return json; } @@ -75,10 +83,9 @@ namespace BlackMisc QString *details = CBuildConfig::isLocalDeveloperDebugBuild() ? &parts.m_guessingDetails : nullptr; const bool vtol = model.isVtol(); - CSpeed guessedLiftOffGs = CSpeed::null(); + CSpeed guessedVRotate = CSpeed::null(); CLength guessedCG = model.getCG(); - model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedLiftOffGs); - // const QChar engineType = model.getAircraftIcaoCode().getEngineTypeChar(); + model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedVRotate); // set some reasonable values const bool isOnGround = situation.isOnGround(); @@ -101,7 +108,7 @@ namespace BlackMisc } } - const CSpeed slowSpeed = guessedLiftOffGs * 0.30; + const CSpeed slowSpeed = guessedVRotate * 0.30; if (situation.getGroundSpeed() < slowSpeed) { if (details) { *details += QStringLiteral("slow speed <") % slowSpeed.valueRoundedWithUnit(1) % QStringLiteral(" on ground"); } @@ -142,7 +149,7 @@ namespace BlackMisc else if (aGroundFt < nearGround2Ft) { if (details) { details->prepend(QStringLiteral("2nd layer: ")); } - const bool gearDown = !isLikelyTakeOffOrClimbing && (situation.getGroundSpeed() < guessedLiftOffGs || isLikelyLanding); + const bool gearDown = !isLikelyTakeOffOrClimbing && (situation.getGroundSpeed() < guessedVRotate || isLikelyLanding); parts.setGearDown(gearDown); parts.setFlapsPercent(10); } @@ -167,9 +174,9 @@ namespace BlackMisc { if (!vtol) { - const bool gearDown = situation.getGroundSpeed() < guessedLiftOffGs; + const bool gearDown = situation.getGroundSpeed() < guessedVRotate; parts.setGearDown(gearDown); - if (details) { *details = QStringLiteral("not on ground elv., gs < ") + guessedLiftOffGs.valueRoundedWithUnit(1); } + if (details) { *details = QStringLiteral("not on ground elv., gs < ") + guessedVRotate.valueRoundedWithUnit(1); } } } } @@ -194,6 +201,12 @@ namespace BlackMisc return notset; } + const QString &CAircraftParts::attributeNameIsFullJson() + { + static const QString a("is_full_data"); + return a; + } + CVariant CAircraftParts::propertyByIndex(const BlackMisc::CPropertyIndex &index) const { if (index.isMyself()) { return CVariant::from(*this); } diff --git a/src/blackmisc/aviation/aircraftparts.h b/src/blackmisc/aviation/aircraftparts.h index 73232f1bb..0d3f02af3 100644 --- a/src/blackmisc/aviation/aircraftparts.h +++ b/src/blackmisc/aviation/aircraftparts.h @@ -158,8 +158,13 @@ namespace BlackMisc QString convertToQString(bool i18n = false) const; //! Incremental JSON object + //! \remark same as toJson, but sets \c is_full_data to \c false QJsonObject toIncrementalJson() const; + //! Full JSON Object + //! \remark same as toJson, but sets \c is_full_data to \c true + QJsonObject toFullJson() const; + //! NULL parts object? bool isNull() const; @@ -172,6 +177,9 @@ namespace BlackMisc //! Convert to QString static const QString &partsDetailsToString(PartsDetails details); + //! Attribute name + static const QString &attributeNameIsFullJson(); + private: CAircraftLights m_lights; CAircraftEngineList m_engines; diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index 929874e02..a21fa60ee 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -271,7 +271,7 @@ namespace BlackMisc void CRemoteAircraftProvider::storeAircraftParts(const CCallsign &callsign, const QJsonObject &jsonObject, int currentOffset) { const CSimulatedAircraft remoteAircraft(this->getAircraftInRangeForCallsign(callsign)); - const bool isFull = jsonObject.value("is_full_data").toBool(); + const bool isFull = jsonObject.value(CAircraftParts::attributeNameIsFullJson()).toBool(); // If we are not yet synchronized, we throw away any incremental packet if (!remoteAircraft.hasValidCallsign()) { return; }