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);