123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- using System;
- using UnityEngine;
- namespace UnityEngine.Timeline
- {
- /// <summary>
- /// Specifies the type of PlayableAsset that a TrackAsset derived class can create clips of.
- /// </summary>
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
- public class TrackClipTypeAttribute : Attribute
- {
- /// <summary>
- /// The type of the clip class associate with this track
- /// </summary>
- public readonly Type inspectedType;
- /// <summary>
- /// Whether to allow automatic creation of these types.
- /// </summary>
- public readonly bool allowAutoCreate; // true will make it show up in menus
- /// <summary>
- /// </summary>
- /// <param name="clipClass">The type of the clip class to associate with this track. Must derive from PlayableAsset.</param>
- public TrackClipTypeAttribute(Type clipClass)
- {
- inspectedType = clipClass;
- allowAutoCreate = true;
- }
- /// <summary>
- /// </summary>
- /// <param name="clipClass">The type of the clip class to associate with this track. Must derive from PlayableAsset.</param>
- /// <param name="allowAutoCreate">Whether to allow automatic creation of these types. Default value is true.</param>
- /// <remarks>Setting allowAutoCreate to false will cause Timeline to not show menu items for creating clips of this type.</remarks>
- public TrackClipTypeAttribute(Type clipClass, bool allowAutoCreate)
- {
- inspectedType = clipClass;
- allowAutoCreate = false;
- }
- }
- /// <summary>
- /// Apply this to a PlayableBehaviour class or field to indicate that it is not animatable.
- /// </summary>
- [AttributeUsage(AttributeTargets.Field | AttributeTargets.Class)]
- public class NotKeyableAttribute : Attribute
- {
- }
- /// <summary>
- /// Options for track binding
- /// </summary>
- [Flags]
- public enum TrackBindingFlags
- {
- /// <summary>
- /// No options specified
- /// </summary>
- None = 0,
- /// <summary>
- /// Allow automatic creating of component during gameObject drag and drop
- /// </summary>
- AllowCreateComponent = 1,
- /// <summary>
- /// All options specified
- /// </summary>
- All = AllowCreateComponent
- }
- /// <summary>
- /// Specifies the type of object that should be bound to a TrackAsset.
- /// </summary>
- /// <example>
- /// <code>
- /// using UnityEngine;
- /// using UnityEngine.Timeline;
- /// [TrackBindingType(typeof(Light), TrackBindingFlags.AllowCreateComponent)]
- /// public class LightTrack : TrackAsset
- /// {
- /// }
- /// </code>
- /// </example>
- /// <remarks>
- /// Use this attribute when creating Custom Tracks to specify the type of object the track requires a binding to.
- /// </remarks>
- [AttributeUsage(AttributeTargets.Class)]
- public class TrackBindingTypeAttribute : Attribute
- {
- /// <summary>
- /// The type of binding for the associate track
- /// </summary>
- public readonly Type type;
- /// <summary>
- /// Options for the the track binding
- /// </summary>
- public readonly TrackBindingFlags flags;
- public TrackBindingTypeAttribute(Type type)
- {
- this.type = type;
- this.flags = TrackBindingFlags.All;
- }
- public TrackBindingTypeAttribute(Type type, TrackBindingFlags flags)
- {
- this.type = type;
- this.flags = flags;
- }
- }
- // indicates that child tracks are permitted on a track
- // internal because not fully supported on custom classes yet
- [AttributeUsage(AttributeTargets.Class, Inherited = false)]
- class SupportsChildTracksAttribute : Attribute
- {
- public readonly Type childType;
- public readonly int levels;
- public SupportsChildTracksAttribute(Type childType = null, int levels = Int32.MaxValue)
- {
- this.childType = childType;
- this.levels = levels;
- }
- }
- // indicates that the type should not be put on a PlayableTrack
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
- class IgnoreOnPlayableTrackAttribute : System.Attribute {}
- // used to flag properties as using a time field (second/frames) display
- class TimeFieldAttribute : PropertyAttribute
- {
- public enum UseEditMode
- {
- None,
- ApplyEditMode
- }
- public UseEditMode useEditMode { get; }
- public TimeFieldAttribute(UseEditMode useEditMode = UseEditMode.ApplyEditMode)
- {
- this.useEditMode = useEditMode;
- }
- }
- /// <summary>
- /// Use this attribute to hide a class from Timeline menus.
- /// </summary>
- [AttributeUsage(AttributeTargets.Class, Inherited = false)]
- public class HideInMenuAttribute : Attribute {}
- ///<summary>
- /// Use this attribute to customize the appearance of a Marker.
- /// </summary>
- /// Specify the style to use to draw a Marker.
- /// <example>
- /// [CustomStyle("MyStyle")]
- /// public class MyMarker : UnityEngine.Timeline.Marker {}
- /// </example>
- /// How to create a custom style rule:
- /// 1) Create a 'common.uss' USS file in an Editor folder in a StyleSheets/Extensions folder hierarchy.
- /// Example of valid folder paths:
- /// - Assets/Editor/StyleSheets/Extensions
- /// - Assets/Editor/Markers/StyleSheets/Extensions
- /// - Assets/Timeline/Editor/MyMarkers/StyleSheets/Extensions
- /// Rules in 'dark.uss' are used if you use the Pro Skin and rules in 'light.uss' are used otherwise.
- ///
- /// 2)In the USS file, create a styling rule to customize the appearance of the marker.
- /// <example>
- /// MyStyle
- /// {
- /// /* Specify the appearance of the marker in the collapsed state here. */
- /// }
- ///
- /// MyStyle:checked
- /// {
- /// /* Specify the appearance of the marker in the expanded state here. */
- /// }
- ///
- /// MyStyle:focused:checked
- /// {
- /// /* Specify the appearance of the marker in the selected state here. */
- /// }
- /// </example>
- /// <seealso cref="UnityEngine.Timeline.Marker"/>
- [AttributeUsage(AttributeTargets.Class)]
- public class CustomStyleAttribute : Attribute
- {
- /// <summary>
- /// The name of the USS style.
- /// </summary>
- public readonly string ussStyle;
- /// <param name="ussStyle">The name of the USS style.</param>
- public CustomStyleAttribute(string ussStyle)
- {
- this.ussStyle = ussStyle;
- }
- }
- /// <summary>
- /// Use this attribute to assign a clip, marker or track to a category in a submenu
- /// </summary>
- [AttributeUsage(AttributeTargets.Class)]
- internal class MenuCategoryAttribute : Attribute
- {
- /// <summary>
- /// The menu name of the category
- /// </summary>
- public readonly string category;
- public MenuCategoryAttribute(string category)
- {
- this.category = category ?? string.Empty;
- }
- }
- }
|