173 lines
4.9 KiB
C#
173 lines
4.9 KiB
C#
using System;
|
|
|
|
namespace UnityEngine.Playables
|
|
{
|
|
// Token: 0x020004C0 RID: 1216
|
|
public struct ScriptPlayable<T> : IPlayable, IEquatable<ScriptPlayable<T>> 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<T> Null
|
|
{
|
|
get
|
|
{
|
|
return ScriptPlayable<T>.m_NullPlayable;
|
|
}
|
|
}
|
|
|
|
// Token: 0x06003B6E RID: 15214 RVA: 0x00068514 File Offset: 0x00066714
|
|
public static ScriptPlayable<T> Create(PlayableGraph graph, int inputCount = 0)
|
|
{
|
|
PlayableHandle playableHandle = ScriptPlayable<T>.CreateHandle(graph, (T)((object)null), inputCount);
|
|
return new ScriptPlayable<T>(playableHandle);
|
|
}
|
|
|
|
// Token: 0x06003B6F RID: 15215 RVA: 0x00068540 File Offset: 0x00066740
|
|
public static ScriptPlayable<T> Create(PlayableGraph graph, T template, int inputCount = 0)
|
|
{
|
|
PlayableHandle playableHandle = ScriptPlayable<T>.CreateHandle(graph, template, inputCount);
|
|
return new ScriptPlayable<T>(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<T>.CreateScriptInstance();
|
|
}
|
|
else
|
|
{
|
|
obj = ScriptPlayable<T>.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<T>.CloneScriptInstanceFromEngineObject(@object);
|
|
}
|
|
else
|
|
{
|
|
ICloneable cloneable = source as ICloneable;
|
|
if (cloneable != null)
|
|
{
|
|
obj = ScriptPlayable<T>.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<T>();
|
|
}
|
|
|
|
// Token: 0x06003B77 RID: 15223 RVA: 0x00068754 File Offset: 0x00066954
|
|
public static implicit operator Playable(ScriptPlayable<T> playable)
|
|
{
|
|
return new Playable(playable.GetHandle());
|
|
}
|
|
|
|
// Token: 0x06003B78 RID: 15224 RVA: 0x00068778 File Offset: 0x00066978
|
|
public static explicit operator ScriptPlayable<T>(Playable playable)
|
|
{
|
|
return new ScriptPlayable<T>(playable.GetHandle());
|
|
}
|
|
|
|
// Token: 0x06003B79 RID: 15225 RVA: 0x0006879C File Offset: 0x0006699C
|
|
public bool Equals(ScriptPlayable<T> other)
|
|
{
|
|
return this.GetHandle() == other.GetHandle();
|
|
}
|
|
|
|
// Token: 0x040011E6 RID: 4582
|
|
private PlayableHandle m_Handle;
|
|
|
|
// Token: 0x040011E7 RID: 4583
|
|
private static readonly ScriptPlayable<T> m_NullPlayable = new ScriptPlayable<T>(PlayableHandle.Null);
|
|
}
|
|
}
|