Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

UndoScope.cs 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using UnityEngine.Timeline;
  5. using Object = UnityEngine.Object;
  6. namespace UnityEditor.Timeline
  7. {
  8. /// <summary>
  9. /// Disposable scope object used to collect multiple items for Undo.
  10. /// Automatically filters out duplicates
  11. /// </summary>
  12. struct UndoScope : IDisposable
  13. {
  14. private static readonly HashSet<UnityEngine.Object> s_ObjectsToUndo = new HashSet<Object>();
  15. private string m_Name;
  16. public UndoScope(string name)
  17. {
  18. m_Name = name;
  19. }
  20. public void Dispose()
  21. {
  22. ApplyUndo(m_Name);
  23. }
  24. public void AddObject(UnityEngine.Object asset)
  25. {
  26. if (asset != null)
  27. s_ObjectsToUndo.Add(asset);
  28. }
  29. public void AddClip(TimelineClip clip, bool includeAsset)
  30. {
  31. if (clip != null && clip.GetParentTrack() != null)
  32. s_ObjectsToUndo.Add(clip.GetParentTrack());
  33. if (includeAsset && clip != null && clip.asset != null)
  34. s_ObjectsToUndo.Add(clip.asset);
  35. }
  36. public void Add(IEnumerable<TrackAsset> tracks)
  37. {
  38. if (tracks == null)
  39. return;
  40. foreach (var track in tracks)
  41. AddObject(track);
  42. }
  43. public void Add(IEnumerable<TimelineClip> clips, bool includeAssets)
  44. {
  45. if (clips == null)
  46. return;
  47. foreach (var clip in clips)
  48. {
  49. AddClip(clip, includeAssets);
  50. }
  51. }
  52. public void Add(IEnumerable<IMarker> markers)
  53. {
  54. if (markers == null)
  55. return;
  56. foreach (var marker in markers)
  57. {
  58. if (marker is Object o)
  59. AddObject(o);
  60. else if (marker != null)
  61. AddObject(marker.parent);
  62. }
  63. }
  64. private static void ApplyUndo(string name)
  65. {
  66. if (s_ObjectsToUndo.Count == 1)
  67. TimelineUndo.PushUndo(s_ObjectsToUndo.First(), name);
  68. else if (s_ObjectsToUndo.Count > 1)
  69. TimelineUndo.PushUndo(s_ObjectsToUndo.ToArray(), name);
  70. s_ObjectsToUndo.Clear();
  71. }
  72. }
  73. }