/// <summary>
        /// Stops the IScriptableAnimationCallback, usually we do not dispose as this should be called from within the IScriptableAnimationCallback when 'Stop' is called.
        /// But an overload is allowed if needed.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="dispose"></param>
        public void StopScriptableAnim(IScriptableAnimationCallback state, bool dispose = false)
        {
            if (state == null)
            {
                throw new System.ArgumentNullException("state");
            }

            if (_scriptableAnims != null)
            {
                _scriptableAnims.Remove(state, dispose);
            }
        }
        /// <summary>
        /// Starts an IScriptableAnimationCallback, but doesn't stop any other animations. This is similar to enabling an AnimationState, or calling Animation.Blend.
        /// </summary>
        /// <param name="state"></param>
        public void EnableScriptableAnim(IScriptableAnimationCallback state)
        {
            if (state == null)
            {
                throw new System.ArgumentNullException("state");
            }

            if (_scriptableAnims == null)
            {
                _scriptableAnims = new ScriptableAnimCollection(this);
            }

            _scriptableAnims.Add(state);
        }
        /// <summary>
        /// Starts an IScriptableAnimationCallback stopping animations according to PlayMode, this acts like 'Animation.Play'.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="mode"></param>
        public void StartScriptableAnim(IScriptableAnimationCallback state, PlayMode mode)
        {
            if (state == null)
            {
                throw new System.ArgumentNullException("state");
            }

            if (_scriptableAnims == null)
            {
                _scriptableAnims = new ScriptableAnimCollection(this);
            }

            this.StopInternal(state.Layer, mode);
            if (mode == PlayMode.StopAll)
            {
                _scriptableAnims.Clear(true);
            }
            else
            {
                _scriptableAnims.Remove(state.Layer, true);
            }

            _scriptableAnims.Add(state);
        }