#include "rive/artboard.hpp"
#include "rive/animation/blend_state_transition.hpp"
#include "rive/animation/blend_state_instance.hpp"
#include "rive/animation/blend_state_1d_input.hpp"
#include "rive/animation/blend_state_1d_viewmodel.hpp"
#include "rive/animation/blend_state_direct.hpp"
#include "rive/animation/blend_state_1d_instance.hpp"
#include "rive/animation/blend_state_direct_instance.hpp"

using namespace rive;

const LinearAnimationInstance* BlendStateTransition::exitTimeAnimationInstance(
    const StateInstance* from) const
{
  if (from != nullptr)
  {
    switch (from->state()->coreType())
    {
      case BlendState1DInput::typeKey:
      case BlendState1DViewModel::typeKey:

        return static_cast<const BlendState1DInstance*>(from)
            ->animationInstance(m_ExitBlendAnimation);

      case BlendStateDirect::typeKey:

        return static_cast<const BlendStateDirectInstance*>(from)
            ->animationInstance(m_ExitBlendAnimation);
    }
  }

  return nullptr;
}

const LinearAnimation* BlendStateTransition::exitTimeAnimation(
    const LayerState* from) const
{
  if (m_ExitBlendAnimation != nullptr)
  {
    return m_ExitBlendAnimation->animation();
  }
  return nullptr;
}