#include "rive/artboard.hpp"
#include "rive/animation/blend_state_transition.hpp"
#include "rive/animation/blend_state_instance.hpp"
#include "rive/animation/blend_state_1d.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 BlendState1D::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;
}