blob: 48d2905b762ca44afdff454070bf6437d2ca08f2 (
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
|
#pragma once
#include "Runtime/Animation/RuntimeAnimatorController.h"
#include "Runtime/Utilities/dynamic_array.h"
#include "Runtime/mecanim/memory.h"
#include "Runtime/Misc/UserList.h"
#include <vector>
class AnimationClip;
typedef std::vector<PPtr<AnimationClip> > AnimationClipVector;
namespace UnityEngine{namespace Animation{struct AnimationSetBindings;}}
struct AnimationClipOverride
{
DEFINE_GET_TYPESTRING(AnimationClipOverride)
PPtr<AnimationClip> m_OriginalClip;
PPtr<AnimationClip> m_OverrideClip;
template<class TransferFunction>
inline void Transfer (TransferFunction& transfer)
{
TRANSFER(m_OriginalClip);
TRANSFER(m_OverrideClip);
}
bool operator== (AnimationClipOverride const& other){return m_OriginalClip == other.m_OriginalClip && m_OverrideClip == other.m_OverrideClip; }
PPtr<AnimationClip> GetEffectiveClip() const {return !m_OverrideClip.IsNull() ? m_OverrideClip : m_OriginalClip; }
};
class AnimatorOverrideController : public RuntimeAnimatorController
{
public:
REGISTER_DERIVED_CLASS (AnimatorOverrideController, RuntimeAnimatorController)
DECLARE_OBJECT_SERIALIZE (AnimatorOverrideController)
static void InitializeClass ();
static void CleanupClass () {}
AnimatorOverrideController (MemLabelId label, ObjectCreationMode mode);
virtual void AwakeFromLoad(AwakeFromLoadMode mode);
virtual mecanim::animation::ControllerConstant* GetAsset();
virtual void BuildAsset();
virtual void ClearAsset ();
virtual UnityEngine::Animation::AnimationSetBindings* GetAnimationSetBindings();
virtual AnimationClipVector GetAnimationClips()const;
virtual std::string StringFromID(unsigned int ID) const ;
PPtr<RuntimeAnimatorController> GetAnimatorController()const;
void SetAnimatorController(PPtr<RuntimeAnimatorController> controller);
AnimationClipVector GetOriginalClips()const;
AnimationClipVector GetOverrideClips()const;
PPtr<AnimationClip> GetClip(std::string const& name, bool returnEffectiveClip)const;
void SetClip(std::string const& name, PPtr<AnimationClip> clip);
PPtr<AnimationClip> GetClip(PPtr<AnimationClip> originalClip, bool returnEffectiveClip)const;
void SetClip(PPtr<AnimationClip> originalClip, PPtr<AnimationClip> overrideClip);
void PerformOverrideClipListCleanup();
protected:
typedef dynamic_array<AnimationClipOverride> AnimationClipOverrideVector;
PPtr<RuntimeAnimatorController> m_Controller;
// This list is a map between m_Controller clips and override clips.
// We should never rely on this list to return m_Controller clip list because this list may become
// offsync when an user edit the controller's clip list(either adding or removing a state).
//
// The map should only be updated by PerformOverrideClipListCleanup() when user edit the
// AnimatorOverrideController in the inspector.
AnimationClipOverrideVector m_Clips;
UnityEngine::Animation::AnimationSetBindings* m_AnimationSetBindings;
mecanim::memory::MecanimAllocator m_Allocator;
UserListNode m_AnimationSetNode;
private:
virtual AnimationClipVector GetAnimationClipsToRegister() const;
PPtr<AnimationClip> GetOriginalClip(std::string const& name)const;
template<class Functor> PPtr<AnimationClip> FindAnimationClipInMap(PPtr<AnimationClip> const& clip, Functor functor, PPtr<AnimationClip> const& defaultClip = PPtr<AnimationClip>() )const;
};
|