blob: 3dc48ee5228dff00e9ba8996d6ab96e2ec0553f1 [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>();
size_t exitId = blendStateTransition->exitBlendAnimationId();
if (exitId < blendState->m_Animations.size())
{
blendStateTransition->m_ExitBlendAnimation = blendState->m_Animations[exitId];
}
}
}
return StatusCode::Ok;
}