| #ifndef _RIVE_LINEAR_ANIMATION_INSTANCE_HPP_ | |
| #define _RIVE_LINEAR_ANIMATION_INSTANCE_HPP_ | |
| #include "rive/artboard.hpp" | |
| #include "rive/scene.hpp" | |
| namespace rive | |
| { | |
| class LinearAnimation; | |
| class LinearAnimationInstance : public Scene | |
| { | |
| private: | |
| const LinearAnimation* m_Animation = nullptr; | |
| float m_Time; | |
| float m_TotalTime; | |
| float m_LastTotalTime; | |
| float m_SpilledTime; | |
| int m_Direction; | |
| bool m_DidLoop; | |
| int m_LoopValue = -1; | |
| public: | |
| LinearAnimationInstance(const LinearAnimation*, ArtboardInstance*); | |
| LinearAnimationInstance(LinearAnimationInstance const&); | |
| ~LinearAnimationInstance() override; | |
| // Advance the animation by the specified time. Returns true if the | |
| // animation will continue to animate after this advance. | |
| bool advance(float seconds); | |
| // Returns a pointer to the instance's animation | |
| const LinearAnimation* animation() const { return m_Animation; } | |
| // Returns the current point in time at which this instance has advance | |
| // to | |
| float time() const { return m_Time; } | |
| // Returns the direction that we are currently playing in | |
| int direction() const { return m_Direction; } | |
| // Update the direction of the animation instance, positive value for | |
| // forwards Negative for backwards | |
| void direction(int direction) | |
| { | |
| if (direction > 0) | |
| { | |
| m_Direction = 1; | |
| } | |
| else | |
| { | |
| m_Direction = -1; | |
| } | |
| } | |
| // Sets the animation's point in time. | |
| void time(float value); | |
| // Applies the animation instance to its artboard instance. The mix (a value | |
| // between 0 and 1) is the strength at which the animation is mixed with | |
| // other animations applied to the artboard. | |
| void apply(float mix = 1.0f) const { m_Animation->apply(m_ArtboardInstance, m_Time, mix); } | |
| // Set when the animation is advanced, true if the animation has stopped | |
| // (oneShot), reached the end (loop), or changed direction (pingPong) | |
| bool didLoop() const { return m_DidLoop; } | |
| float totalTime() const { return m_TotalTime; } | |
| float lastTotalTime() const { return m_LastTotalTime; } | |
| float spilledTime() const { return m_SpilledTime; } | |
| float durationSeconds() const override; | |
| // Forwarded from animation | |
| uint32_t fps() const; | |
| uint32_t duration() const; | |
| float speed() const; | |
| float startSeconds() const; | |
| // Returns either the animation's default or overridden loop values | |
| Loop loop() const override { return (Loop)loopValue(); } | |
| int loopValue() const; | |
| // Override the animation's default loop | |
| void loopValue(int value); | |
| bool isTranslucent() const override; | |
| bool advanceAndApply(float seconds) override; | |
| std::string name() const override; | |
| }; | |
| } // namespace rive | |
| #endif |