Ref T261, added toFullJson in parts

* needed, since the "is full" attribute needs to be added
* fixed usage in network vatlib
This commit is contained in:
Klaus Basan
2018-05-04 22:16:06 +02:00
committed by Roland Winklmeier
parent 5bf21c2937
commit ab0c34b16a
4 changed files with 32 additions and 11 deletions

View File

@@ -679,7 +679,7 @@ namespace BlackCore
void CNetworkVatlib::replyToConfigQuery(const CCallsign &callsign) void CNetworkVatlib::replyToConfigQuery(const CCallsign &callsign)
{ {
QJsonObject config = this->getOwnAircraftParts().toJson(); 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); QString data = QJsonDocument(QJsonObject { { "config", config } }).toJson(QJsonDocument::Compact);
data = convertToUnicodeEscaped(data); data = convertToUnicodeEscaped(data);
Vat_SendAircraftConfig(m_net.data(), toFSD(callsign), toFSD(data)); Vat_SendAircraftConfig(m_net.data(), toFSD(callsign), toFSD(data));

View File

@@ -50,8 +50,16 @@ namespace BlackMisc
QJsonObject CAircraftParts::toIncrementalJson() const QJsonObject CAircraftParts::toIncrementalJson() const
{ {
QJsonObject json = this->toJson(); QJsonObject json = this->toJson();
json.remove("is_full_data"); json.remove(attributeNameIsFullJson());
json.insert("is_full_data", QJsonValue(false)); 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; return json;
} }
@@ -75,10 +83,9 @@ namespace BlackMisc
QString *details = CBuildConfig::isLocalDeveloperDebugBuild() ? &parts.m_guessingDetails : nullptr; QString *details = CBuildConfig::isLocalDeveloperDebugBuild() ? &parts.m_guessingDetails : nullptr;
const bool vtol = model.isVtol(); const bool vtol = model.isVtol();
CSpeed guessedLiftOffGs = CSpeed::null(); CSpeed guessedVRotate = CSpeed::null();
CLength guessedCG = model.getCG(); CLength guessedCG = model.getCG();
model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedLiftOffGs); model.getAircraftIcaoCode().guessModelParameters(guessedCG, guessedVRotate);
// const QChar engineType = model.getAircraftIcaoCode().getEngineTypeChar();
// set some reasonable values // set some reasonable values
const bool isOnGround = situation.isOnGround(); 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 (situation.getGroundSpeed() < slowSpeed)
{ {
if (details) { *details += QStringLiteral("slow speed <") % slowSpeed.valueRoundedWithUnit(1) % QStringLiteral(" on ground"); } if (details) { *details += QStringLiteral("slow speed <") % slowSpeed.valueRoundedWithUnit(1) % QStringLiteral(" on ground"); }
@@ -142,7 +149,7 @@ namespace BlackMisc
else if (aGroundFt < nearGround2Ft) else if (aGroundFt < nearGround2Ft)
{ {
if (details) { details->prepend(QStringLiteral("2nd layer: ")); } 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.setGearDown(gearDown);
parts.setFlapsPercent(10); parts.setFlapsPercent(10);
} }
@@ -167,9 +174,9 @@ namespace BlackMisc
{ {
if (!vtol) if (!vtol)
{ {
const bool gearDown = situation.getGroundSpeed() < guessedLiftOffGs; const bool gearDown = situation.getGroundSpeed() < guessedVRotate;
parts.setGearDown(gearDown); 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; return notset;
} }
const QString &CAircraftParts::attributeNameIsFullJson()
{
static const QString a("is_full_data");
return a;
}
CVariant CAircraftParts::propertyByIndex(const BlackMisc::CPropertyIndex &index) const CVariant CAircraftParts::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
{ {
if (index.isMyself()) { return CVariant::from(*this); } if (index.isMyself()) { return CVariant::from(*this); }

View File

@@ -158,8 +158,13 @@ namespace BlackMisc
QString convertToQString(bool i18n = false) const; QString convertToQString(bool i18n = false) const;
//! Incremental JSON object //! Incremental JSON object
//! \remark same as toJson, but sets \c is_full_data to \c false
QJsonObject toIncrementalJson() const; 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? //! NULL parts object?
bool isNull() const; bool isNull() const;
@@ -172,6 +177,9 @@ namespace BlackMisc
//! Convert to QString //! Convert to QString
static const QString &partsDetailsToString(PartsDetails details); static const QString &partsDetailsToString(PartsDetails details);
//! Attribute name
static const QString &attributeNameIsFullJson();
private: private:
CAircraftLights m_lights; CAircraftLights m_lights;
CAircraftEngineList m_engines; CAircraftEngineList m_engines;

View File

@@ -271,7 +271,7 @@ namespace BlackMisc
void CRemoteAircraftProvider::storeAircraftParts(const CCallsign &callsign, const QJsonObject &jsonObject, int currentOffset) void CRemoteAircraftProvider::storeAircraftParts(const CCallsign &callsign, const QJsonObject &jsonObject, int currentOffset)
{ {
const CSimulatedAircraft remoteAircraft(this->getAircraftInRangeForCallsign(callsign)); 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 we are not yet synchronized, we throw away any incremental packet
if (!remoteAircraft.hasValidCallsign()) { return; } if (!remoteAircraft.hasValidCallsign()) { return; }