Skip to content

Commit

Permalink
add support for elastic interpolation
Browse files Browse the repository at this point in the history
added support for elastic interpolation on state transitions

Diffs=
15d3e9961 add support for elastic interpolation (#8154)

Co-authored-by: hernan <[email protected]>
  • Loading branch information
bodymovin and bodymovin committed Sep 17, 2024
1 parent 72174ab commit e82e0a7
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .rive_head
Original file line number Diff line number Diff line change
@@ -1 +1 @@
95e58ca40da30dc4451a826c6e3b086b95fb05cf
15d3e996128108391263ae2fb2b952cac3aa34e1
6 changes: 3 additions & 3 deletions include/rive/animation/state_transition.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifndef _RIVE_STATE_TRANSITION_HPP_
#define _RIVE_STATE_TRANSITION_HPP_
#include "rive/animation/cubic_interpolator.hpp"
#include "rive/animation/keyframe_interpolator.hpp"
#include "rive/animation/state_transition_flags.hpp"
#include "rive/generated/animation/state_transition_base.hpp"
#include <stdio.h>
Expand Down Expand Up @@ -36,15 +36,15 @@ class StateTransition : public StateTransitionBase
}
LayerState* m_StateTo = nullptr;
uint32_t m_EvaluatedRandomWeight = 1;
CubicInterpolator* m_Interpolator = nullptr;
KeyFrameInterpolator* m_Interpolator = nullptr;

std::vector<TransitionCondition*> m_Conditions;
void addCondition(TransitionCondition* condition);

public:
~StateTransition() override;
const LayerState* stateTo() const { return m_StateTo; }
inline CubicInterpolator* interpolator() const { return m_Interpolator; }
inline KeyFrameInterpolator* interpolator() const { return m_Interpolator; }

inline uint32_t evaluatedRandomWeight() const { return m_EvaluatedRandomWeight; }
void evaluatedRandomWeight(uint32_t value) { m_EvaluatedRandomWeight = value; }
Expand Down
10 changes: 5 additions & 5 deletions src/animation/state_machine_instance.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include "rive/animation/animation_state_instance.hpp"
#include "rive/animation/animation_state.hpp"
#include "rive/animation/any_state.hpp"
#include "rive/animation/cubic_interpolator.hpp"
#include "rive/animation/keyframe_interpolator.hpp"
#include "rive/animation/entry_state.hpp"
#include "rive/animation/layer_state_flags.hpp"
#include "rive/animation/nested_linear_animation.hpp"
Expand Down Expand Up @@ -365,20 +365,20 @@ class StateMachineLayerInstance
m_holdAnimation = nullptr;
}

CubicInterpolator* cubic = nullptr;
KeyFrameInterpolator* interpolator = nullptr;
if (m_transition != nullptr && m_transition->interpolator() != nullptr)
{
cubic = m_transition->interpolator();
interpolator = m_transition->interpolator();
}

if (m_stateFrom != nullptr && m_mix < 1.0f)
{
auto fromMix = cubic != nullptr ? cubic->transform(m_mixFrom) : m_mixFrom;
auto fromMix = interpolator != nullptr ? interpolator->transform(m_mixFrom) : m_mixFrom;
m_stateFrom->apply(m_artboardInstance, fromMix);
}
if (m_currentState != nullptr)
{
auto mix = cubic != nullptr ? cubic->transform(m_mix) : m_mix;
auto mix = interpolator != nullptr ? interpolator->transform(m_mix) : m_mix;
m_currentState->apply(m_artboardInstance, mix);
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/animation/state_transition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ StatusCode StateTransition::onAddedDirty(CoreContext* context)
if (interpolatorId() != -1)
{
auto coreObject = context->resolve(interpolatorId());
if (coreObject == nullptr || !coreObject->is<CubicInterpolator>())
if (coreObject == nullptr || !coreObject->is<KeyFrameInterpolator>())
{
return StatusCode::MissingObject;
}
m_Interpolator = coreObject->as<CubicInterpolator>();
m_Interpolator = coreObject->as<KeyFrameInterpolator>();
}

for (auto condition : m_Conditions)
Expand Down

0 comments on commit e82e0a7

Please sign in to comment.