1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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);
}
|