feat: Add ICAOEQ capability to FSD client

This commit is contained in:
Lars Toenning
2023-12-27 21:51:08 +01:00
parent cdd4690adf
commit 23e2dc9057
20 changed files with 817 additions and 964 deletions

View File

@@ -168,7 +168,10 @@ namespace BlackCore::Fsd
Stealth = (1 << 8),
/*! Aircraft Config */
AircraftConfig = (1 << 9)
AircraftConfig = (1 << 9),
/*! Process aircraft ICAO in flightplan as ICAO equipment code (e.g. B737/M-SDE2E3FGHIRWXY/LB1) */
IcaoEquipment = (1 << 10)
};
//! @{

View File

@@ -33,7 +33,7 @@ namespace BlackCore::Fsd
//! @{
//! Properties
FlightType m_flightType {};
QString m_aircraftIcaoType;
QString m_aircraftIcaoType; //!< Contains the full equipment string in FAA or ICAO format, depending on the server
int m_trueCruisingSpeed = 0;
QString m_depAirport;
int m_estimatedDepTime = 0;

View File

@@ -706,11 +706,21 @@ namespace BlackCore::Fsd
const QString alt = flightPlan.getCruiseAltitude().asFpVatsimAltitudeString();
// const QString alt = flightPlan.getCruiseAltitude().asFpAltitudeString();
QString act = flightPlan.getCombinedPrefixIcaoSuffix();
if (act.isEmpty()) { act = flightPlan.getAircraftIcao().getDesignator(); } // fallback
FlightType flightType = getFlightType(flightPlan.getFlightRules());
QString act;
if (m_server.getFsdSetup().shouldSendFlightPlanEquipmentInIcaoFormat())
{
act = flightPlan.getAircraftInfo().asIcaoString();
}
else
{
act = flightPlan.getAircraftInfo().asFaaString();
}
Q_ASSERT_X(!act.isEmpty(), Q_FUNC_INFO, "Aircraft type must not be empty");
const QList<int> timePartsEnroute = flightPlan.getEnrouteTime().getHrsMinSecParts();
const QList<int> timePartsFuel = flightPlan.getFuelTime().getHrsMinSecParts();
const FlightPlan fp(getOwnCallsignAsString(), "SERVER", flightType, act,
@@ -909,6 +919,7 @@ namespace BlackCore::Fsd
if (m_capabilities & Capabilities::VisPos) responseData.push_back(toQString(Capabilities::VisPos) % "=1");
if (m_capabilities & Capabilities::Stealth) responseData.push_back(toQString(Capabilities::Stealth) % "=1");
if (m_capabilities & Capabilities::AircraftConfig) responseData.push_back(toQString(Capabilities::AircraftConfig) % "=1");
if (m_capabilities & Capabilities::IcaoEquipment) responseData.push_back(toQString(Capabilities::IcaoEquipment) % "=1");
const ClientResponse clientResponse(ownCallsign, receiver, ClientQueryType::Capabilities, responseData);
sendQueudedMessage(clientResponse);
}
@@ -1382,7 +1393,7 @@ namespace BlackCore::Fsd
const CCallsign callsign(fp.sender(), CCallsign::Aircraft);
const CFlightPlan flightPlan(
callsign,
fp.m_aircraftIcaoType,
CFlightPlanAircraftInfo(fp.m_aircraftIcaoType),
fp.m_depAirport,
fp.m_destAirport,
fp.m_altAirport,

View File

@@ -453,6 +453,7 @@ namespace BlackCore::Fsd
case Capabilities::FastPos: return "FASTPOS";
case Capabilities::Stealth: return "STEALTH";
case Capabilities::AircraftConfig: return "ACCONFIG";
case Capabilities::IcaoEquipment: return "ICAOEQ";
}
return {};
@@ -479,6 +480,8 @@ namespace BlackCore::Fsd
return Capabilities::Stealth;
else if (str == "ACCONFIG")
return Capabilities::AircraftConfig;
else if (str == "ICAOEQ")
return Capabilities::IcaoEquipment;
return Capabilities::None;
}