12 using namespace swift::config;
13 using namespace swift::misc::aviation;
14 using namespace swift::misc::physical_quantities;
15 using namespace swift::misc::network;
20 namespace swift::misc::simulation
22 bool CInterpolationAndRenderingSetupBase::setSendingGndFlagToSimulator(
bool sendFLag)
24 if (sendFLag == m_sendGndToSim) {
return false; }
25 m_sendGndToSim = sendFLag;
29 bool CInterpolationAndRenderingSetupBase::setPitchOnGround(
const CAngle &pitchOnGround)
31 if (pitchOnGround == m_pitchOnGround) {
return false; }
32 m_pitchOnGround = pitchOnGround;
36 void CInterpolationAndRenderingSetupBase::consolidateWithClient(
const CClient &client)
44 const int m =
static_cast<int>(mode);
45 if (m_interpolatorMode == m) {
return false; }
46 m_interpolatorMode = m;
50 bool CInterpolationAndRenderingSetupBase::setInterpolatorMode(
const QString &mode)
59 static const QString l(
"linear");
60 static const QString s(
"spline");
64 case Linear:
return l;
65 case Spline:
return s;
70 bool CInterpolationAndRenderingSetupBase::setLogInterpolation(
bool log)
72 if (m_logInterpolation == log) {
return false; }
73 m_logInterpolation = log;
77 bool CInterpolationAndRenderingSetupBase::setEnabledAircraftParts(
bool enabled)
79 if (m_enabledAircraftParts == enabled) {
return false; }
80 m_enabledAircraftParts = enabled;
84 bool CInterpolationAndRenderingSetupBase::maskEnabledAircraftParts(
bool mask)
86 const bool masked = mask && m_enabledAircraftParts;
87 return this->setEnabledAircraftParts(masked);
101 case IndexInterpolatorModeAsString:
return QVariant::fromValue(this->getInterpolatorModeAsString());
107 return QStringLiteral(
"Wrong index for %1").arg(i);
115 case IndexLogInterpolation: m_logInterpolation = variant.
toBool();
return;
116 case IndexSimulatorDebugMessages: m_simulatorDebugMessages = variant.
toBool();
return;
117 case IndexForceFullInterpolation: m_forceFullInterpolation = variant.
toBool();
return;
118 case IndexEnabledAircraftParts: m_enabledAircraftParts = variant.
toBool();
return;
119 case IndexSendGndFlagToSimulator: m_sendGndToSim = variant.
toBool();
return;
120 case IndexInterpolatorMode: m_interpolatorMode = variant.
toInt();
return;
121 case IndexInterpolatorModeAsString: this->setInterpolatorMode(variant.
toString());
return;
122 case IndexFixSceneryOffset: m_fixSceneryOffset = variant.
toBool();
return;
123 case IndexPitchOnGround: m_pitchOnGround.setPropertyByIndex(index.
copyFrontRemoved(), variant);
return;
129 QString CInterpolationAndRenderingSetupBase::convertToQString(
bool i18n)
const
132 return QStringLiteral(
"Interpolator: ") % this->getInterpolatorModeAsString() %
133 QStringLiteral(
" | Dbg.sim.msgs: ") % boolToYesNo(m_simulatorDebugMessages) %
134 QStringLiteral(
" | log interpolation: ") % boolToYesNo(m_logInterpolation) %
135 QStringLiteral(
" | force VTOL interpolation: ") % boolToYesNo(m_forceFullInterpolation) %
136 QStringLiteral(
" | enable parts: ") % boolToYesNo(m_enabledAircraftParts) %
137 QStringLiteral(
" | send gnd: ") % boolToYesNo(m_sendGndToSim) %
138 QStringLiteral(
" | fix.scenery offset: ") % boolToYesNo(m_fixSceneryOffset) %
139 QStringLiteral(
" | pitch on gnd.: ") % m_pitchOnGround.valueRoundedWithUnit(CAngleUnit::deg(), 1,
true);
142 bool CInterpolationAndRenderingSetupBase::canHandleIndex(
int index)
144 return index >= CInterpolationAndRenderingSetupBase::IndexLogInterpolation &&
145 index <= CInterpolationAndRenderingSetupBase::IndexFixSceneryOffset;
148 int CInterpolationAndRenderingSetupGlobal::InfiniteAircraft() {
return 100; }
150 bool CInterpolationAndRenderingSetupGlobal::isRenderingEnabled()
const
152 if (m_maxRenderedAircraft < 1) {
return false; }
153 if (!isMaxDistanceRestricted()) {
return true; }
154 return m_maxRenderedDistance.isPositiveWithEpsilonConsidered();
157 bool CInterpolationAndRenderingSetupGlobal::isRenderingRestricted()
const
159 return isRenderingEnabled() && (isMaxAircraftRestricted() || isMaxDistanceRestricted());
162 int CInterpolationAndRenderingSetupGlobal::getMaxRenderedAircraft()
const
164 return (m_maxRenderedAircraft <= InfiniteAircraft()) ? m_maxRenderedAircraft : InfiniteAircraft();
167 bool CInterpolationAndRenderingSetupGlobal::setMaxRenderedAircraft(
int maxRenderedAircraft)
169 if (maxRenderedAircraft == m_maxRenderedAircraft) {
return false; }
170 if (maxRenderedAircraft < 1)
173 this->disableRendering();
175 else if (maxRenderedAircraft >= InfiniteAircraft()) { m_maxRenderedAircraft = InfiniteAircraft(); }
176 else { m_maxRenderedAircraft = maxRenderedAircraft; }
180 bool CInterpolationAndRenderingSetupGlobal::setMaxRenderedDistance(
const CLength &distance)
183 if (distance == m_maxRenderedDistance) {
return false; }
186 m_maxRenderedDistance =
CLength(0.0,
nullptr);
191 this->disableRendering();
196 m_maxRenderedDistance = distance;
201 void CInterpolationAndRenderingSetupGlobal::clearMaxRenderedDistance()
203 this->setMaxRenderedDistance(
CLength(0.0,
nullptr));
206 bool CInterpolationAndRenderingSetupGlobal::isMaxAircraftRestricted()
const
208 return m_maxRenderedAircraft < InfiniteAircraft();
211 void CInterpolationAndRenderingSetupGlobal::clearAllRenderingRestrictions()
213 m_maxRenderedDistance =
CLength(0,
nullptr);
214 m_maxRenderedAircraft = InfiniteAircraft();
217 void CInterpolationAndRenderingSetupGlobal::disableRendering()
219 m_maxRenderedAircraft = 0;
220 m_maxRenderedDistance =
CLength(0, CLengthUnit::NM());
223 bool CInterpolationAndRenderingSetupGlobal::isMaxDistanceRestricted()
const
225 return !m_maxRenderedDistance.isNull();
228 QString CInterpolationAndRenderingSetupGlobal::getRenderRestrictionText()
const
230 if (!this->isRenderingRestricted()) {
return "none"; }
232 if (this->isMaxAircraftRestricted())
236 if (this->isMaxDistanceRestricted())
239 rt.
append(this->getMaxRenderedDistance().valueRoundedWithUnit(CLengthUnit::NM(), 0));
256 QString CInterpolationAndRenderingSetupGlobal::convertToQString(
bool i18n)
const
259 return CInterpolationAndRenderingSetupBase::convertToQString(i18n) % QStringLiteral(
" max.aircraft:") %
260 QString::number(m_maxRenderedAircraft) % QStringLiteral(
" max.distance:") %
261 m_maxRenderedDistance.valueRoundedWithUnit(CLengthUnit::NM(), 2);
274 if (CInterpolationAndRenderingSetupBase::canHandleIndex(i))
276 return CInterpolationAndRenderingSetupBase::propertyByIndex(index);
278 return CValueObject::propertyByIndex(index);
291 case IndexMaxRenderedAircraft: m_maxRenderedAircraft = variant.
toInt();
return;
292 case IndexMaxRenderedDistance: m_maxRenderedDistance = variant.
value<
CLength>();
return;
295 if (CInterpolationAndRenderingSetupBase::canHandleIndex(i))
297 CInterpolationAndRenderingSetupBase::setPropertyByIndex(index, variant);
300 CValueObject::setPropertyByIndex(index, variant);
303 CInterpolationAndRenderingSetupPerCallsign::CInterpolationAndRenderingSetupPerCallsign(
315 diff.
push_back(IndexSimulatorDebugMessages);
319 diff.
push_back(IndexForceFullInterpolation);
323 diff.
push_back(IndexEnabledAircraftParts);
327 diff.
push_back(IndexSendGndFlagToSimulator);
341 const bool equal = il.
isEmpty();
Value object encapsulating a list of property indexes.
Non-owning reference to a CPropertyIndex with a subset of its features.
Q_REQUIRED_RESULT CPropertyIndexRef copyFrontRemoved() const
Copy with first element removed.
CastType frontCasted() const
First element casted to given type, usually the PropertIndex enum.
bool isMyself() const
Myself index, used with nesting.
void push_back(const T &value)
Appends an element at the end of the sequence.
bool isEmpty() const
Synonym for empty.
Value object encapsulating information of a callsign.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
ColumnIndex
Base class enums.
bool hasAircraftPartsCapability() const
Supports aircraft parts?
Physical unit angle (radians, degrees)
Physical unit length (length)
bool isNegativeWithEpsilonConsidered() const
Value <= 0 epsilon considered.
bool isNull() const
Is quantity null?
bool isZeroEpsilonConsidered() const
Quantity value <= epsilon.
Value object for interpolator and rendering base class.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
ColumnIndex
Properties by index.
InterpolatorMode
Interpolator type.
bool logInterpolation() const
Log.interpolation.
bool isSendingGndFlagToSimulator() const
Send GND flag to simulator.
bool isFixingSceneryOffset() const
Fix scenery offset if it has been detected.
bool isAircraftPartsEnabled() const
Aircraft parts enabled (still requires the other aircraft to send parts)
InterpolatorMode getInterpolatorMode() const
Interpolator mode.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
const physical_quantities::CAngle & getPitchOnGround() const
Force a given pitch on ground.
bool showSimulatorDebugMessages() const
Debugging messages for simulation.
bool isForcingFullInterpolation() const
Full interpolation (skip optimizations like checking if aircraft moves etc.)
Value object for interpolator and rendering.
Value object for interpolator and rendering per callsign.
bool isEqualToGlobal(const CInterpolationAndRenderingSetupGlobal &globalSetup) const
Equal to global setup?
static const CInterpolationAndRenderingSetupPerCallsign & null()
NULL object.
void setPropertyByIndex(CPropertyIndexRef index, const QVariant &variant)
Set property by index.
QVariant propertyByIndex(CPropertyIndexRef index) const
Property by index.
CPropertyIndexList unequalToGlobal(const CInterpolationAndRenderingSetupGlobal &globalSetup) const
Properties unequal to global setup.
QString & append(QChar ch)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString number(double n, char format, int precision)
QVariant fromValue(T &&value)
bool toBool() const const
int toInt(bool *ok) const const
QString toString() const const
#define SWIFT_DEFINE_VALUEOBJECT_MIXINS(Namespace, Class)
Explicit template definition of mixins for a CValueObject subclass.
#define SWIFT_VERIFY_X(COND, WHERE, WHAT)
A weaker kind of assert.