// Copyright (C) 2021 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #ifndef QQUICK3DPARTICLESPRITESEQUENCE_H #define QQUICK3DPARTICLESPRITESEQUENCE_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include QT_BEGIN_NAMESPACE class QQuick3DParticleSpriteParticle; class Q_QUICK3DPARTICLES_EXPORT QQuick3DParticleSpriteSequence : public QObject, public QQmlParserStatus { Q_OBJECT Q_PROPERTY(int frameCount READ frameCount WRITE setFrameCount NOTIFY frameCountChanged) Q_PROPERTY(int frameIndex READ frameIndex WRITE setFrameIndex NOTIFY frameIndexChanged) Q_PROPERTY(bool interpolate READ interpolate WRITE setInterpolate NOTIFY interpolateChanged) Q_PROPERTY(int duration READ duration WRITE setDuration NOTIFY durationChanged) Q_PROPERTY(int durationVariation READ durationVariation WRITE setDurationVariation NOTIFY durationVariationChanged) Q_PROPERTY(bool randomStart READ randomStart WRITE setRandomStart NOTIFY randomStartChanged) Q_PROPERTY(AnimationDirection animationDirection READ animationDirection WRITE setAnimationDirection NOTIFY animationDirectionChanged) QML_NAMED_ELEMENT(SpriteSequence3D) Q_INTERFACES(QQmlParserStatus) QML_ADDED_IN_VERSION(6, 2) public: enum AnimationDirection { Normal = 0, Reverse, Alternate, AlternateReverse, SingleFrame }; Q_ENUM(AnimationDirection) QQuick3DParticleSpriteSequence(QObject *parent = nullptr); ~QQuick3DParticleSpriteSequence() override; int frameCount() const; int frameIndex() const; bool interpolate() const; int duration() const; int durationVariation() const; bool randomStart() const; AnimationDirection animationDirection() const; public Q_SLOTS: void setFrameCount(int frameCount); void setFrameIndex(int frameIndex); void setInterpolate(bool interpolate); void setDuration(int duration); void setDurationVariation(int durationVariation); void setRandomStart(bool randomStart); void setAnimationDirection(QQuick3DParticleSpriteSequence::AnimationDirection animationDirection); Q_SIGNALS: void frameCountChanged(); void frameIndexChanged(); void interpolateChanged(); void durationChanged(); void durationVariationChanged(); void randomStartChanged(); void animationDirectionChanged(); protected: // From QQmlParserStatus void componentComplete() override; void classBegin() override {} private: friend class QQuick3DParticleSpriteParticle; friend class QQuick3DParticleSystem; void markNodesDirty(); float firstFrame(int index, bool singleFrame); QQuick3DParticleSpriteParticle *m_parentParticle = nullptr; int m_frameCount = 1; int m_frameIndex = 0; bool m_interpolate = true; int m_duration = -1; int m_durationVariation = 0; bool m_randomStart = false; AnimationDirection m_animationDirection = AnimationDirection::Normal; }; QT_END_NAMESPACE #endif // QQUICK3DPARTICLESPRITESEQUENCE_H