No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AnimationTrackActions.cs 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using JetBrains.Annotations;
  4. using UnityEditor.Timeline.Actions;
  5. using UnityEngine;
  6. using UnityEngine.Timeline;
  7. namespace UnityEditor.Timeline
  8. {
  9. [MenuEntry("Add Override Track", MenuPriority.CustomTrackActionSection.addOverrideTrack), UsedImplicitly]
  10. class AddOverrideTrackAction : TrackAction
  11. {
  12. public override bool Execute(IEnumerable<TrackAsset> tracks)
  13. {
  14. foreach (var animTrack in tracks.OfType<AnimationTrack>())
  15. {
  16. TimelineHelpers.CreateTrack(typeof(AnimationTrack), animTrack, "Override " + animTrack.GetChildTracks().Count());
  17. }
  18. return true;
  19. }
  20. public override ActionValidity Validate(IEnumerable<TrackAsset> tracks)
  21. {
  22. if (tracks.Any(t => t.isSubTrack || !t.GetType().IsAssignableFrom(typeof(AnimationTrack))))
  23. return ActionValidity.NotApplicable;
  24. if (tracks.Any(t => t.lockedInHierarchy))
  25. return ActionValidity.Invalid;
  26. return ActionValidity.Valid;
  27. }
  28. }
  29. [MenuEntry("Convert To Clip Track", MenuPriority.CustomTrackActionSection.convertToClipMode), UsedImplicitly]
  30. class ConvertToClipModeAction : TrackAction
  31. {
  32. public override bool Execute(IEnumerable<TrackAsset> tracks)
  33. {
  34. foreach (var animTrack in tracks.OfType<AnimationTrack>())
  35. animTrack.ConvertToClipMode();
  36. TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved);
  37. return true;
  38. }
  39. public override ActionValidity Validate(IEnumerable<TrackAsset> tracks)
  40. {
  41. if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack))))
  42. return ActionValidity.NotApplicable;
  43. if (tracks.Any(t => t.lockedInHierarchy))
  44. return ActionValidity.Invalid;
  45. if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertToClipMode()))
  46. return ActionValidity.Valid;
  47. return ActionValidity.NotApplicable;
  48. }
  49. }
  50. [MenuEntry("Convert To Infinite Clip", MenuPriority.CustomTrackActionSection.convertFromClipMode), UsedImplicitly]
  51. class ConvertFromClipTrackAction : TrackAction
  52. {
  53. public override bool Execute(IEnumerable<TrackAsset> tracks)
  54. {
  55. foreach (var animTrack in tracks.OfType<AnimationTrack>())
  56. animTrack.ConvertFromClipMode(TimelineEditor.inspectedAsset);
  57. TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved);
  58. return true;
  59. }
  60. public override ActionValidity Validate(IEnumerable<TrackAsset> tracks)
  61. {
  62. if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack))))
  63. return ActionValidity.NotApplicable;
  64. if (tracks.Any(t => t.lockedInHierarchy))
  65. return ActionValidity.Invalid;
  66. if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertFromClipMode()))
  67. return ActionValidity.Valid;
  68. return ActionValidity.NotApplicable;
  69. }
  70. }
  71. abstract class TrackOffsetBaseAction : TrackAction
  72. {
  73. public abstract TrackOffset trackOffset { get; }
  74. public override ActionValidity Validate(IEnumerable<TrackAsset> tracks)
  75. {
  76. if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack))))
  77. return ActionValidity.NotApplicable;
  78. if (tracks.Any(t => t.lockedInHierarchy))
  79. {
  80. return ActionValidity.Invalid;
  81. }
  82. return ActionValidity.Valid;
  83. }
  84. public override bool Execute(IEnumerable<TrackAsset> tracks)
  85. {
  86. foreach (var animTrack in tracks.OfType<AnimationTrack>())
  87. {
  88. animTrack.UnarmForRecord();
  89. animTrack.trackOffset = trackOffset;
  90. }
  91. TimelineEditor.Refresh(RefreshReason.ContentsModified);
  92. return true;
  93. }
  94. }
  95. [MenuEntry("Track Offsets/Apply Transform Offsets", MenuPriority.CustomTrackActionSection.applyTrackOffset), UsedImplicitly]
  96. [ApplyDefaultUndo]
  97. class ApplyTransformOffsetAction : TrackOffsetBaseAction
  98. {
  99. public override TrackOffset trackOffset
  100. {
  101. get { return TrackOffset.ApplyTransformOffsets; }
  102. }
  103. }
  104. [MenuEntry("Track Offsets/Apply Scene Offsets", MenuPriority.CustomTrackActionSection.applySceneOffset), UsedImplicitly]
  105. [ApplyDefaultUndo]
  106. class ApplySceneOffsetAction : TrackOffsetBaseAction
  107. {
  108. public override TrackOffset trackOffset
  109. {
  110. get { return TrackOffset.ApplySceneOffsets; }
  111. }
  112. }
  113. [MenuEntry("Track Offsets/Auto (Deprecated)", MenuPriority.CustomTrackActionSection.applyAutoOffset), UsedImplicitly]
  114. [ApplyDefaultUndo]
  115. class ApplyAutoAction : TrackOffsetBaseAction
  116. {
  117. public override TrackOffset trackOffset
  118. {
  119. get { return TrackOffset.Auto; }
  120. }
  121. }
  122. }