private object PlayClip(Animation controller, UnityEngine.Object clip, PlayAnimInfo info)
        {
            if (clip is AnimationClip)
            {
                var animController = controller as Animation;
                var id             = "aux*" + clip.GetInstanceID();
                var a = animController[id];
                if (a == null || a.clip != clip)
                {
                    animController.AddClip(clip as AnimationClip, id);
                }

                AnimationState anim;
                if (info.CrossFadeDur > 0f)
                {
                    anim = animController.CrossFadeQueued(id, info.CrossFadeDur, info.QueueMode, info.PlayMode);
                }
                else
                {
                    anim = animController.PlayQueued(id, info.QueueMode, info.PlayMode);
                }
                if (info.ApplyCustomSettings)
                {
                    info.Settings.Apply(anim);
                }
                return(anim);
            }

            return(null);
        }
        private object TryPlay(object controller, PlayAnimInfo info)
        {
            if (controller is SPLegacyAnimController)
            {
                switch (info.Mode)
                {
                case i_PlayAnimation.PlayByMode.PlayAnim:
                    return(PlayClip(controller as SPLegacyAnimController, info.Clip, info));

                case i_PlayAnimation.PlayByMode.PlayAnimByID:
                    var anim = (controller as SPLegacyAnimController).GetAnim(info.Id);
                    if (anim != null)
                    {
                        if (info.CrossFadeDur > 0f)
                        {
                            anim.CrossFade(info.CrossFadeDur, info.QueueMode, info.PlayMode);
                        }
                        else
                        {
                            anim.Play(info.QueueMode, info.PlayMode);
                        }
                        if (info.ApplyCustomSettings)
                        {
                            info.Settings.Apply(anim);
                        }
                        return(anim);
                    }
                    return(null);

                case i_PlayAnimation.PlayByMode.PlayAnimFromResource:
                    return(this.PlayClip(controller as SPLegacyAnimController, Resources.Load <UnityEngine.Object>(info.Id), info));
                }
            }
            else if (controller is Animation)
            {
                switch (info.Mode)
                {
                case i_PlayAnimation.PlayByMode.PlayAnim:
                    return(PlayClip(controller as Animation, info.Clip, info));

                case i_PlayAnimation.PlayByMode.PlayAnimByID:
                    var comp = controller as Animation;
                    if (comp[info.Id] != null)
                    {
                        AnimationState anim;
                        if (info.CrossFadeDur > 0f)
                        {
                            anim = comp.CrossFadeQueued(info.Id, info.CrossFadeDur, info.QueueMode, info.PlayMode);
                        }
                        else
                        {
                            anim = comp.PlayQueued(info.Id, info.QueueMode, info.PlayMode);
                        }
                        if (info.ApplyCustomSettings)
                        {
                            info.Settings.Apply(anim);
                        }
                        return(anim);
                    }
                    return(null);

                case i_PlayAnimation.PlayByMode.PlayAnimFromResource:
                    return(this.PlayClip(controller as Animation, Resources.Load <UnityEngine.Object>(info.Id), info));
                }
            }
            else if (controller is ISPAnimationSource)
            {
                if (info.Mode == i_PlayAnimation.PlayByMode.PlayAnimByID)
                {
                    var anim = (controller as ISPAnimationSource).GetAnim(info.Id);
                    if (anim != null)
                    {
                        if (info.CrossFadeDur > 0f)
                        {
                            anim.CrossFade(info.CrossFadeDur, info.QueueMode, info.PlayMode);
                        }
                        else
                        {
                            anim.Play(info.QueueMode, info.PlayMode);
                        }
                        if (info.ApplyCustomSettings)
                        {
                            info.Settings.Apply(anim);
                        }
                        return(anim);
                    }
                    return(null);
                }
            }
            else if (controller is ISPAnimator)
            {
                if (string.IsNullOrEmpty(info.Id))
                {
                    return(null);
                }
                return(com.spacepuppy.Dynamic.DynamicUtil.InvokeMethod(controller, info.Id));
            }

            return(null);
        }
        private object PlayClip(SPLegacyAnimController controller, UnityEngine.Object clip, PlayAnimInfo info)
        {
            if (clip is AnimationClip)
            {
                var anim = controller.CreateAuxiliarySPAnim(clip as AnimationClip);
                if (info.ApplyCustomSettings)
                {
                    info.Settings.Apply(anim);
                }
                if (info.CrossFadeDur > 0f)
                {
                    anim.CrossFade(info.CrossFadeDur, info.QueueMode, info.PlayMode);
                }
                else
                {
                    anim.Play(info.QueueMode, info.PlayMode);
                }
                return(anim);
            }
            else if (clip is IScriptableAnimationClip)
            {
                return(controller.Play(clip as IScriptableAnimationClip));
            }

            return(null);
        }
        private object PlayClip(SPLegacyAnimController controller, UnityEngine.Object clip, PlayAnimInfo info)
        {
            if (clip is AnimationClip)
            {
                if (info.CrossFadeDur > 0f)
                {
                    return(controller.CrossFadeAuxiliary(clip as AnimationClip,
                                                         (info.SettingsMask != 0) ? AnimSettings.Intersect(AnimSettings.Default, info.Settings, info.SettingsMask) : AnimSettings.Default,
                                                         info.CrossFadeDur, info.QueueMode, info.PlayMode));
                }
                else
                {
                    return(controller.PlayAuxiliary(clip as AnimationClip,
                                                    (info.SettingsMask != 0) ? AnimSettings.Intersect(AnimSettings.Default, info.Settings, info.SettingsMask) : AnimSettings.Default,
                                                    info.QueueMode, info.PlayMode));
                }
            }
            else if (clip is IScriptableAnimationClip)
            {
                return(controller.Play(clip as IScriptableAnimationClip));
            }

            return(null);
        }