| #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; |
| } |