using System.Collections; using System.Collections.Generic; using System.ComponentModel; using UnityEngine; using UnityEngine.Playables; [RequireComponent(typeof(Animator))] public partial class SimpleAnimation: MonoBehaviour { public interface State { bool enabled { get; set; } bool isValid { get; } float time { get; set; } float normalizedTime { get; set; } float speed { get; set; } string name { get; set; } float weight { get; set; } float length { get; } AnimationClip clip { get; } WrapMode wrapMode { get; set; } } public Animator animator { get { if (m_Animator == null) { m_Animator = GetComponent(); } return m_Animator; } } public bool animatePhysics { get { return m_AnimatePhysics; } set { m_AnimatePhysics = value; animator.updateMode = m_AnimatePhysics ? AnimatorUpdateMode.AnimatePhysics : AnimatorUpdateMode.Normal; } } public AnimatorCullingMode cullingMode { get { return animator.cullingMode; } set { m_CullingMode = value; animator.cullingMode = m_CullingMode; } } public bool isPlaying { get { return m_Playable.IsPlaying(); } } public bool playAutomatically { get { return m_PlayAutomatically; } set { m_PlayAutomatically = value; } } public AnimationClip clip { get { return m_Clip; } set { LegacyClipCheck(value); m_Clip = value; } } public WrapMode wrapMode { get { return m_WrapMode; } set { m_WrapMode = value; } } public void AddClip(AnimationClip clip, string newName) { LegacyClipCheck(clip); AddState(clip, newName); } public void Blend(string stateName, float targetWeight, float fadeLength) { m_Animator.enabled = true; Kick(); m_Playable.Blend(stateName, targetWeight, fadeLength); } public void CrossFade(string stateName, float fadeLength) { m_Animator.enabled = true; Kick(); m_Playable.Crossfade(stateName, fadeLength); } public void CrossFadeQueued(string stateName, float fadeLength, QueueMode queueMode) { m_Animator.enabled = true; Kick(); m_Playable.CrossfadeQueued(stateName, fadeLength, queueMode); } public int GetClipCount() { return m_Playable.GetClipCount(); } public bool IsPlaying(string stateName) { return m_Playable.IsPlaying(stateName); } public void Stop() { m_Playable.StopAll(); } public void Stop(string stateName) { m_Playable.Stop(stateName); } public void Sample() { m_Graph.Evaluate(); } public bool Play() { m_Animator.enabled = true; Kick(); if (m_Clip != null && m_PlayAutomatically) { m_Playable.Play(kDefaultStateName); } return false; } public void AddState(AnimationClip clip, string name) { LegacyClipCheck(clip); Kick(); if (m_Playable.AddClip(clip, name)) { RebuildStates(); } } public void RemoveState(string name) { if (m_Playable.RemoveClip(name)) { RebuildStates(); } } public bool Play(string stateName) { m_Animator.enabled = true; Kick(); return m_Playable.Play(stateName); } public void PlayQueued(string stateName, QueueMode queueMode) { m_Animator.enabled = true; Kick(); m_Playable.PlayQueued(stateName, queueMode); } public void RemoveClip(AnimationClip clip) { if (clip == null) throw new System.NullReferenceException("clip"); if ( m_Playable.RemoveClip(clip) ) { RebuildStates(); } } public void Rewind() { Kick(); m_Playable.Rewind(); } public void Rewind(string stateName) { Kick(); m_Playable.Rewind(stateName); } public State GetState(string stateName) { SimpleAnimationPlayable.IState state = m_Playable.GetState(stateName); if (state == null) return null; return new StateImpl(state, this); } public IEnumerable GetStates() { return new StateEnumerable(this); } public State this[string name] { get { return GetState(name); } } }