mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 23:05:36 +08:00
Ref T180, trace parts and positions even if the object is not yet used with simulator
* interpolator will be prefilled with data * in case the used SimObject is created, it can already use earlier position/parts updates
This commit is contained in:
@@ -877,9 +877,7 @@ namespace BlackSimPlugin
|
||||
{
|
||||
// we will request a new aircraft by request ID, later we will receive its object id
|
||||
// so far this object id is -1
|
||||
addedAircraft.setRendered(false);
|
||||
const CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger);
|
||||
m_simConnectObjects.insert(callsign, simObject);
|
||||
const CSimConnectObject simObject = this->insertNewSimConnectObject(addedAircraft, requestId);
|
||||
if (m_traceSendId) { this->traceSendId(simObject.getObjectId(), Q_FUNC_INFO);}
|
||||
adding = true;
|
||||
}
|
||||
@@ -1491,6 +1489,7 @@ namespace BlackSimPlugin
|
||||
{
|
||||
m_simConnectObjects.clear();
|
||||
m_addPendingAircraft.clear();
|
||||
m_simConnectObjectsPositionAndPartsTraces.clear();
|
||||
CSimulatorFsCommon::clearAllAircraft();
|
||||
}
|
||||
|
||||
@@ -1502,8 +1501,15 @@ namespace BlackSimPlugin
|
||||
}
|
||||
else
|
||||
{
|
||||
// update if in pending
|
||||
m_addPendingAircraft.setAircraftSituation(situation.getCallsign(), situation);
|
||||
// trace for future usage
|
||||
if (m_simConnectObjectsPositionAndPartsTraces.contains(situation.getCallsign()))
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces[situation.getCallsign()].addAircraftSituation(situation);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces.insert(situation.getCallsign(), CSimConnectObject(situation));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1515,14 +1521,21 @@ namespace BlackSimPlugin
|
||||
}
|
||||
else
|
||||
{
|
||||
// update if in pending
|
||||
m_addPendingAircraft.setAircraftParts(callsign, parts);
|
||||
// trace for future usage
|
||||
if (m_simConnectObjectsPositionAndPartsTraces.contains(callsign))
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces[callsign].addAircraftParts(parts);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_simConnectObjectsPositionAndPartsTraces.insert(callsign, CSimConnectObject(parts, callsign));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString CSimulatorFsxCommon::fsxPositionToString(const SIMCONNECT_DATA_INITPOSITION &position)
|
||||
{
|
||||
const QString positionStr("Lat: %1deg lng: %2deg alt: %3ft pitch: %4deg bank: %5deg hdg: %6deg airspeed: %7kts onGround: %8");
|
||||
static const QString positionStr("Lat: %1deg lng: %2deg alt: %3ft pitch: %4deg bank: %5deg hdg: %6deg airspeed: %7kts onGround: %8");
|
||||
return positionStr.
|
||||
arg(position.Latitude).arg(position.Longitude).arg(position.Altitude).
|
||||
arg(position.Pitch).arg(position.Bank).arg(position.Heading).arg(position.Airspeed).arg(position.OnGround);
|
||||
@@ -1549,18 +1562,44 @@ namespace BlackSimPlugin
|
||||
|
||||
QString CSimulatorFsxCommon::getSendIdTraceDetails(DWORD sendId) const
|
||||
{
|
||||
for (const TraceFsxSendId &t : m_sendIdTraces)
|
||||
for (const TraceFsxSendId &trace : m_sendIdTraces)
|
||||
{
|
||||
if (t.sendId == sendId)
|
||||
if (trace.sendId == sendId)
|
||||
{
|
||||
static const QString d("Send id: %1 obj.id.: %2 cs.: %4 '%3'");
|
||||
const CCallsign cs = m_simConnectObjects.getCallsignForObjectId(t.simObjectId);
|
||||
return d.arg(sendId).arg(t.simObjectId).arg(cs.asString(), t.comment);
|
||||
const CCallsign cs = m_simConnectObjects.getCallsignForObjectId(trace.simObjectId);
|
||||
return d.arg(sendId).arg(trace.simObjectId).arg(cs.asString(), trace.comment);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
CSimConnectObject CSimulatorFsxCommon::insertNewSimConnectObject(const CSimulatedAircraft &aircraft, DWORD requestId)
|
||||
{
|
||||
if (m_simConnectObjects.contains(aircraft.getCallsign()))
|
||||
{
|
||||
// error, ...?
|
||||
return m_simConnectObjects[aircraft.getCallsign()];
|
||||
}
|
||||
|
||||
CSimConnectObject simObject;
|
||||
if (m_simConnectObjectsPositionAndPartsTraces.contains(aircraft.getCallsign()))
|
||||
{
|
||||
simObject = m_simConnectObjectsPositionAndPartsTraces[aircraft.getCallsign()];
|
||||
m_simConnectObjectsPositionAndPartsTraces.remove(aircraft.getCallsign());
|
||||
simObject.resetState();
|
||||
simObject.setRequestId(requestId);
|
||||
simObject.setAircraft(aircraft);
|
||||
simObject.attachInterpolatorLogger(&m_interpolationLogger); // setting a logger does not start logging
|
||||
}
|
||||
else
|
||||
{
|
||||
simObject = CSimConnectObject(aircraft, requestId, &m_interpolationLogger);
|
||||
}
|
||||
m_simConnectObjects.insert(aircraft.getCallsign(), simObject);
|
||||
return simObject;
|
||||
}
|
||||
|
||||
CCallsignSet CSimulatorFsxCommon::physicallyRemoveAircraftNotInProvider()
|
||||
{
|
||||
const CCallsignSet toBeRemoved(getCallsignsMissingInProvider());
|
||||
|
||||
@@ -317,6 +317,9 @@ namespace BlackSimPlugin
|
||||
//! Get the trace details, otherwise empty string
|
||||
QString getSendIdTraceDetails(DWORD sendId) const;
|
||||
|
||||
//! Insert an new SimConnect object
|
||||
CSimConnectObject insertNewSimConnectObject(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, DWORD requestId);
|
||||
|
||||
//! Request for sim data (request in range of sim data)?
|
||||
static bool isRequestForSimData(DWORD requestId) { return requestId >= (RequestSimDataStart + RequestSimDataOffset) && requestId < (RequestSimDataStart + RequestSimDataOffset + MaxSimObjects); }
|
||||
|
||||
@@ -350,11 +353,12 @@ namespace BlackSimPlugin
|
||||
int m_dispatchErrors = 0; //!< number of dispatched failed, \sa dispatch
|
||||
int m_receiveExceptionCount = 0; //!< exceptions
|
||||
HANDLE m_hSimConnect = nullptr; //!< handle to SimConnect object
|
||||
CSimConnectObjects m_simConnectObjects; //!< AI objects and their object / request ids
|
||||
QList<TraceFsxSendId> m_sendIdTraces; //!< Send id traces for debugging
|
||||
QTimer m_addPendingAircraftTimer { this }; //!< updating of aircraft awaiting add
|
||||
CSimConnectObjects m_simConnectObjects; //!< AI objects and their object / request ids
|
||||
CSimConnectObjects m_simConnectObjectsPositionAndPartsTraces; //!< position/parts received, but object not yet added, excluded, disabled etc.
|
||||
SIMCONNECT_DATA_REQUEST_ID m_requestIdSimData = static_cast<SIMCONNECT_DATA_REQUEST_ID>(RequestSimDataStart); //!< request id, use obtainRequestId() to get id
|
||||
BlackMisc::Simulation::CSimulatedAircraftList m_addPendingAircraft; //!< aircraft awaiting to be added
|
||||
BlackMisc::Simulation::CSimulatedAircraftList m_addPendingAircraft; //!< aircraft awaiting to be added
|
||||
QTimer m_addPendingAircraftTimer { this }; //!< updating of aircraft awaiting to be added
|
||||
};
|
||||
|
||||
//! Listener for FSX
|
||||
|
||||
Reference in New Issue
Block a user