using System.Collections.Generic;
namespace UnityEngine.Timeline
{
    /// 
    /// Interface used to inform the Timeline Editor about potential property modifications that may occur while previewing.
    /// 
    public interface IPropertyCollector
    {
        /// 
        /// Sets the active game object for subsequent property modifications.
        /// 
        /// The GameObject to push.
        void PushActiveGameObject(GameObject gameObject);
        /// 
        /// Removes the active GameObject from the modification stack, restoring the previous value.
        /// 
        void PopActiveGameObject();
        /// 
        /// Add properties modified by an animation clip.
        /// 
        /// The animation clip that contains the properties.
        void AddFromClip(AnimationClip clip);
        /// 
        /// Add property modifications specified by a list of animation clips.
        /// 
        /// The list of animation clips used to determine which property modifications to apply.
        void AddFromClips(IEnumerable clips);
        /// 
        /// Add property modifications using the serialized property name.
        /// 
        /// The name of the serialized property.
        /// The type of the component the property exists on.
        /// 
        /// This method uses the most recent gameObject from PushActiveGameObject.
        /// 
        void AddFromName(string name) where T : Component;
        /// 
        /// Add property modifications using the serialized property name.
        /// 
        /// The name of the serialized property.
        /// 
        /// This method uses the most recent gameObject from PushActiveGameObject.
        /// 
        void AddFromName(string name);
        /// 
        /// Add property modifications modified by an animation clip.
        /// 
        /// The GameObject where the properties exist.
        /// The animation clip that contains the properties.
        void AddFromClip(GameObject obj, AnimationClip clip);
        /// 
        /// Add property modifications specified by a list of animation clips.
        /// 
        /// The gameObject that will be animated.
        /// The list of animation clips used to determine which property modifications to apply.
        void AddFromClips(GameObject obj, IEnumerable clips);
        /// 
        /// Add property modifications using the serialized property name.
        /// 
        /// The name of the serialized property.
        /// The gameObject where the properties exist.
        /// The type of the component the property exists on.
        void AddFromName(GameObject obj, string name) where T : Component;
        /// 
        /// Add property modifications using the serialized property name.
        /// 
        /// The gameObject where the properties exist.
        /// The name of the serialized property.
        void AddFromName(GameObject obj, string name);
        /// 
        /// Add property modifications using the serialized property name.
        /// 
        /// The name of the serialized property.
        /// The component where the properties exist.
        void AddFromName(Component component, string name);
        /// 
        /// Set all serializable properties on a component to be under preview control.
        /// 
        /// The gameObject where the properties exist.
        /// The component to set in preview mode.
        void AddFromComponent(GameObject obj, Component component);
        /// 
        /// Add property modifications modified by an animation clip.
        /// 
        /// The Object where the properties exist.
        /// The animation clip that contains the properties.
        void AddObjectProperties(Object obj, AnimationClip clip);
    }
}