summaryrefslogtreecommitdiff
path: root/Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp')
-rw-r--r--Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp68
1 files changed, 68 insertions, 0 deletions
diff --git a/Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp b/Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp
new file mode 100644
index 0000000..a36406f
--- /dev/null
+++ b/Runtime/Filters/Mesh/SpriteRendererAnimationBinding.cpp
@@ -0,0 +1,68 @@
+#include "UnityPrefix.h"
+#include "Runtime/Animation/GenericAnimationBindingCache.h"
+#include "Runtime/Animation/AnimationClipBindings.h"
+#include "SpriteRenderer.h"
+#include "Runtime/Interfaces/IAnimationBinding.h"
+
+#if ENABLE_SPRITES
+
+static const char* kSpriteFrame = "m_Sprite";
+
+class SpriteRendererAnimationBinding : public IAnimationBinding
+{
+public:
+
+#if UNITY_EDITOR
+ virtual void GetAllAnimatableProperties (Object& targetObject, std::vector<EditorCurveBinding>& outProperties) const
+ {
+ AddPPtrBinding (outProperties, ClassID(SpriteRenderer), kSpriteFrame);
+ }
+#endif
+
+ virtual float GetFloatValue (const UnityEngine::Animation::BoundCurve& bind) const { return 0.0F; }
+ virtual void SetFloatValue (const UnityEngine::Animation::BoundCurve& bind, float value) const { }
+
+ virtual void SetPPtrValue (const UnityEngine::Animation::BoundCurve& bound, SInt32 value) const
+ {
+ SpriteRenderer* renderer = reinterpret_cast<SpriteRenderer*>(bound.targetObject);
+ renderer->SetSprite(PPtr<Sprite> (value));
+ }
+
+ virtual SInt32 GetPPtrValue (const UnityEngine::Animation::BoundCurve& bound) const
+ {
+ SpriteRenderer* renderer = reinterpret_cast<SpriteRenderer*>(bound.targetObject);
+ return renderer->GetSprite().GetInstanceID();
+ }
+
+ virtual bool GenerateBinding (const UnityStr& attribute, bool pptrCurve, UnityEngine::Animation::GenericBinding& outputBinding) const
+ {
+ if (attribute == kSpriteFrame && pptrCurve)
+ {
+ outputBinding.attribute = 0;
+ return true;
+ }
+
+ return false;
+ }
+
+ virtual ClassIDType BindValue (Object& target, const UnityEngine::Animation::GenericBinding& inputBinding, UnityEngine::Animation::BoundCurve& bound) const
+ {
+ return ClassID(Sprite);
+ }
+};
+
+static SpriteRendererAnimationBinding* gSpriteRendererBinding = NULL;
+
+void InitializeSpriteRendererAnimationBindingInterface ()
+{
+ Assert(gSpriteRendererBinding == NULL);
+ gSpriteRendererBinding = UNITY_NEW (SpriteRendererAnimationBinding, kMemAnimation);
+ UnityEngine::Animation::GetGenericAnimationBindingCache ().RegisterIAnimationBinding (ClassID(SpriteRenderer), UnityEngine::Animation::kSpriteRendererPPtrBinding, gSpriteRendererBinding);
+}
+
+void CleanupSpriteRendererAnimationBindingInterface ()
+{
+ UNITY_DELETE (gSpriteRendererBinding, kMemAnimation);
+}
+
+#endif \ No newline at end of file