blob: 7f7824e616f080430da9ed6c7bce79d079511283 [file] [log] [blame]
#include "rive/importers/layer_state_importer.hpp"
#include "rive/animation/state_transition.hpp"
#include "rive/animation/layer_state.hpp"
#include "rive/animation/blend_state.hpp"
#include "rive/animation/blend_state_transition.hpp"
using namespace rive;
LayerStateImporter::LayerStateImporter(LayerState* state) : m_State(state) {}
void LayerStateImporter::addTransition(StateTransition* transition)
{
m_State->addTransition(transition);
}
bool LayerStateImporter::addBlendAnimation(BlendAnimation* animation)
{
if (!m_State->is<BlendState>())
{
return false;
}
auto blendState = m_State->as<BlendState>();
blendState->addAnimation(animation);
return true;
}
StatusCode LayerStateImporter::resolve()
{
if (m_State->is<BlendState>())
{
auto blendState = m_State->as<BlendState>();
for (auto transition : blendState->m_Transitions)
{
if (!transition->is<BlendStateTransition>())
{
continue;
}
auto blendStateTransition = transition->as<BlendStateTransition>();
auto exitId = blendStateTransition->exitBlendAnimationId();
if (exitId >= 0 && exitId < blendState->m_Animations.size())
{
blendStateTransition->m_ExitBlendAnimation =
blendState->m_Animations[exitId];
}
}
}
return StatusCode::Ok;
}