Revert "Revert "Declare that animation-instance wants artboard-instance"" This reverts commit d398a90af7907f38d412c5ee060466c0f66bfb85.
diff --git a/include/rive/animation/blend_state_instance.hpp b/include/rive/animation/blend_state_instance.hpp index 9b1a120..38c5083 100644 --- a/include/rive/animation/blend_state_instance.hpp +++ b/include/rive/animation/blend_state_instance.hpp
@@ -23,7 +23,7 @@ const T* blendAnimation() const { return m_BlendAnimation; } const LinearAnimationInstance* animationInstance() const { return &m_AnimationInstance; } - BlendStateAnimationInstance(const T* blendAnimation, Artboard* instance) : + BlendStateAnimationInstance(const T* blendAnimation, ArtboardInstance* instance) : m_BlendAnimation(blendAnimation), m_AnimationInstance(blendAnimation->animation(), instance) {}
diff --git a/include/rive/animation/linear_animation_instance.hpp b/include/rive/animation/linear_animation_instance.hpp index d03b8db..dcbdc67 100644 --- a/include/rive/animation/linear_animation_instance.hpp +++ b/include/rive/animation/linear_animation_instance.hpp
@@ -8,7 +8,7 @@ class LinearAnimationInstance { private: const LinearAnimation* m_Animation = nullptr; - Artboard* m_ArtboardInstance; + ArtboardInstance* m_ArtboardInstance; float m_Time; float m_TotalTime; float m_LastTotalTime; @@ -18,7 +18,7 @@ int m_LoopValue = -1; public: - LinearAnimationInstance(const LinearAnimation*, Artboard* instance); + LinearAnimationInstance(const LinearAnimation*, ArtboardInstance* instance); // Advance the animation by the specified time. Returns true if the // animation will continue to animate after this advance.
diff --git a/include/rive/animation/nested_linear_animation.hpp b/include/rive/animation/nested_linear_animation.hpp index 7940c51..e96df87 100644 --- a/include/rive/animation/nested_linear_animation.hpp +++ b/include/rive/animation/nested_linear_animation.hpp
@@ -6,12 +6,13 @@ class LinearAnimationInstance; class NestedLinearAnimation : public NestedLinearAnimationBase { protected: - LinearAnimationInstance* m_AnimationInstance = nullptr; + std::unique_ptr<LinearAnimationInstance> m_AnimationInstance; public: - ~NestedLinearAnimation(); + NestedLinearAnimation(); + ~NestedLinearAnimation() override; - void initializeAnimation(Artboard* artboard) override; + void initializeAnimation(ArtboardInstance*) override; }; } // namespace rive
diff --git a/include/rive/animation/nested_remap_animation.hpp b/include/rive/animation/nested_remap_animation.hpp index 9303572..f71c229 100644 --- a/include/rive/animation/nested_remap_animation.hpp +++ b/include/rive/animation/nested_remap_animation.hpp
@@ -7,7 +7,7 @@ public: void timeChanged() override; void advance(float elapsedSeconds) override; - void initializeAnimation(Artboard* artboard) override; + void initializeAnimation(ArtboardInstance*) override; }; } // namespace rive
diff --git a/include/rive/animation/nested_state_machine.hpp b/include/rive/animation/nested_state_machine.hpp index d96c07b..aa30f02 100644 --- a/include/rive/animation/nested_state_machine.hpp +++ b/include/rive/animation/nested_state_machine.hpp
@@ -3,10 +3,12 @@ #include "rive/generated/animation/nested_state_machine_base.hpp" #include <stdio.h> namespace rive { + class ArtboardInstance; + class NestedStateMachine : public NestedStateMachineBase { public: void advance(float elapsedSeconds) override; - void initializeAnimation(Artboard* artboard) override; + void initializeAnimation(ArtboardInstance*) override; }; } // namespace rive
diff --git a/include/rive/nested_animation.hpp b/include/rive/nested_animation.hpp index bbc0a87..1f4491b 100644 --- a/include/rive/nested_animation.hpp +++ b/include/rive/nested_animation.hpp
@@ -3,6 +3,8 @@ #include "rive/generated/nested_animation_base.hpp" #include <stdio.h> namespace rive { + class ArtboardInstance; + class NestedAnimation : public NestedAnimationBase { public: StatusCode onAddedDirty(CoreContext* context) override; @@ -12,7 +14,7 @@ // Initialize the animation (make instances as necessary) from the // source artboard. - virtual void initializeAnimation(Artboard* artboard) = 0; + virtual void initializeAnimation(ArtboardInstance*) = 0; }; } // namespace rive
diff --git a/src/animation/linear_animation_instance.cpp b/src/animation/linear_animation_instance.cpp index 4e6e987..1c8badb 100644 --- a/src/animation/linear_animation_instance.cpp +++ b/src/animation/linear_animation_instance.cpp
@@ -6,7 +6,7 @@ using namespace rive; LinearAnimationInstance::LinearAnimationInstance(const LinearAnimation* animation, - Artboard* instance) : + ArtboardInstance* instance) : m_Animation(animation), m_ArtboardInstance(instance), m_Time(animation->enableWorkArea() ? (float)animation->workStart() / animation->fps() : 0),
diff --git a/src/animation/nested_linear_animation.cpp b/src/animation/nested_linear_animation.cpp index 2d418d1..e425c4f 100644 --- a/src/animation/nested_linear_animation.cpp +++ b/src/animation/nested_linear_animation.cpp
@@ -3,9 +3,10 @@ using namespace rive; -NestedLinearAnimation::~NestedLinearAnimation() { delete m_AnimationInstance; } +NestedLinearAnimation::NestedLinearAnimation() {} +NestedLinearAnimation::~NestedLinearAnimation() {} -void NestedLinearAnimation::initializeAnimation(Artboard* artboard) { - assert(m_AnimationInstance == nullptr); - m_AnimationInstance = new LinearAnimationInstance(artboard->animation(animationId()), artboard); +void NestedLinearAnimation::initializeAnimation(ArtboardInstance* artboard) { + m_AnimationInstance = std::make_unique<LinearAnimationInstance>(artboard->animation(animationId()), + artboard); } \ No newline at end of file
diff --git a/src/animation/nested_remap_animation.cpp b/src/animation/nested_remap_animation.cpp index fd146eb..2af1522 100644 --- a/src/animation/nested_remap_animation.cpp +++ b/src/animation/nested_remap_animation.cpp
@@ -10,7 +10,7 @@ } } -void NestedRemapAnimation::initializeAnimation(Artboard* artboard) { +void NestedRemapAnimation::initializeAnimation(ArtboardInstance* artboard) { Super::initializeAnimation(artboard); timeChanged(); }
diff --git a/src/animation/nested_state_machine.cpp b/src/animation/nested_state_machine.cpp index 2b3ad7c..139572a 100644 --- a/src/animation/nested_state_machine.cpp +++ b/src/animation/nested_state_machine.cpp
@@ -4,4 +4,4 @@ void NestedStateMachine::advance(float elapsedSeconds) {} -void NestedStateMachine::initializeAnimation(Artboard* artboard) {} \ No newline at end of file +void NestedStateMachine::initializeAnimation(ArtboardInstance*) {} \ No newline at end of file
diff --git a/src/nested_artboard.cpp b/src/nested_artboard.cpp index 156a9fd..5eec148 100644 --- a/src/nested_artboard.cpp +++ b/src/nested_artboard.cpp
@@ -82,9 +82,12 @@ // does require that we always use an artboard instance (not just the source // artboard) when working with nested artboards, but in general this is good // practice for any loaded Rive file. - if (m_NestedInstance != nullptr) { + assert(m_NestedInstance == nullptr || m_NestedInstance->isInstance()); + + if (m_NestedInstance != nullptr && m_NestedInstance->isInstance()) { + auto abi = static_cast<ArtboardInstance*>(m_NestedInstance); for (auto animation : m_NestedAnimations) { - animation->initializeAnimation(m_NestedInstance); + animation->initializeAnimation(abi); } } return Super::onAddedClean(context);