using System; namespace UnityEngine.Playables { // Token: 0x020004C0 RID: 1216 public struct ScriptPlayable : IPlayable, IEquatable> where T : class, IPlayableBehaviour, new() { // Token: 0x06003B6C RID: 15212 RVA: 0x00068498 File Offset: 0x00066698 internal ScriptPlayable(PlayableHandle handle) { if (handle.IsValid()) { if (!typeof(T).IsAssignableFrom(handle.GetPlayableType())) { throw new InvalidCastException(string.Format("Incompatible handle: Trying to assign a playable data of type `{0}` that is not compatible with the PlayableBehaviour of type `{1}`.", handle.GetPlayableType(), typeof(T))); } } this.m_Handle = handle; } // Token: 0x17000D7C RID: 3452 // (get) Token: 0x06003B6D RID: 15213 RVA: 0x000684F8 File Offset: 0x000666F8 public static ScriptPlayable Null { get { return ScriptPlayable.m_NullPlayable; } } // Token: 0x06003B6E RID: 15214 RVA: 0x00068514 File Offset: 0x00066714 public static ScriptPlayable Create(PlayableGraph graph, int inputCount = 0) { PlayableHandle playableHandle = ScriptPlayable.CreateHandle(graph, (T)((object)null), inputCount); return new ScriptPlayable(playableHandle); } // Token: 0x06003B6F RID: 15215 RVA: 0x00068540 File Offset: 0x00066740 public static ScriptPlayable Create(PlayableGraph graph, T template, int inputCount = 0) { PlayableHandle playableHandle = ScriptPlayable.CreateHandle(graph, template, inputCount); return new ScriptPlayable(playableHandle); } // Token: 0x06003B70 RID: 15216 RVA: 0x00068564 File Offset: 0x00066764 private static PlayableHandle CreateHandle(PlayableGraph graph, T template, int inputCount) { object obj; if (template == null) { obj = ScriptPlayable.CreateScriptInstance(); } else { obj = ScriptPlayable.CloneScriptInstance(template); } PlayableHandle playableHandle; if (obj == null) { Debug.LogError("Could not create a ScriptPlayable of Type " + typeof(T).ToString()); playableHandle = PlayableHandle.Null; } else { PlayableHandle playableHandle2 = graph.CreatePlayableHandle(); if (!playableHandle2.IsValid()) { playableHandle = PlayableHandle.Null; } else { playableHandle2.SetInputCount(inputCount); playableHandle2.SetScriptInstance(obj); playableHandle = playableHandle2; } } return playableHandle; } // Token: 0x06003B71 RID: 15217 RVA: 0x00068604 File Offset: 0x00066804 private static object CreateScriptInstance() { IPlayableBehaviour playableBehaviour; if (typeof(ScriptableObject).IsAssignableFrom(typeof(T))) { playableBehaviour = ScriptableObject.CreateInstance(typeof(T)) as T; } else { playableBehaviour = new T(); } return playableBehaviour; } // Token: 0x06003B72 RID: 15218 RVA: 0x00068670 File Offset: 0x00066870 private static object CloneScriptInstance(IPlayableBehaviour source) { Object @object = source as Object; object obj; if (@object != null) { obj = ScriptPlayable.CloneScriptInstanceFromEngineObject(@object); } else { ICloneable cloneable = source as ICloneable; if (cloneable != null) { obj = ScriptPlayable.CloneScriptInstanceFromIClonable(cloneable); } else { obj = null; } } return obj; } // Token: 0x06003B73 RID: 15219 RVA: 0x000686C0 File Offset: 0x000668C0 private static object CloneScriptInstanceFromEngineObject(Object source) { Object @object = Object.Instantiate(source); if (@object != null) { @object.hideFlags |= HideFlags.DontSave; } return @object; } // Token: 0x06003B74 RID: 15220 RVA: 0x000686FC File Offset: 0x000668FC private static object CloneScriptInstanceFromIClonable(ICloneable source) { return source.Clone(); } // Token: 0x06003B75 RID: 15221 RVA: 0x00068718 File Offset: 0x00066918 public PlayableHandle GetHandle() { return this.m_Handle; } // Token: 0x06003B76 RID: 15222 RVA: 0x00068734 File Offset: 0x00066934 public T GetBehaviour() { return this.m_Handle.GetObject(); } // Token: 0x06003B77 RID: 15223 RVA: 0x00068754 File Offset: 0x00066954 public static implicit operator Playable(ScriptPlayable playable) { return new Playable(playable.GetHandle()); } // Token: 0x06003B78 RID: 15224 RVA: 0x00068778 File Offset: 0x00066978 public static explicit operator ScriptPlayable(Playable playable) { return new ScriptPlayable(playable.GetHandle()); } // Token: 0x06003B79 RID: 15225 RVA: 0x0006879C File Offset: 0x0006699C public bool Equals(ScriptPlayable other) { return this.GetHandle() == other.GetHandle(); } // Token: 0x040011E6 RID: 4582 private PlayableHandle m_Handle; // Token: 0x040011E7 RID: 4583 private static readonly ScriptPlayable m_NullPlayable = new ScriptPlayable(PlayableHandle.Null); } }