summaryrefslogtreecommitdiff
path: root/Runtime/Animation/AnimatorController.h
blob: 493657fa0f75cc0666f49dda0d5b56dab7b536dd (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

#ifndef EDITABLEAVATARCONTROLLER_H
#define EDITABLEAVATARCONTROLLER_H

#include "Runtime/BaseClasses/NamedObject.h"
#include "Runtime/BaseClasses/MessageIdentifier.h"
#include "Runtime/BaseClasses/RefCounted.h"
#include "Runtime/mecanim/memory.h"
#include "Runtime/Animation/MecanimUtility.h"
#include "Runtime/Animation/RuntimeAnimatorController.h"
#include "Runtime/Misc/UserList.h"


#if UNITY_EDITOR
#include "Editor/Src/Animation/AnimatorControllerParameter.h"
#include "Editor/Src/Animation/AnimatorControllerLayer.h"

typedef std::vector<AnimatorControllerLayer>			AnimatorControllerLayerVector;	
typedef std::vector<AnimatorControllerParameter>		AnimatorControllerParameterVector;

#endif 

template<class T>
class PPtr;
class AnimationClip;
class StateMachine;
class AvatarMask;

class AnimatorController : public RuntimeAnimatorController
{

public :
	REGISTER_DERIVED_CLASS (AnimatorController, RuntimeAnimatorController)
	DECLARE_OBJECT_SERIALIZE (AnimatorController)

	AnimatorController (MemLabelId label, ObjectCreationMode mode);	

	static void InitializeClass ();

	virtual void AwakeFromLoad(AwakeFromLoadMode mode);
	virtual void CheckConsistency ();		

#if UNITY_EDITOR		
	
	//////////////////////////////////////////
	// AnimatorControllerLayers
	AnimatorControllerLayer*			GetLayer(int index);
	const AnimatorControllerLayer*		GetLayer(int index)const ;
	int									GetLayerCount()const;
	void								AddLayer(const std::string& name);
	void								RemoveLayer(int index);

	//////////////////////////////////////////
	// AnimatorControllerParameter
	AnimatorControllerParameter*		GetParameter(int index) ;
	const AnimatorControllerParameter*	GetParameter(int index) const;	
	int									GetParameterCount() const ;
	void								AddParameter(const std::string& name, AnimatorControllerParameterType type);
	void								RemoveParameter(int index);
	int									FindParameter(const std::string& name) const;


	std::vector<PPtr<Object> >			CollectObjectsUsingParameter(const string& parameterName);
	/////////////////////////////////////////////
	
	string MakeUniqueParameterName(const string& newName) const;
	string MakeUniqueLayerName(const string& newName) const;

	bool ValidateLayerIndex(int index) const;
	bool ValidateParameterIndex(int index) const;

	
private:

	bool ValidAnimationSet();	
	void BuildAsset();	
		
	
	AnimatorControllerLayerVector			m_AnimatorLayers;	
	AnimatorControllerParameterVector		m_AnimatorParameters;	
	UserList                                m_Dependencies;


	template<class T>
	void ParametersAndLayersBackwardsCompatibility (T& transfer);

	AnimatorControllerLayer*		CreateAnimatorControllerLayer();
	AnimatorControllerParameter*	CreateAnimatorControllerParameter();

#endif // UNITY_EDITOR

public:

	virtual UnityEngine::Animation::AnimationSetBindings* GetAnimationSetBindings();
	virtual AnimationClipVector GetAnimationClips() const ;
	virtual mecanim::animation::ControllerConstant*	GetAsset();


	virtual std::string	StringFromID(unsigned int ID) const;		
	void OnInvalidateAnimatorController();
	bool IsAssetBundled() { return m_IsAssetBundled; }

private :

	void ClearAsset();
	void OnAnimationClipDeleted();
	virtual AnimationClipVector GetAnimationClipsToRegister() const;
		

	AnimationClipVector									m_AnimationClips;		
	bool												m_IsAssetBundled;

	mecanim::memory::ChainedAllocator					m_Allocator;
	mecanim::animation::ControllerConstant*				m_Controller;
	UInt32												m_ControllerSize;
	UnityEngine::Animation::AnimationSetBindings*		m_AnimationSetBindings;	
	TOSVector											m_TOS;
};


#endif //EDITABLEAVATARCONTROLLER_H