#ifndef _RIVE_BLEND_STATE_TRANSITION_HPP_
#define _RIVE_BLEND_STATE_TRANSITION_HPP_
#include "rive/generated/animation/blend_state_transition_base.hpp"
#include <stdio.h>
namespace rive {
    class BlendAnimation;
    class LayerStateImporter;
    class BlendStateTransition : public BlendStateTransitionBase {
        friend class LayerStateImporter;

    private:
        BlendAnimation* m_ExitBlendAnimation = nullptr;

    public:
        BlendAnimation* exitBlendAnimation() const {
            return m_ExitBlendAnimation;
        }

        const LinearAnimationInstance*
        exitTimeAnimationInstance(const StateInstance* from) const override;

        const LinearAnimation*
        exitTimeAnimation(const LayerState* from) const override;
    };

} // namespace rive

#endif