public static bool HasAnyAnimatableParameters(this TimelineClip clip)
        {
            if (clip.asset == null || Attribute.IsDefined(clip.asset.GetType(), typeof(NotKeyableAttribute)))
            {
                return(false);
            }

            if (!clip.HasScriptPlayable())
            {
                return(false);
            }

            var serializedObject = GetSerializedObject(clip);

            if (serializedObject == null)
            {
                return(false);
            }

            var  prop             = serializedObject.GetIterator();
            var  expand           = true;
            bool isRootAnimatable = clip.asset is IPlayableBehaviour;
            bool hasAnimatable    = false;

            while (prop.NextVisible(expand))
            {
                if (IsAnimatable(prop.propertyType) && IsKeyable(clip.asset.GetType(), prop.propertyPath))
                {
                    hasAnimatable |= isRootAnimatable || IsAnimatablePath(clip, prop.propertyPath);
                }
            }

            return(hasAnimatable);
        }
        public static bool IsParameterAnimatable(this TimelineClip clip, string parameterName)
        {
            bool result;

            if (clip.asset == null || Attribute.IsDefined(clip.asset.GetType(), typeof(NotKeyableAttribute)))
            {
                result = false;
            }
            else if (!clip.HasScriptPlayable())
            {
                result = false;
            }
            else
            {
                SerializedObject serializedObject = AnimatedParameterExtensions.GetSerializedObject(clip);
                if (serializedObject == null)
                {
                    result = false;
                }
                else
                {
                    bool flag = clip.asset is IPlayableBehaviour;
                    SerializedProperty serializedProperty = serializedObject.FindProperty(parameterName);
                    result = (serializedProperty != null && AnimatedParameterExtensions.IsAnimatable(serializedProperty.get_propertyType()) && AnimatedParameterExtensions.IsKeyable(clip.asset.GetType(), parameterName) && (flag || clip.IsAnimatablePath(serializedProperty.get_propertyPath())));
                }
            }
            return(result);
        }
        public static bool IsParameterAnimatable(this TimelineClip clip, string parameterName)
        {
            if (clip.asset == null || Attribute.IsDefined(clip.asset.GetType(), typeof(NotKeyableAttribute)))
            {
                return(false);
            }

            if (!clip.HasScriptPlayable())
            {
                return(false);
            }

            var serializedObject = GetSerializedObject(clip);

            if (serializedObject == null)
            {
                return(false);
            }

            bool isRootAnimatable = clip.asset is IPlayableBehaviour;
            var  prop             = serializedObject.FindProperty(parameterName);

            if (prop != null && IsAnimatable(prop.propertyType) && IsKeyable(clip.asset.GetType(), parameterName))
            {
                return(isRootAnimatable || IsAnimatablePath(clip, prop.propertyPath));
            }
            return(false);
        }
        public static bool HasAnyAnimatableParameters(this TimelineClip clip)
        {
            bool result;

            if (clip.asset == null || Attribute.IsDefined(clip.asset.GetType(), typeof(NotKeyableAttribute)))
            {
                result = false;
            }
            else if (!clip.HasScriptPlayable())
            {
                result = false;
            }
            else
            {
                SerializedObject serializedObject = AnimatedParameterExtensions.GetSerializedObject(clip);
                if (serializedObject == null)
                {
                    result = false;
                }
                else
                {
                    SerializedProperty iterator = serializedObject.GetIterator();
                    bool flag  = true;
                    bool flag2 = clip.asset is IPlayableBehaviour;
                    bool flag3 = false;
                    while (iterator.NextVisible(flag))
                    {
                        if (AnimatedParameterExtensions.IsAnimatable(iterator.get_propertyType()) && AnimatedParameterExtensions.IsKeyable(clip.asset.GetType(), iterator.get_propertyPath()))
                        {
                            flag3 |= (flag2 || clip.IsAnimatablePath(iterator.get_propertyPath()));
                        }
                    }
                    result = flag3;
                }
            }
            return(result);
        }