#ifndef _RIVE_ANIMATION_STATE_INSTANCE_HPP_
#define _RIVE_ANIMATION_STATE_INSTANCE_HPP_

#include <string>
#include "rive/animation/state_instance.hpp"
#include "rive/animation/linear_animation_instance.hpp"

namespace rive {
class AnimationState;

/// Represents an instance of an animation state.
class AnimationStateInstance : public StateInstance {
private:
    LinearAnimationInstance m_AnimationInstance;
    bool m_KeepGoing;

public:
    AnimationStateInstance(const AnimationState* animationState, ArtboardInstance* instance);

    void advance(float seconds, Span<SMIInput*>) override;
    void apply(float mix) override;

    bool keepGoing() const override;

    const LinearAnimationInstance* animationInstance() const { return &m_AnimationInstance; }

    LinearAnimationInstance* animationInstance() { return &m_AnimationInstance; }
};
} // namespace rive
#endif