/// <summary> /// Creates a timeline clip from an existing playable asset. /// </summary> /// <param name="asset"></param> /// <returns></returns> internal TimelineClip CreateClipFromPlayableAsset(IPlayableAsset asset) { if (asset == null) throw new ArgumentNullException("asset"); if ((asset as ScriptableObject) == null) throw new System.ArgumentException("CreateClipFromPlayableAsset " + " only supports ScriptableObject-derived Types"); if (!ValidateClipType(asset.GetType())) throw new System.InvalidOperationException("Clips of type " + asset.GetType() + " are not permitted on tracks of type " + GetType()); return CreateClipFromAsset(asset as ScriptableObject); }
public static FieldInfo[] GetScriptPlayableFields(IPlayableAsset asset) { if (asset == null) { return(new FieldInfo[0]); } FieldInfo[] scriptPlayableFields; if (!AnimatedParameterCache.TryGetScriptPlayableFields(asset.GetType(), out scriptPlayableFields)) { scriptPlayableFields = GetScriptPlayableFields_Internal(asset); AnimatedParameterCache.SetScriptPlayableFields(asset.GetType(), scriptPlayableFields); } return(scriptPlayableFields); }
internal static IEnumerable <FieldInfo> GetScriptPlayableFields(IPlayableAsset asset) { if (asset == null) { return(new FieldInfo[0]); } return(asset.GetType().GetFields().Where(f => f.IsPublic && !f.IsStatic && typeof(IPlayableBehaviour).IsAssignableFrom(f.FieldType))); }
static FieldInfo[] GetScriptPlayableFields_Internal(IPlayableAsset asset) { return(asset.GetType() .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where( f => typeof(IPlayableBehaviour).IsAssignableFrom(f.FieldType) && // The field is an IPlayableBehaviour (f.IsPublic || f.GetCustomAttributes(typeof(SerializeField), false).Any()) && // The field is either public or marked with [SerializeField] !f.GetCustomAttributes(typeof(NotKeyableAttribute), false).Any() && // The field is not marked with [NotKeyable] !f.GetCustomAttributes(typeof(HideInInspector), false).Any() && // The field is not marked with [HideInInspector] !f.FieldType.GetCustomAttributes(typeof(NotKeyableAttribute), false).Any()) // The field is not of a type marked with [NotKeyable] .ToArray()); }
internal static IEnumerable <FieldInfo> GetScriptPlayableFields(IPlayableAsset asset) { IEnumerable <FieldInfo> result; if (asset == null) { result = new FieldInfo[0]; } else { result = from f in asset.GetType().GetFields() where f.IsPublic && !f.IsStatic && typeof(IPlayableBehaviour).IsAssignableFrom(f.FieldType) select f; } return(result); }
/// <summary> /// Create a clip on track from an existing PlayableAsset /// </summary> public static TimelineClip CreateClipOnTrackFromPlayableAsset(IPlayableAsset asset, TrackAsset parentTrack, double candidateTime) { if (parentTrack == null || asset == null || !TypeUtility.IsConcretePlayableAsset(asset.GetType())) { return(null); } TimelineClip newClip = null; try { newClip = parentTrack.CreateClipFromPlayableAsset(asset); } catch { return(null); } WindowState state = null; if (TimelineWindow.instance != null) { state = TimelineWindow.instance.state; } AddClipOnTrack(newClip, parentTrack, candidateTime, null, state); return(newClip); }