mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-20 20:40:29 +08:00
Ref T650, SimObject can handle SimulatedObject type (compared to NonATC)
This commit is contained in:
@@ -42,7 +42,7 @@ namespace BlackSimPlugin
|
|||||||
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign(), simEnvProvider, setupProvider, remoteAircraftProvider, logger))
|
m_interpolator(QSharedPointer<CInterpolatorMulti>::create(aircraft.getCallsign(), simEnvProvider, setupProvider, remoteAircraftProvider, logger))
|
||||||
{
|
{
|
||||||
this->resetCameraPositions();
|
this->resetCameraPositions();
|
||||||
m_type = aircraft.isTerrainProbe() ? TerrainProbe : Aircraft;
|
m_type = aircraft.isTerrainProbe() ? TerrainProbe : AircraftNonAtc;
|
||||||
m_interpolator->initCorrespondingModel(aircraft.getModel());
|
m_interpolator->initCorrespondingModel(aircraft.getModel());
|
||||||
m_callsignByteArray = aircraft.getCallsignAsString().toLatin1();
|
m_callsignByteArray = aircraft.getCallsignAsString().toLatin1();
|
||||||
}
|
}
|
||||||
@@ -51,7 +51,7 @@ namespace BlackSimPlugin
|
|||||||
{
|
{
|
||||||
m_aircraft = aircraft;
|
m_aircraft = aircraft;
|
||||||
m_callsignByteArray = aircraft.getCallsignAsString().toLatin1();
|
m_callsignByteArray = aircraft.getCallsignAsString().toLatin1();
|
||||||
m_type = aircraft.isTerrainProbe() ? TerrainProbe : Aircraft;
|
m_type = aircraft.isTerrainProbe() ? TerrainProbe : AircraftNonAtc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSimConnectObject::setAircraftModelString(const QString &modelString)
|
void CSimConnectObject::setAircraftModelString(const QString &modelString)
|
||||||
@@ -79,7 +79,8 @@ namespace BlackSimPlugin
|
|||||||
if (CBuildConfig::isLocalDeveloperDebugBuild())
|
if (CBuildConfig::isLocalDeveloperDebugBuild())
|
||||||
{
|
{
|
||||||
const SimObjectType type = requestIdToType(m_requestId);
|
const SimObjectType type = requestIdToType(m_requestId);
|
||||||
Q_ASSERT_X(type == this->getType(), Q_FUNC_INFO, "Type mismatch");
|
const bool same = CSimConnectObject::isSameTypeGroup(type, this->getType());
|
||||||
|
Q_ASSERT_X(same, Q_FUNC_INFO, "Type mismatch");
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD os = 0;
|
DWORD os = 0;
|
||||||
@@ -88,7 +89,8 @@ namespace BlackSimPlugin
|
|||||||
case TerrainProbe:
|
case TerrainProbe:
|
||||||
os = static_cast<DWORD>(CSimulatorFsxCommon::offsetSimObjTerrainProbe(offset));
|
os = static_cast<DWORD>(CSimulatorFsxCommon::offsetSimObjTerrainProbe(offset));
|
||||||
break;
|
break;
|
||||||
case Aircraft:
|
case AircraftNonAtc:
|
||||||
|
case AircraftSimulatedObject:
|
||||||
default:
|
default:
|
||||||
os = static_cast<DWORD>(CSimulatorFsxCommon::offsetSimObjAircraft(offset));
|
os = static_cast<DWORD>(CSimulatorFsxCommon::offsetSimObjAircraft(offset));
|
||||||
break;
|
break;
|
||||||
@@ -239,25 +241,38 @@ namespace BlackSimPlugin
|
|||||||
CSimConnectObject::SimObjectType CSimConnectObject::requestIdToType(DWORD requestId)
|
CSimConnectObject::SimObjectType CSimConnectObject::requestIdToType(DWORD requestId)
|
||||||
{
|
{
|
||||||
if (CSimulatorFsxCommon::isRequestForSimObjTerrainProbe(requestId)) { return TerrainProbe; }
|
if (CSimulatorFsxCommon::isRequestForSimObjTerrainProbe(requestId)) { return TerrainProbe; }
|
||||||
if (CSimulatorFsxCommon::isRequestForSimObjAircraft(requestId)) { return Aircraft; }
|
if (CSimulatorFsxCommon::isRequestForSimObjAircraft(requestId)) { return AircraftNonAtc; }
|
||||||
Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong range");
|
Q_ASSERT_X(false, Q_FUNC_INFO, "Wrong range");
|
||||||
return Aircraft;
|
return AircraftNonAtc;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString &CSimConnectObject::typeToString(CSimConnectObject::SimObjectType type)
|
const QString &CSimConnectObject::typeToString(CSimConnectObject::SimObjectType type)
|
||||||
{
|
{
|
||||||
static const QString a("aircraft");
|
static const QString a1("aircraft (non ATC)");
|
||||||
|
static const QString a2("aircraft (sim.object)");
|
||||||
static const QString p("probe");
|
static const QString p("probe");
|
||||||
static const QString u("unknown");
|
static const QString u("unknown");
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case Aircraft: return a;
|
case AircraftNonAtc: return a1;
|
||||||
case TerrainProbe: return p;
|
case AircraftSimulatedObject: return a2;
|
||||||
|
case TerrainProbe: return p;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
return u;
|
return u;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimConnectObject::isSameTypeGroup(CSimConnectObject::SimObjectType t1, CSimConnectObject::SimObjectType t2)
|
||||||
|
{
|
||||||
|
if (t1 == t2) { return true; }
|
||||||
|
return isAircraft(t1) && isAircraft(t2);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CSimConnectObject::isAircraft(CSimConnectObject::SimObjectType type)
|
||||||
|
{
|
||||||
|
return CSimConnectObject::AircraftNonAtc == type || CSimConnectObject::AircraftSimulatedObject;
|
||||||
|
}
|
||||||
|
|
||||||
bool CSimConnectObjects::insert(const CSimConnectObject &simObject, bool updateTimestamp)
|
bool CSimConnectObjects::insert(const CSimConnectObject &simObject, bool updateTimestamp)
|
||||||
{
|
{
|
||||||
if (!simObject.hasCallsign()) { return false; }
|
if (!simObject.hasCallsign()) { return false; }
|
||||||
@@ -465,6 +480,13 @@ namespace BlackSimPlugin
|
|||||||
return objs;
|
return objs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<CSimConnectObject> CSimConnectObjects::getAircraft() const
|
||||||
|
{
|
||||||
|
QList<CSimConnectObject> l = this->getByType(CSimConnectObject::AircraftNonAtc);
|
||||||
|
l.append(this->getByType(CSimConnectObject::AircraftSimulatedObject));
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
CSimConnectObject CSimConnectObjects::getNotPendingProbe() const
|
CSimConnectObject CSimConnectObjects::getNotPendingProbe() const
|
||||||
{
|
{
|
||||||
for (const CSimConnectObject &simObject : *this)
|
for (const CSimConnectObject &simObject : *this)
|
||||||
@@ -499,6 +521,11 @@ namespace BlackSimPlugin
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSimConnectObjects::containsAircraft() const
|
||||||
|
{
|
||||||
|
return this->containsType(CSimConnectObject::AircraftNonAtc) || this->containsType(CSimConnectObject::AircraftSimulatedObject);
|
||||||
|
}
|
||||||
|
|
||||||
int CSimConnectObjects::removeCallsigns(const CCallsignSet &callsigns)
|
int CSimConnectObjects::removeCallsigns(const CCallsignSet &callsigns)
|
||||||
{
|
{
|
||||||
int c = 0;
|
int c = 0;
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ namespace BlackSimPlugin
|
|||||||
//! Type
|
//! Type
|
||||||
enum SimObjectType
|
enum SimObjectType
|
||||||
{
|
{
|
||||||
Aircraft,
|
AircraftNonAtc,
|
||||||
|
AircraftSimulatedObject,
|
||||||
TerrainProbe,
|
TerrainProbe,
|
||||||
AllTypes
|
AllTypes
|
||||||
};
|
};
|
||||||
@@ -69,8 +70,17 @@ namespace BlackSimPlugin
|
|||||||
//! Object type
|
//! Object type
|
||||||
SimObjectType getType() const { return m_type; }
|
SimObjectType getType() const { return m_type; }
|
||||||
|
|
||||||
|
//! Type as string
|
||||||
|
const QString &getTypeAsString() const { return typeToString(m_type); }
|
||||||
|
|
||||||
//! Aircraft?
|
//! Aircraft?
|
||||||
bool isAircraft() const { return this->getType() == Aircraft; }
|
bool isAircraft() const { return this->getType() == AircraftNonAtc || this->getType() == AircraftSimulatedObject; }
|
||||||
|
|
||||||
|
//! Aircraft simulated object?
|
||||||
|
bool isAircraftSimulatedObject() const { return this->getType() == AircraftSimulatedObject; }
|
||||||
|
|
||||||
|
//! Aircraft NON ATC?
|
||||||
|
bool isAircraftNonAtc() const { return this->getType() == AircraftNonAtc; }
|
||||||
|
|
||||||
//! Probe?
|
//! Probe?
|
||||||
bool isTerrainProbe() const { return this->getType() == TerrainProbe; }
|
bool isTerrainProbe() const { return this->getType() == TerrainProbe; }
|
||||||
@@ -282,9 +292,15 @@ namespace BlackSimPlugin
|
|||||||
//! Type to string
|
//! Type to string
|
||||||
static const QString &typeToString(SimObjectType type);
|
static const QString &typeToString(SimObjectType type);
|
||||||
|
|
||||||
|
//! Same type
|
||||||
|
static bool isSameTypeGroup(SimObjectType t1, SimObjectType t2);
|
||||||
|
|
||||||
|
//! Aircraft?
|
||||||
|
static bool isAircraft(SimObjectType type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft
|
BlackMisc::Simulation::CSimulatedAircraft m_aircraft; //!< corresponding aircraft
|
||||||
SimObjectType m_type = Aircraft;
|
SimObjectType m_type = AircraftNonAtc;
|
||||||
DWORD m_requestId = 0;
|
DWORD m_requestId = 0;
|
||||||
DWORD m_objectId = 0;
|
DWORD m_objectId = 0;
|
||||||
bool m_validRequestId = false;
|
bool m_validRequestId = false;
|
||||||
@@ -297,13 +313,13 @@ namespace BlackSimPlugin
|
|||||||
int m_addingExceptions = 0; //!< exception when added
|
int m_addingExceptions = 0; //!< exception when added
|
||||||
int m_addingDirectlyRemoved = 0; //!< added, but removed directly afterwards
|
int m_addingDirectlyRemoved = 0; //!< added, but removed directly afterwards
|
||||||
qint64 m_tsCreated = -1;
|
qint64 m_tsCreated = -1;
|
||||||
GUID m_cameraGuid;
|
GUID m_cameraGuid;
|
||||||
SIMCONNECT_DATA_XYZ m_cameraPosition;
|
SIMCONNECT_DATA_XYZ m_cameraPosition;
|
||||||
SIMCONNECT_DATA_PBH m_cameraRotation;
|
SIMCONNECT_DATA_PBH m_cameraRotation;
|
||||||
QByteArray m_callsignByteArray;
|
QByteArray m_callsignByteArray;
|
||||||
QString m_observerName;
|
QString m_observerName;
|
||||||
BlackMisc::Aviation::CAircraftLights m_currentLightsInSim { nullptr }; //!< current lights to know state for toggling
|
BlackMisc::Aviation::CAircraftLights m_currentLightsInSim { nullptr }; //!< current lights to know state for toggling
|
||||||
BlackMisc::Aviation::CAircraftLights m_lightsAsSent { nullptr }; //!< lights as sent to simulator
|
BlackMisc::Aviation::CAircraftLights m_lightsAsSent { nullptr }; //!< lights as sent to simulator
|
||||||
SIMCONNECT_PERIOD m_requestSimDataPeriod = SIMCONNECT_PERIOD_NEVER; //!< how often do we query ground elevation
|
SIMCONNECT_PERIOD m_requestSimDataPeriod = SIMCONNECT_PERIOD_NEVER; //!< how often do we query ground elevation
|
||||||
QSharedPointer<BlackMisc::Simulation::CInterpolatorMulti> m_interpolator; //!< shared pointer because CSimConnectObject can be copied
|
QSharedPointer<BlackMisc::Simulation::CInterpolatorMulti> m_interpolator; //!< shared pointer because CSimConnectObject can be copied
|
||||||
};
|
};
|
||||||
@@ -387,6 +403,9 @@ namespace BlackSimPlugin
|
|||||||
//! All probes
|
//! All probes
|
||||||
QList<CSimConnectObject> getProbes() const { return this->getByType(CSimConnectObject::TerrainProbe); }
|
QList<CSimConnectObject> getProbes() const { return this->getByType(CSimConnectObject::TerrainProbe); }
|
||||||
|
|
||||||
|
//! All aircraft
|
||||||
|
QList<CSimConnectObject> getAircraft() const;
|
||||||
|
|
||||||
//! Get a non pending probe
|
//! Get a non pending probe
|
||||||
CSimConnectObject getNotPendingProbe() const;
|
CSimConnectObject getNotPendingProbe() const;
|
||||||
|
|
||||||
@@ -395,6 +414,12 @@ namespace BlackSimPlugin
|
|||||||
|
|
||||||
//! Contains object of type
|
//! Contains object of type
|
||||||
bool containsType(CSimConnectObject::SimObjectType type) const;
|
bool containsType(CSimConnectObject::SimObjectType type) const;
|
||||||
|
|
||||||
|
//! Probe?
|
||||||
|
bool containsProbe() const { return this->containsType(CSimConnectObject::TerrainProbe); }
|
||||||
|
|
||||||
|
//! Aircraft?
|
||||||
|
bool containsAircraft() const;
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|||||||
Reference in New Issue
Block a user