mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-12 07:15:34 +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
|
// we will request a new aircraft by request ID, later we will receive its object id
|
||||||
// so far this object id is -1
|
// so far this object id is -1
|
||||||
addedAircraft.setRendered(false);
|
const CSimConnectObject simObject = this->insertNewSimConnectObject(addedAircraft, requestId);
|
||||||
const CSimConnectObject simObject(addedAircraft, requestId, &m_interpolationLogger);
|
|
||||||
m_simConnectObjects.insert(callsign, simObject);
|
|
||||||
if (m_traceSendId) { this->traceSendId(simObject.getObjectId(), Q_FUNC_INFO);}
|
if (m_traceSendId) { this->traceSendId(simObject.getObjectId(), Q_FUNC_INFO);}
|
||||||
adding = true;
|
adding = true;
|
||||||
}
|
}
|
||||||
@@ -1491,6 +1489,7 @@ namespace BlackSimPlugin
|
|||||||
{
|
{
|
||||||
m_simConnectObjects.clear();
|
m_simConnectObjects.clear();
|
||||||
m_addPendingAircraft.clear();
|
m_addPendingAircraft.clear();
|
||||||
|
m_simConnectObjectsPositionAndPartsTraces.clear();
|
||||||
CSimulatorFsCommon::clearAllAircraft();
|
CSimulatorFsCommon::clearAllAircraft();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1502,8 +1501,15 @@ namespace BlackSimPlugin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// update if in pending
|
// trace for future usage
|
||||||
m_addPendingAircraft.setAircraftSituation(situation.getCallsign(), situation);
|
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
|
else
|
||||||
{
|
{
|
||||||
// update if in pending
|
// trace for future usage
|
||||||
m_addPendingAircraft.setAircraftParts(callsign, parts);
|
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)
|
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.
|
return positionStr.
|
||||||
arg(position.Latitude).arg(position.Longitude).arg(position.Altitude).
|
arg(position.Latitude).arg(position.Longitude).arg(position.Altitude).
|
||||||
arg(position.Pitch).arg(position.Bank).arg(position.Heading).arg(position.Airspeed).arg(position.OnGround);
|
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
|
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'");
|
static const QString d("Send id: %1 obj.id.: %2 cs.: %4 '%3'");
|
||||||
const CCallsign cs = m_simConnectObjects.getCallsignForObjectId(t.simObjectId);
|
const CCallsign cs = m_simConnectObjects.getCallsignForObjectId(trace.simObjectId);
|
||||||
return d.arg(sendId).arg(t.simObjectId).arg(cs.asString(), t.comment);
|
return d.arg(sendId).arg(trace.simObjectId).arg(cs.asString(), trace.comment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return "";
|
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()
|
CCallsignSet CSimulatorFsxCommon::physicallyRemoveAircraftNotInProvider()
|
||||||
{
|
{
|
||||||
const CCallsignSet toBeRemoved(getCallsignsMissingInProvider());
|
const CCallsignSet toBeRemoved(getCallsignsMissingInProvider());
|
||||||
|
|||||||
@@ -317,6 +317,9 @@ namespace BlackSimPlugin
|
|||||||
//! Get the trace details, otherwise empty string
|
//! Get the trace details, otherwise empty string
|
||||||
QString getSendIdTraceDetails(DWORD sendId) const;
|
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)?
|
//! Request for sim data (request in range of sim data)?
|
||||||
static bool isRequestForSimData(DWORD requestId) { return requestId >= (RequestSimDataStart + RequestSimDataOffset) && requestId < (RequestSimDataStart + RequestSimDataOffset + MaxSimObjects); }
|
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_dispatchErrors = 0; //!< number of dispatched failed, \sa dispatch
|
||||||
int m_receiveExceptionCount = 0; //!< exceptions
|
int m_receiveExceptionCount = 0; //!< exceptions
|
||||||
HANDLE m_hSimConnect = nullptr; //!< handle to SimConnect object
|
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
|
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
|
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
|
//! Listener for FSX
|
||||||
|
|||||||
Reference in New Issue
Block a user