30 , m_durationVariation(0)
57 return m_positionVariation;
141 return m_durationVariation;
176 return m_useCachedPositions;
188 return m_positionsAmount;
221void QQuick3DParticleAttractor::updateShapePositions()
223 m_shapePositionList.
clear();
224 if (!
system() || !m_shape)
229 if (m_useCachedPositions) {
232 if (m_positionsAmount > 0) {
233 pCount = m_positionsAmount;
237 auto pp = qobject_cast<QQuick3DParticle *>(
p);
238 pCount += pp->maxAmount();
245 m_shapePositionList.
reserve(pCount);
246 for (
int i = 0;
i < pCount;
i++)
249 m_shapePositionList.
clear();
253 m_shapeDirty =
false;
259 updateShapePositions();
275 float pEnd = std::min(1.0f, std::max(0.0f,
time /
duration));
279 if (m_hideAtEnd && pEnd >= 1.0f) {
284 float pStart = 1.0f - pEnd;
288 if (m_useCachedPositions)
289 pos += m_shapePositionList[sd.
index % m_shapePositionList.
size()];
294 if (!m_positionVariation.
isNull()) {
300 d->position = (pStart *
d->position) + (pEnd * m_particleTransform.
map(
pos));
qsizetype size() const noexcept
bool isEmpty() const noexcept
void reserve(qsizetype size)
QPoint map(const QPoint &point) const
Maps point by multiplying this matrix by point.
QQuick3DNode * parentNode() const
QQuick3DParticleSystem * m_system
virtual QVector3D getPosition(int particleIndex)=0
QQuick3DParticleSystem * system
QList< QQuick3DParticle * > m_particles
QQuick3DNode * m_systemSharedParent
void setUseCachedPositions(bool useCachedPositions)
void useCachedPositionsChanged()
void setShape(QQuick3DParticleAbstractShape *shape)
QQuick3DParticleAttractor(QQuick3DNode *parent=nullptr)
void positionVariationChanged()
QQuick3DParticleAbstractShape * shape
void positionsAmountChanged()
void setPositionVariation(const QVector3D &positionVariation)
void prepareToAffect() override
void setDuration(int duration)
void setPositionsAmount(int positionsAmount)
void setDurationVariation(int durationVariation)
void setHideAtEnd(bool hideAtEnd)
QVector3D positionVariation
void durationVariationChanged()
void affectParticle(const QQuick3DParticleData &sd, QQuick3DParticleDataCurrent *d, float time) override
int particleCount() const
The QVector3D class represents a vector or vertex in 3D space.
constexpr bool isNull() const noexcept
Returns true if the x, y, and z coordinates are set to 0.0, otherwise returns false.
constexpr float y() const noexcept
Returns the y coordinate of this point.
constexpr float x() const noexcept
Returns the x coordinate of this point.
constexpr float z() const noexcept
Returns the z coordinate of this point.
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE const float MIN_DURATION
\qmltype Attractor3D \inherits Affector3D \inqmlmodule QtQuick3D.Particles3D
QMatrix4x4 calculateParticleTransform(const QQuick3DNode *parent, const QQuick3DNode *systemSharedParent)
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent