public static TimelineClip CreateClip(this TrackAsset track, double time)
        {
            object[]     customAttributes = track.GetType().GetCustomAttributes(typeof(TrackClipTypeAttribute), true);
            TimelineClip result;

            if (customAttributes.Length == 0)
            {
                result = null;
            }
            else if (TimelineWindow.instance.state == null)
            {
                result = null;
            }
            else if (customAttributes.Length == 1)
            {
                TrackClipTypeAttribute trackClipTypeAttribute = (TrackClipTypeAttribute)customAttributes[0];
                TimelineClip           timelineClip           = TimelineHelpers.CreateClipOnTrack(trackClipTypeAttribute.inspectedType, track, TimelineWindow.instance.state);
                timelineClip.start = time;
                result             = timelineClip;
            }
            else
            {
                result = null;
            }
            return(result);
        }
        internal static Type GetCustomPlayableType(this TrackAsset track)
        {
            Type result;

            if (track == null)
            {
                result = null;
            }
            else
            {
                TrackClipTypeAttribute trackClipTypeAttribute = track.GetType().GetCustomAttributes(typeof(TrackClipTypeAttribute), true).OfType <TrackClipTypeAttribute>().FirstOrDefault((TrackClipTypeAttribute t) => typeof(IPlayableAsset).IsAssignableFrom(t.inspectedType) && typeof(ScriptableObject).IsAssignableFrom(t.inspectedType));
                if (trackClipTypeAttribute != null)
                {
                    result = trackClipTypeAttribute.inspectedType;
                }
                else
                {
                    result = null;
                }
            }
            return(result);
        }