diff --git a/src/plugins/simulator/fs9/fs9.h b/src/plugins/simulator/fs9/fs9.h index beb7b2fec..f312e2648 100644 --- a/src/plugins/simulator/fs9/fs9.h +++ b/src/plugins/simulator/fs9/fs9.h @@ -93,6 +93,7 @@ namespace BlackSimPlugin * * Data most likely to be part of it: * \li Wing animation + * \li Flaps 0 == up, extending flaps starts from 255 and is decreasing. Cessna FULL(228), BOEING 747 Full (242) * * Max value for fully extended gear seems to be 0xA1 */ @@ -102,21 +103,21 @@ namespace BlackSimPlugin quint32 packet_index = 0; //!< Packet index quint8 unknown8 = 0; //!< Unknown data quint8 unknown9 = 0; //!< Unknown data - quint8 flaps_left = 0xDF; //!< Flaps left - quint8 flaps_right = 0xDF; //!< Flaps right + quint8 flaps_left = 0; //!< Flaps left + quint8 flaps_right = 0; //!< Flaps right quint8 unknown12 = 0; //!< Unknown data quint8 unknown13 = 0; //!< Unknown data - quint8 unknown14 = 0xFF; //!< Unknown data + quint8 unknown14 = 0; //!< Engine RPM? quint8 unknown15 = 0; //!< Unknown data quint8 unknown16 = 0; //!< Unknown data quint8 unknown17 = 0; //!< Unknown data quint8 unknown18 = 0; //!< Unknown data quint8 unknown19 = 0; //!< Unknown data - quint8 gear_center = 0xA1; //!< Gear center - quint8 gear_left = 0xA1; //!< Gear left - quint8 gear_right = 0xA1; //!< Gear right - quint8 engine_1 = 0xFF; //!< Engine 1 N1 in % - quint8 engine_2 = 0xFF; //!< Engine 2 N1 in % + quint8 gear_center = 0; //!< Gear center + quint8 gear_left = 0; //!< Gear left + quint8 gear_right = 0; //!< Gear right + quint8 engine_1 = 0; //!< Engine 1 N1 in % + quint8 engine_2 = 0; //!< Engine 2 N1 in % quint8 unknown25 = 0; //!< Unknown data quint8 unknown26 = 0; //!< Unknown data quint8 unknown27 = 0; //!< Unknown data diff --git a/src/plugins/simulator/fs9/fs9client.cpp b/src/plugins/simulator/fs9/fs9client.cpp index 27607bd66..0a96432e7 100644 --- a/src/plugins/simulator/fs9/fs9client.cpp +++ b/src/plugins/simulator/fs9/fs9client.cpp @@ -140,6 +140,31 @@ namespace BlackSimPlugin return positionSlewMode; } + MPParam aircraftPartsToFS9(const CAircraftParts &parts) + { + MPParam param; + if (parts.isAnyEngineOn()) + { + param.engine_1 = 140; + param.engine_2 = 140; + param.unknown14 = 60; + } + + if (parts.getFlapsPercent() > 50.0) + { + param.flaps_left = 228; + param.flaps_right = 228; + } + + if (parts.isFixedGearDown()) + { + param.gear_center = 0xA1; + param.gear_left = 0xA1; + param.gear_right = 0xA1; + } + return param; + } + CFs9Client::~CFs9Client() { closeConnection(); @@ -351,14 +376,6 @@ namespace BlackSimPlugin sendMessage(positionMessage); } - MPParam aircraftPartsToFS9(const CAircraftParts &parts) - { - //! todo THAT PART IS MISSING HERE, see https://discordapp.com/channels/539048679160676382/539925070550794240/699234172849618975 - Q_UNUSED(parts) - MPParam param; - return param; - } - void CFs9Client::sendMultiplayerParts(const CAircraftParts &parts) { Q_UNUSED(parts) @@ -405,6 +422,7 @@ namespace BlackSimPlugin m_clientStatus = Connected; // will not send position in disconnected mode sendMultiplayerChangePlayerPlane(); sendMultiplayerPositionAndPartsFromInterpolation(); + startTimer(m_updateInterval.valueInteger(CTimeUnit::ms())); emit statusChanged(m_remoteAircraft, m_clientStatus); } diff --git a/src/plugins/simulator/fs9/simulatorfs9.cpp b/src/plugins/simulator/fs9/simulatorfs9.cpp index 62f6a8b96..6221c2ef4 100644 --- a/src/plugins/simulator/fs9/simulatorfs9.cpp +++ b/src/plugins/simulator/fs9/simulatorfs9.cpp @@ -344,6 +344,32 @@ namespace BlackSimPlugin } } + QString getChangedParamsAsString(const MPParam old, const MPParam &newParam) + { + QString str; + if (old.unknown8 != newParam.unknown8) str += "unknown8 " + QString::number(newParam.unknown8) + "\n"; + if (old.unknown9 != newParam.unknown9) str += "unknown9 " + QString::number(newParam.unknown9) + "\n"; + if (old.flaps_left != newParam.flaps_left) str += "flaps_left " + QString::number(newParam.flaps_left) + "\n"; + if (old.flaps_right != newParam.flaps_right) str += "flaps_right " + QString::number(newParam.flaps_right) + "\n"; + if (old.unknown12 != newParam.unknown12) str += "unknown12 " + QString::number(newParam.unknown12) + "\n"; + if (old.unknown13 != newParam.unknown13) str += "unknown13 " + QString::number(newParam.unknown13) + "\n"; + if (old.unknown14 != newParam.unknown14) str += "unknown14 " + QString::number(newParam.unknown14) + "\n"; + if (old.unknown15 != newParam.unknown15) str += "unknown15 " + QString::number(newParam.unknown15) + "\n"; + if (old.unknown16 != newParam.unknown16) str += "unknown16 " + QString::number(newParam.unknown16) + "\n"; + if (old.unknown17 != newParam.unknown17) str += "unknown17 " + QString::number(newParam.unknown17) + "\n"; + if (old.unknown18 != newParam.unknown18) str += "unknown18 " + QString::number(newParam.unknown18) + "\n"; + if (old.unknown19 != newParam.unknown19) str += "unknown19 " + QString::number(newParam.unknown19) + "\n"; + if (old.gear_center != newParam.gear_center) str += "gear_center " + QString::number(newParam.gear_center) + "\n"; + if (old.gear_left != newParam.gear_left) str += "gear_left " + QString::number(newParam.gear_left) + "\n"; + if (old.gear_right != newParam.gear_right) str += "gear_right " + QString::number(newParam.gear_right) + "\n"; + if (old.engine_1 != newParam.engine_1) str += "engine_1 " + QString::number(newParam.engine_1) + "\n"; + if (old.engine_2 != newParam.engine_2) str += "engine_2 " + QString::number(newParam.engine_2) + "\n"; + if (old.unknown25 != newParam.unknown25) str += "unknown25 " + QString::number(newParam.unknown25) + "\n"; + if (old.unknown26 != newParam.unknown26) str += "unknown26 " + QString::number(newParam.unknown26) + "\n"; + if (old.unknown27 != newParam.unknown27) str += "unknown27 " + QString::number(newParam.unknown27) + "\n"; + return str; + } + void CSimulatorFs9::processFs9Message(const QByteArray &message) { if (!m_simConnected) @@ -356,6 +382,17 @@ namespace BlackSimPlugin { case CFs9Sdk::MULTIPLAYER_PACKET_ID_PARAMS: { + MPParam mpParam; + MultiPlayerPacketParser::readMessage(message, mpParam); + // For debugging: + // QTextStream qtstdout(stdout); + // QString paramString = getChangedParamsAsString(m_lastParameters, mpParam); + // if (! paramString.isEmpty()) + // { + // qtstdout << message.mid(4 * sizeof(qint32)).toHex() << Qt::endl; + // qtstdout << paramString << Qt::endl; + // } + // m_lastParameters = mpParam; break; } case CFs9Sdk::MULTIPLAYER_PACKET_ID_CHANGE_PLAYER_PLANE: