| #include "rive/animation/layer_state.hpp" |
| #include "rive/animation/transition_bool_condition.hpp" |
| #include "rive/importers/import_stack.hpp" |
| #include "rive/importers/state_machine_layer_importer.hpp" |
| #include "rive/generated/animation/state_machine_layer_base.hpp" |
| #include "rive/animation/state_transition.hpp" |
| #include "rive/animation/system_state_instance.hpp" |
| |
| using namespace rive; |
| |
| LayerState::~LayerState() { |
| for (auto transition : m_Transitions) { |
| delete transition; |
| } |
| } |
| |
| StatusCode LayerState::onAddedDirty(CoreContext* context) { |
| StatusCode code; |
| for (auto transition : m_Transitions) { |
| if ((code = transition->onAddedDirty(context)) != StatusCode::Ok) { |
| return code; |
| } |
| } |
| return StatusCode::Ok; |
| } |
| |
| StatusCode LayerState::onAddedClean(CoreContext* context) { |
| StatusCode code; |
| for (auto transition : m_Transitions) { |
| if ((code = transition->onAddedClean(context)) != StatusCode::Ok) { |
| return code; |
| } |
| } |
| return StatusCode::Ok; |
| } |
| |
| StatusCode LayerState::import(ImportStack& importStack) { |
| auto layerImporter = |
| importStack.latest<StateMachineLayerImporter>(StateMachineLayerBase::typeKey); |
| if (layerImporter == nullptr) { |
| return StatusCode::MissingObject; |
| } |
| layerImporter->addState(this); |
| return Super::import(importStack); |
| } |
| |
| void LayerState::addTransition(StateTransition* transition) { m_Transitions.push_back(transition); } |
| |
| std::unique_ptr<StateInstance> LayerState::makeInstance(ArtboardInstance* instance) const { |
| return std::make_unique<SystemStateInstance>(this, instance); |
| } |