diff options
Diffstat (limited to 'Runtime/Mono/MonoBehaviourAnimationBinding.cpp')
-rw-r--r-- | Runtime/Mono/MonoBehaviourAnimationBinding.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Runtime/Mono/MonoBehaviourAnimationBinding.cpp b/Runtime/Mono/MonoBehaviourAnimationBinding.cpp new file mode 100644 index 0000000..d077acd --- /dev/null +++ b/Runtime/Mono/MonoBehaviourAnimationBinding.cpp @@ -0,0 +1,66 @@ +#include "UnityPrefix.h" +#include "Runtime/Animation/GenericAnimationBindingCache.h" +#include "Runtime/Animation/AnimationClipBindings.h" +#include "Runtime/Animation/BoundCurve.h" +#include "MonoBehaviour.h" +#include "Runtime/Interfaces/IAnimationBinding.h" +#include "MonoScript.h" + +static const char* kEnabledStr = "m_Enabled"; + +class MonoBehaviourPropertyBinding : public IAnimationBinding +{ +public: + +#if UNITY_EDITOR + virtual void GetAllAnimatableProperties (Object& targetObject, std::vector<EditorCurveBinding>& outProperties) const + { + MonoBehaviour* beh = reinterpret_cast<MonoBehaviour *> (&targetObject); + MonoScript& script = *beh->GetScript (); + + outProperties.push_back(EditorCurveBinding ("", ClassID(MonoBehaviour), &script, kEnabledStr, false)); + } +#endif + + virtual float GetFloatValue (const UnityEngine::Animation::BoundCurve& bind) const + { + MonoBehaviour* mono = reinterpret_cast<MonoBehaviour*>(bind.targetObject); + + return UnityEngine::Animation::AnimationBoolToFloat(mono->GetEnabled()); + } + + virtual void SetFloatValue (const UnityEngine::Animation::BoundCurve& bind, float value) const + { + MonoBehaviour* mono = reinterpret_cast<MonoBehaviour*>(bind.targetObject); + + mono->SetEnabled(UnityEngine::Animation::AnimationFloatToBool(value)); + } + + virtual void SetPPtrValue (const UnityEngine::Animation::BoundCurve& bound, SInt32 value) const { } + + virtual SInt32 GetPPtrValue (const UnityEngine::Animation::BoundCurve& bound) const { return 0;} + + virtual bool GenerateBinding (const UnityStr& attribute, bool pptrCurve, UnityEngine::Animation::GenericBinding& outputBinding) const + { + return attribute == kEnabledStr && !pptrCurve; + } + + virtual ClassIDType BindValue (Object& target, const UnityEngine::Animation::GenericBinding& inputBinding, UnityEngine::Animation::BoundCurve& bound) const + { + return ClassID(bool); + } +}; + +static MonoBehaviourPropertyBinding* gBinding = NULL; + +void InitializeMonoBehaviourAnimationBindingInterface () +{ + gBinding = UNITY_NEW (MonoBehaviourPropertyBinding, kMemAnimation); + UnityEngine::Animation::GetGenericAnimationBindingCache ().RegisterIAnimationBinding (ClassID(MonoBehaviour), UnityEngine::Animation::kMonoBehaviourPropertyBinding, gBinding); +} + +void CleanupMonoBehaviourAnimationBindingInterface () +{ + UNITY_DELETE (gBinding, kMemAnimation); +} + |