#ifndef _RIVE_STATE_INSTANCE_HPP_
#define _RIVE_STATE_INSTANCE_HPP_

#include <string>
#include <stddef.h>

namespace rive {
    class LayerState;
    class SMIInput;
    class ArtboardInstance;

    /// Represents an instance of a state tracked by the State Machine.
    class StateInstance {
    private:
        const LayerState* m_LayerState;

    public:
        StateInstance(const LayerState* layerState);
        virtual ~StateInstance();
        virtual void advance(float seconds, SMIInput** inputs) = 0;
        virtual void apply(float mix) = 0;

        /// Returns true when the State Machine needs to keep advancing this
        /// state.
        virtual bool keepGoing() const = 0;

        const LayerState* state() const;
    };
} // namespace rive
#endif