#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