diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp index 704adc463..8cd7f01e8 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.cpp @@ -337,6 +337,11 @@ namespace BlackSimPlugin return this->getSimConnectObjects().getSimObjectForObjectId(objectId); } + CSimConnectObject CSimulatorFsxCommon::getProbeForObjectId(DWORD objectId) const + { + return this->getSimConnectProbes().getSimObjectForObjectId(objectId); + } + void CSimulatorFsxCommon::setSimConnected() { m_simConnected = true; @@ -1046,7 +1051,7 @@ namespace BlackSimPlugin CAircraftSituation situation(newRemoteAircraft.getSituation()); if (canAdd && situation.isPositionOrAltitudeNull()) { - // invalid position + // invalid position because position or altitude is null const CAircraftSituationList situations(this->remoteAircraftSituations(callsign)); if (situations.isEmpty()) { @@ -1055,16 +1060,17 @@ namespace BlackSimPlugin } else { - CLogMessage(this).warning("Invalid aircraft situation for new aircraft '%1', use situation") << callsign.asString(); + CLogMessage(this).warning("Invalid aircraft situation for new aircraft '%1', use closest situation") << callsign.asString(); situation = situations.findClosestTimeDistanceAdjusted(QDateTime::currentMSecsSinceEpoch()); Q_ASSERT_X(!situation.isPositionOrAltitudeNull(), Q_FUNC_INFO, "Invalid situation for new aircraft"); } - const bool validSituation = situation.isPositionOrAltitudeNull(); - canAdd = validSituation; + // still invalid? + const bool invalidSituation = situation.isPositionOrAltitudeNull(); + canAdd = invalidSituation; if (CBuildConfig::isLocalDeveloperDebugBuild()) { - BLACK_VERIFY_X(validSituation, Q_FUNC_INFO, "Expect valid situation"); + BLACK_VERIFY_X(invalidSituation, Q_FUNC_INFO, "Expect valid situation"); const CStatusMessage sm = CStatusMessage(this).warning("Invalid situation for '%1'") << callsign; this->clampedLog(callsign, sm); } diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h index 42d5fa053..ff8de7055 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h +++ b/src/plugins/simulator/fsxcommon/simulatorfsxcommon.h @@ -347,6 +347,9 @@ namespace BlackSimPlugin //! The simconnect related probes const CSimConnectObjects &getSimConnectProbes() const { return m_simConnectProbes; } + //! Get probe for id + CSimConnectObject getProbeForObjectId(DWORD objectId) const; + //! Format conversion //! \note must be valid situation SIMCONNECT_DATA_INITPOSITION aircraftSituationToFsxPosition(const BlackMisc::Aviation::CAircraftSituation &situation, bool sendGnd = true); @@ -435,7 +438,7 @@ namespace BlackSimPlugin // objects CSimConnectObjects m_simConnectObjects; //!< AI objects and their object / request ids - CSimConnectObjects m_simConnectProbes; //!< AI terrain probes + CSimConnectObjects m_simConnectProbes; //!< AI terrain probes 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(RequestIdSimDataStart); //!< request id, use obtainRequestIdForSimData() to get id SIMCONNECT_DATA_REQUEST_ID m_requestIdProbe = static_cast(RequestIdTerrainProbeStart); //!< request id, use obtainRequestIdForProbe() to get id diff --git a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp index 4572bbaa6..e5cdc2690 100644 --- a/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp +++ b/src/plugins/simulator/fsxcommon/simulatorfsxsimconnectproc.cpp @@ -180,7 +180,7 @@ namespace BlackSimPlugin success = simulatorFsxP3D->setSimConnectProbeId(requestId, objectId); if (!success) { break; } // not an request ID of ours success = simulatorFsxP3D->simulatorReportedProbeAdded(objectId); - const CSimConnectObject simObject = simulatorFsxP3D->getSimConnectProbes().getSimObjectForObjectId(objectId); + const CSimConnectObject simObject = simulatorFsxP3D->getProbeForObjectId(objectId); if (success) { CLogMessage(simulatorFsxP3D).info("Added probe '%1' id: %2") << simObject.getCallsign() << objectId; @@ -197,7 +197,7 @@ namespace BlackSimPlugin success = simulatorFsxP3D->simulatorReportedObjectAdded(objectId); // trigger follow up actions if (!success) { - const CSimConnectObject simObj = simulatorFsxP3D->getSimConnectObjects().getSimObjectForObjectId(objectId); + const CSimConnectObject simObj = simulatorFsxP3D->getSimObjectForObjectId(objectId); const CSimulatedAircraft remoteAircraft(simObj.getAircraft()); const CStatusMessage msg = CStatusMessage(simulatorFsxP3D).error("Cannot add object %1, cs: '%2' model: '%3'") << objectId << remoteAircraft.getCallsignAsString() << remoteAircraft.getModelString(); CLogMessage::preformatted(msg); @@ -270,7 +270,7 @@ namespace BlackSimPlugin { static_assert(sizeof(DataDefinitionRemoteAircraftSimData) == 5 * sizeof(double), "DataDefinitionRemoteAircraftSimData has an incorrect size."); simulatorFsxP3D->m_dispatchLastRequest = CSimConnectDefinitions::RequestRangeForProbe; - const CSimConnectObject probeObj = simulatorFsxP3D->getSimConnectProbes().getSimObjectForObjectId(objectId); + const CSimConnectObject probeObj = simulatorFsxP3D->getProbeForObjectId(objectId); if (!probeObj.hasValidRequestAndObjectId()) { break; } const DataDefinitionRemoteAircraftSimData *probeSimData = (DataDefinitionRemoteAircraftSimData *)&pObjData->dwData; // extra check, but ids should be the same @@ -285,8 +285,8 @@ namespace BlackSimPlugin { static_assert(sizeof(DataDefinitionRemoteAircraftLights) == 8 * sizeof(double), "DataDefinitionRemoteAircraftLights has an incorrect size."); simulatorFsxP3D->m_dispatchLastRequest = CSimConnectDefinitions::RequestRangeForLights; - const CSimConnectObject simObj = simulatorFsxP3D->getSimConnectObjects().getSimObjectForObjectId(objectId); - if (!simObj.hasValidRequestAndObjectId()) break; + const CSimConnectObject simObj = simulatorFsxP3D->getSimObjectForObjectId(objectId); + if (!simObj.hasValidRequestAndObjectId()) { break; } const DataDefinitionRemoteAircraftLights *remoteAircraftLights = (DataDefinitionRemoteAircraftLights *)&pObjData->dwData; // extra check, but ids should be the same if (objectId == simObj.getObjectId())