summaryrefslogtreecommitdiff
path: root/Runtime/Mono/MonoBehaviourAnimationBinding.cpp
blob: d077acdf8e90e35e52c051b3c7756dcd2ebd79fe (plain)
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);
}