| #include "rive/animation/animation_state_instance.hpp" |
| #include "rive/animation/animation_state.hpp" |
| |
| using namespace rive; |
| |
| static LinearAnimation emptyAnimation; |
| |
| AnimationStateInstance::AnimationStateInstance(const AnimationState* state, |
| ArtboardInstance* instance) : |
| StateInstance(state), |
| // We're careful to always instance a valid animation here as the |
| // StateMachine makes assumptions about AnimationState's producing valid |
| // AnimationStateInstances with backing animations. This was discovered when |
| // using Clang address sanitizer. We previously returned a |
| // SystemStateInstance (basically a no-op StateMachine state) which would |
| // cause bad casts in parts of the code where we assumed AnimationStates |
| // would have create AnimationStateInstances. |
| m_AnimationInstance(state->animation() ? state->animation() : &emptyAnimation, instance), |
| m_KeepGoing(true) {} |
| |
| void AnimationStateInstance::advance(float seconds, Span<SMIInput*>) { |
| m_KeepGoing = m_AnimationInstance.advance(seconds); |
| } |
| |
| void AnimationStateInstance::apply(float mix) { m_AnimationInstance.apply(mix); } |
| |
| bool AnimationStateInstance::keepGoing() const { return m_KeepGoing; } |