[FS9] Finalize aircraft parts animations

This change implements very basic parts animation including
- Gear up & down
- Flaps up & down
- Engine on & off
This commit is contained in:
Roland Rossgotterer
2020-04-24 11:07:05 +02:00
committed by Mat Sutcliffe
parent 9fa3221abc
commit 2c3c9a123a
3 changed files with 72 additions and 16 deletions

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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: