mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-16 18:35:35 +08:00
Ref T357, Ref T348, probe improvements
- release AI also traces id - info that probe is disabled in error case
This commit is contained in:
@@ -495,13 +495,23 @@ namespace BlackSimPlugin
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT CSimulatorFsxCommon::releaseAIControl(SIMCONNECT_OBJECT_ID objectId, SIMCONNECT_DATA_REQUEST_ID requestId)
|
bool CSimulatorFsxCommon::releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId)
|
||||||
{
|
{
|
||||||
HRESULT hr = SimConnect_AIReleaseControl(m_hSimConnect, objectId, requestId);
|
const SIMCONNECT_OBJECT_ID objectId = simObject.getObjectId();
|
||||||
hr += SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY);
|
const HRESULT hr1 = this->logAndTraceSendId(
|
||||||
hr += SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeAlt, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY);
|
SimConnect_AIReleaseControl(m_hSimConnect, objectId, requestId),
|
||||||
hr += SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeAtt, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY);
|
simObject, "Release control", Q_FUNC_INFO, "SimConnect_AIReleaseControl");
|
||||||
return hr;
|
const HRESULT hr2 = this->logAndTraceSendId(
|
||||||
|
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||||
|
simObject, "EventFreezeLat", Q_FUNC_INFO, "SimConnect_TransmitClientEvent");
|
||||||
|
const HRESULT hr3 = this->logAndTraceSendId(
|
||||||
|
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||||
|
simObject, "EventFreezeAlt", Q_FUNC_INFO, "SimConnect_TransmitClientEvent");
|
||||||
|
const HRESULT hr4 = this->logAndTraceSendId(
|
||||||
|
SimConnect_TransmitClientEvent(m_hSimConnect, objectId, EventFreezeLat, 1, SIMCONNECT_GROUP_PRIORITY_HIGHEST, SIMCONNECT_EVENT_FLAG_GROUPID_IS_PRIORITY),
|
||||||
|
simObject, "EventFreezeAtt", Q_FUNC_INFO, "SimConnect_TransmitClientEvent");
|
||||||
|
|
||||||
|
return isOk(hr1, hr2, hr3, hr4);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CSimulatorFsxCommon::isValidSimObjectNotPendingRemoved(const CSimConnectObject &simObject) const
|
bool CSimulatorFsxCommon::isValidSimObjectNotPendingRemoved(const CSimConnectObject &simObject) const
|
||||||
@@ -825,13 +835,12 @@ namespace BlackSimPlugin
|
|||||||
simObject.setConfirmedAdded(true);
|
simObject.setConfirmedAdded(true);
|
||||||
|
|
||||||
// P3D also has SimConnect_AIReleaseControlEx which also allows to destroy the aircraft
|
// P3D also has SimConnect_AIReleaseControlEx which also allows to destroy the aircraft
|
||||||
const DWORD objectId = simObject.getObjectId();
|
const SIMCONNECT_DATA_REQUEST_ID requestReleaseId = this->obtainRequestIdForSimObjAircraft();
|
||||||
const SIMCONNECT_DATA_REQUEST_ID requestId = simObject.getRequestId(CSimConnectDefinitions::SimObjectMisc);
|
const bool released = this->releaseAIControl(simObject, requestReleaseId);
|
||||||
const HRESULT hr = this->releaseAIControl(objectId, requestId);
|
|
||||||
|
|
||||||
if (isFailure(hr))
|
if (!released)
|
||||||
{
|
{
|
||||||
msg = CStatusMessage(this).error("Cannot confirm object %1, cs: '%2' model: '%3'") << objectId << remoteAircraft.getCallsignAsString() << remoteAircraft.getModelString();
|
msg = CStatusMessage(this).error("Cannot confirm model '%1' %2") << remoteAircraft.getModelString() << simObject.toQString();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -846,11 +855,11 @@ namespace BlackSimPlugin
|
|||||||
{
|
{
|
||||||
emit this->aircraftRenderingChanged(simObject.getAircraft());
|
emit this->aircraftRenderingChanged(simObject.getAircraft());
|
||||||
static const QString debugMsg("CS: '%1' model: '%2' verified, request/object id: %3 %4");
|
static const QString debugMsg("CS: '%1' model: '%2' verified, request/object id: %3 %4");
|
||||||
if (this->showDebugLogMessage()) { this->debugLogMessage(Q_FUNC_INFO, debugMsg.arg(callsign.toQString(), remoteAircraft.getModelString()).arg(requestId).arg(objectId)); }
|
if (this->showDebugLogMessage()) { this->debugLogMessage(Q_FUNC_INFO, debugMsg.arg(callsign.toQString(), remoteAircraft.getModelString()).arg(simObject.getRequestId()).arg(simObject.getObjectId())); }
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CLogMessage(this).warning("Verified aircraft '%1' model '%2', request/object id: %3 %4 was already marked rendered") << callsign.asString() << remoteAircraft.getModelString() << requestId << objectId;
|
CLogMessage(this).warning("Verified aircraft '%1' model '%2', request/object id: %3 %4 was already marked rendered") << callsign.asString() << remoteAircraft.getModelString() << simObject.getRequestId() << simObject.getObjectId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (false);
|
while (false);
|
||||||
@@ -951,7 +960,7 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
void CSimulatorFsxCommon::verifyAddedTerrainProbe(const CSimulatedAircraft &remoteAircraftIn)
|
void CSimulatorFsxCommon::verifyAddedTerrainProbe(const CSimulatedAircraft &remoteAircraftIn)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
bool verified = false;
|
||||||
CCallsign cs;
|
CCallsign cs;
|
||||||
|
|
||||||
// no simObject reference outside that block, because it will be deleted
|
// no simObject reference outside that block, because it will be deleted
|
||||||
@@ -959,15 +968,16 @@ namespace BlackSimPlugin
|
|||||||
CSimConnectObject &simObject = m_simConnectObjects[remoteAircraftIn.getCallsign()];
|
CSimConnectObject &simObject = m_simConnectObjects[remoteAircraftIn.getCallsign()];
|
||||||
simObject.setConfirmedAdded(true);
|
simObject.setConfirmedAdded(true);
|
||||||
simObject.resetTimestampToNow();
|
simObject.resetTimestampToNow();
|
||||||
|
cs = simObject.getCallsign();
|
||||||
CLogMessage(this).info("Probe: '%1' '%2' confirmed, %3") << simObject.getCallsignAsString() << simObject.getAircraftModelString() << simObject.toQString();
|
CLogMessage(this).info("Probe: '%1' '%2' confirmed, %3") << simObject.getCallsignAsString() << simObject.getAircraftModelString() << simObject.toQString();
|
||||||
|
|
||||||
SIMCONNECT_OBJECT_ID objectId = simObject.getObjectId();
|
// fails for probe
|
||||||
SIMCONNECT_DATA_REQUEST_ID requestId = simObject.getRequestId();
|
// SIMCONNECT_DATA_REQUEST_ID requestId = this->obtainRequestIdForSimObjTerrainProbe();
|
||||||
hr = this->releaseAIControl(objectId, requestId);
|
// verified = this->releaseAIControl(simObject, requestId); // release probe
|
||||||
cs = simObject.getCallsign();
|
verified = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isFailure(hr))
|
if (!verified)
|
||||||
{
|
{
|
||||||
CLogMessage(this).info("Disable probes: '%1' failed to relase control") << cs.asString();
|
CLogMessage(this).info("Disable probes: '%1' failed to relase control") << cs.asString();
|
||||||
m_useFsxTerrainProbe = false;
|
m_useFsxTerrainProbe = false;
|
||||||
@@ -1382,9 +1392,9 @@ namespace BlackSimPlugin
|
|||||||
const QString modelString(newRemoteAircraft.getModelString());
|
const QString modelString(newRemoteAircraft.getModelString());
|
||||||
if (this->showDebugLogMessage()) { this->debugLogMessage(Q_FUNC_INFO, QString("CS: '%1' model: '%2' request: %3, init pos: %4").arg(callsign.toQString(), modelString).arg(requestId).arg(fsxPositionToString(initialPosition))); }
|
if (this->showDebugLogMessage()) { this->debugLogMessage(Q_FUNC_INFO, QString("CS: '%1' model: '%2' request: %3, init pos: %4").arg(callsign.toQString(), modelString).arg(requestId).arg(fsxPositionToString(initialPosition))); }
|
||||||
|
|
||||||
const HRESULT hr = !probe ?
|
const HRESULT hr = probe ?
|
||||||
SimConnect_AICreateNonATCAircraft(m_hSimConnect, qPrintable(modelString), qPrintable(callsign.toQString().left(12)), initialPosition, requestId) :
|
SimConnect_AICreateSimulatedObject(m_hSimConnect, qPrintable(modelString), initialPosition, requestId) :
|
||||||
SimConnect_AICreateSimulatedObject(m_hSimConnect, qPrintable(modelString), initialPosition, requestId);
|
SimConnect_AICreateNonATCAircraft(m_hSimConnect, qPrintable(modelString), qPrintable(callsign.toQString().left(12)), initialPosition, requestId);
|
||||||
// const HRESULT hr = SimConnect_AICreateNonATCAircraft(m_hSimConnect, qPrintable(modelString), qPrintable(callsign.toQString().left(12)), initialPosition, requestId);
|
// const HRESULT hr = SimConnect_AICreateNonATCAircraft(m_hSimConnect, qPrintable(modelString), qPrintable(callsign.toQString().left(12)), initialPosition, requestId);
|
||||||
|
|
||||||
if (isFailure(hr))
|
if (isFailure(hr))
|
||||||
@@ -1416,7 +1426,8 @@ namespace BlackSimPlugin
|
|||||||
// static const QString modelString("A321ACA");
|
// static const QString modelString("A321ACA");
|
||||||
// static const QString modelString("AI_Tracker_Object_0");
|
// static const QString modelString("AI_Tracker_Object_0");
|
||||||
// static const QString modelString("Piper Cub"); // P3Dv86 works as nonATC/SimulatedObject
|
// static const QString modelString("Piper Cub"); // P3Dv86 works as nonATC/SimulatedObject
|
||||||
static const QString modelString("Discovery Spaceshuttle"); // P3Dx86 works as nonATC/SimulatedObject
|
// static const QString modelString("Discovery Spaceshuttle"); // P3Dx86 works as nonATC/SimulatedObject
|
||||||
|
static const QString modelString("swiftTerrainProbe0");
|
||||||
static const QString pseudoCallsign("PROBE%1"); // max 12 chars
|
static const QString pseudoCallsign("PROBE%1"); // max 12 chars
|
||||||
static const CCountry ctry("SW", "SWIFT");
|
static const CCountry ctry("SW", "SWIFT");
|
||||||
static const CAirlineIcaoCode swiftAirline("SWI", "swift probe", ctry, "SWIFT", false, false);
|
static const CAirlineIcaoCode swiftAirline("SWI", "swift probe", ctry, "SWIFT", false, false);
|
||||||
@@ -1436,8 +1447,10 @@ namespace BlackSimPlugin
|
|||||||
if (number < 1) { return 0; }
|
if (number < 1) { return 0; }
|
||||||
if (m_initFsxTerrainProbes) { return m_addedProbes; }
|
if (m_initFsxTerrainProbes) { return m_addedProbes; }
|
||||||
m_initFsxTerrainProbes = true; // no multiple inits
|
m_initFsxTerrainProbes = true; // no multiple inits
|
||||||
|
this->triggerAutoTraceSendId();
|
||||||
|
|
||||||
int c = 0;
|
int c = 0;
|
||||||
for (int n = 1; n <= number; ++n)
|
for (int n = 0; n < number; ++n)
|
||||||
{
|
{
|
||||||
if (this->physicallyAddAITerrainProbe(coordinate, n)) { c++; }
|
if (this->physicallyAddAITerrainProbe(coordinate, n)) { c++; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -239,7 +239,7 @@ namespace BlackSimPlugin
|
|||||||
SIMCONNECT_DATA_REQUEST_ID obtainRequestIdForSimObjTerrainProbe();
|
SIMCONNECT_DATA_REQUEST_ID obtainRequestIdForSimObjTerrainProbe();
|
||||||
|
|
||||||
//! Release AI control
|
//! Release AI control
|
||||||
HRESULT releaseAIControl(SIMCONNECT_OBJECT_ID objectId, SIMCONNECT_DATA_REQUEST_ID requestId);
|
bool releaseAIControl(const CSimConnectObject &simObject, SIMCONNECT_DATA_REQUEST_ID requestId);
|
||||||
|
|
||||||
//! Valid CSimConnectObject which is NOT pendig removed
|
//! Valid CSimConnectObject which is NOT pendig removed
|
||||||
bool isValidSimObjectNotPendingRemoved(const CSimConnectObject &simObject) const;
|
bool isValidSimObjectNotPendingRemoved(const CSimConnectObject &simObject) const;
|
||||||
|
|||||||
@@ -94,7 +94,11 @@ namespace BlackSimPlugin
|
|||||||
const bool removed = simulatorFsxP3D->m_simConnectObjects.remove(simObject.getCallsign());
|
const bool removed = simulatorFsxP3D->m_simConnectObjects.remove(simObject.getCallsign());
|
||||||
Q_UNUSED(removed);
|
Q_UNUSED(removed);
|
||||||
CLogMessage(simulatorFsxP3D).warning("Adding probe failed: %1 %2") << simObject.getCallsign().asString() << simObject.getAircraftModelString();
|
CLogMessage(simulatorFsxP3D).warning("Adding probe failed: %1 %2") << simObject.getCallsign().asString() << simObject.getAircraftModelString();
|
||||||
simulatorFsxP3D->setUsingFsxTerrainProbe(false);
|
if (simulatorFsxP3D->isUsingFsxTerrainProbe())
|
||||||
|
{
|
||||||
|
CLogMessage(simulatorFsxP3D).warning("Disabling terrain probe");
|
||||||
|
simulatorFsxP3D->setUsingFsxTerrainProbe(false);
|
||||||
|
}
|
||||||
logGenericExceptionInfo = false;
|
logGenericExceptionInfo = false;
|
||||||
} // aircraft
|
} // aircraft
|
||||||
} // valid
|
} // valid
|
||||||
|
|||||||
Reference in New Issue
Block a user