summaryrefslogtreecommitdiff
path: root/Runtime/Animation/AnimationManager.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Animation/AnimationManager.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Animation/AnimationManager.cpp')
-rw-r--r--Runtime/Animation/AnimationManager.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/Runtime/Animation/AnimationManager.cpp b/Runtime/Animation/AnimationManager.cpp
new file mode 100644
index 0000000..c4c3e71
--- /dev/null
+++ b/Runtime/Animation/AnimationManager.cpp
@@ -0,0 +1,53 @@
+#include "UnityPrefix.h"
+#include "AnimationManager.h"
+#include "Runtime/Input/TimeManager.h"
+#include "Animation.h"
+#include "AnimationState.h"
+#include "AnimationStateNetworkProvider.h"
+#include "Runtime/Core/Callbacks/PlayerLoopCallbacks.h"
+
+static AnimationManager* gAnimationManager = NULL;
+
+void AnimationManager::Update ()
+{
+ // Update animations
+ double time = GetCurTime();
+ AnimationList* animations = NULL;
+ if (GetTimeManager ().IsUsingFixedTimeStep ())
+ animations = &m_FixedAnimations;
+ else
+ animations = &m_Animations;
+
+ // Animation List node can be destroyed in UpdateAnimation, if somebody writes an AnimationEvent
+ // to do that. So we have to use SafeListIterator
+ SafeIterator<AnimationList> j (*animations);
+ while (j.Next())
+ {
+ Animation& animation = **j;
+ animation.UpdateAnimation(time);
+ }
+}
+
+void AnimationManager::InitializeClass ()
+{
+ Assert(gAnimationManager == NULL);
+ gAnimationManager = UNITY_NEW_AS_ROOT (AnimationManager, kMemAnimation, "AnimationManager", "");
+
+ REGISTER_PLAYERLOOP_CALL (LegacyFixedAnimationUpdate, GetAnimationManager().Update());
+ REGISTER_PLAYERLOOP_CALL (LegacyAnimationUpdate, GetAnimationManager().Update ());
+
+ InitializeAnimationStateNetworkProvider();
+}
+
+void AnimationManager::CleanupClass ()
+{
+ Assert(gAnimationManager != NULL);
+ UNITY_DELETE(gAnimationManager, kMemAnimation);
+
+ CleanupAnimationStateNetworkProvider();
+}
+
+AnimationManager& GetAnimationManager ()
+{
+ return *gAnimationManager;
+}