Initial Commit
This commit is contained in:
parent
53eb92e9af
commit
270ab7d11f
15341 changed files with 700234 additions and 0 deletions
|
@ -0,0 +1,109 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using UnityEngine.Playables;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
namespace UnityEngine.Timeline
|
||||
{
|
||||
static class TimelineUndo
|
||||
{
|
||||
public static void PushDestroyUndo(TimelineAsset timeline, Object thingToDirty, Object objectToDestroy)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (objectToDestroy == null || !DisableUndoGuard.enableUndo)
|
||||
return;
|
||||
|
||||
if (thingToDirty != null)
|
||||
EditorUtility.SetDirty(thingToDirty);
|
||||
|
||||
if (timeline != null)
|
||||
EditorUtility.SetDirty(timeline);
|
||||
|
||||
Undo.DestroyObjectImmediate(objectToDestroy);
|
||||
#else
|
||||
if (objectToDestroy != null)
|
||||
Object.Destroy(objectToDestroy);
|
||||
#endif
|
||||
}
|
||||
|
||||
[Conditional("UNITY_EDITOR")]
|
||||
public static void PushUndo(Object[] thingsToDirty, string operation)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (thingsToDirty == null || !DisableUndoGuard.enableUndo)
|
||||
return;
|
||||
|
||||
for (var i = 0; i < thingsToDirty.Length; i++)
|
||||
{
|
||||
if (thingsToDirty[i] is TrackAsset track)
|
||||
track.MarkDirty();
|
||||
EditorUtility.SetDirty(thingsToDirty[i]);
|
||||
}
|
||||
Undo.RegisterCompleteObjectUndo(thingsToDirty, UndoName(operation));
|
||||
#endif
|
||||
}
|
||||
|
||||
[Conditional("UNITY_EDITOR")]
|
||||
public static void PushUndo(Object thingToDirty, string operation)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (thingToDirty != null && DisableUndoGuard.enableUndo)
|
||||
{
|
||||
var track = thingToDirty as TrackAsset;
|
||||
if (track != null)
|
||||
track.MarkDirty();
|
||||
|
||||
EditorUtility.SetDirty(thingToDirty);
|
||||
Undo.RegisterCompleteObjectUndo(thingToDirty, UndoName(operation));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
[Conditional("UNITY_EDITOR")]
|
||||
public static void RegisterCreatedObjectUndo(Object thingCreated, string operation)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (DisableUndoGuard.enableUndo)
|
||||
{
|
||||
Undo.RegisterCreatedObjectUndo(thingCreated, UndoName(operation));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
private static string UndoName(string name) => "Timeline " + name;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
internal struct DisableUndoGuard : IDisposable
|
||||
{
|
||||
internal static bool enableUndo = true;
|
||||
static readonly Stack<bool> m_UndoStateStack = new Stack<bool>();
|
||||
bool m_Disposed;
|
||||
public DisableUndoGuard(bool disable)
|
||||
{
|
||||
m_Disposed = false;
|
||||
m_UndoStateStack.Push(enableUndo);
|
||||
enableUndo = !disable;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (!m_Disposed)
|
||||
{
|
||||
if (m_UndoStateStack.Count == 0)
|
||||
{
|
||||
Debug.LogError("UnMatched DisableUndoGuard calls");
|
||||
enableUndo = true;
|
||||
return;
|
||||
}
|
||||
enableUndo = m_UndoStateStack.Pop();
|
||||
m_Disposed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue