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.

AnimationTrackDrawer.cs 3.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using JetBrains.Annotations;
  3. using UnityEngine;
  4. using UnityEngine.Timeline;
  5. namespace UnityEditor.Timeline
  6. {
  7. [CustomTrackDrawer(typeof(AnimationTrack)), UsedImplicitly]
  8. class AnimationTrackDrawer : TrackDrawer
  9. {
  10. static class Styles
  11. {
  12. public static readonly GUIContent AvatarMaskActiveTooltip = L10n.TextContent(string.Empty, "Enable Avatar Mask");
  13. public static readonly GUIContent AvatarMaskInactiveTooltip = L10n.TextContent(string.Empty, "Disable Avatar Mask");
  14. }
  15. public override void DrawTrackHeaderButton(Rect rect, WindowState state)
  16. {
  17. var animTrack = track as AnimationTrack;
  18. if (animTrack == null) return;
  19. var style = DirectorStyles.Instance.trackAvatarMaskButton;
  20. var tooltip = animTrack.applyAvatarMask ? Styles.AvatarMaskInactiveTooltip : Styles.AvatarMaskActiveTooltip;
  21. using (var check = new EditorGUI.ChangeCheckScope())
  22. {
  23. var toggle = GUI.Toggle(rect, animTrack.applyAvatarMask, tooltip, style);
  24. if (check.changed)
  25. {
  26. animTrack.applyAvatarMask = toggle;
  27. if (state != null)
  28. state.rebuildGraph = true;
  29. }
  30. }
  31. }
  32. public override void DrawRecordingBackground(Rect trackRect, TrackAsset trackAsset, Vector2 visibleTime, WindowState state)
  33. {
  34. base.DrawRecordingBackground(trackRect, trackAsset, visibleTime, state);
  35. DrawBorderOfAddedRecordingClip(trackRect, trackAsset, visibleTime, (WindowState)state);
  36. }
  37. static void DrawBorderOfAddedRecordingClip(Rect trackRect, TrackAsset trackAsset, Vector2 visibleTime, WindowState state)
  38. {
  39. if (!state.IsArmedForRecord(trackAsset))
  40. return;
  41. AnimationTrack animTrack = trackAsset as AnimationTrack;
  42. if (animTrack == null || !animTrack.inClipMode)
  43. return;
  44. // make sure there is no clip but we can add one
  45. TimelineClip clip = null;
  46. if (trackAsset.FindRecordingClipAtTime(state.editSequence.time, out clip) || clip != null)
  47. return;
  48. float yMax = trackRect.yMax;
  49. float yMin = trackRect.yMin;
  50. double startGap = 0;
  51. double endGap = 0;
  52. trackAsset.GetGapAtTime(state.editSequence.time, out startGap, out endGap);
  53. if (double.IsInfinity(endGap))
  54. endGap = visibleTime.y;
  55. if (startGap > visibleTime.y || endGap < visibleTime.x)
  56. return;
  57. startGap = Math.Max(startGap, visibleTime.x);
  58. endGap = Math.Min(endGap, visibleTime.y);
  59. float xMin = state.TimeToPixel(startGap);
  60. float xMax = state.TimeToPixel(endGap);
  61. var r = Rect.MinMaxRect(xMin, yMin, xMax, yMax);
  62. ClipDrawer.DrawClipSelectionBorder(r, ClipBorder.Recording(), ClipBlends.kNone);
  63. }
  64. public override bool HasCustomTrackHeaderButton()
  65. {
  66. var animTrack = track as AnimationTrack;
  67. if (animTrack == null) return false;
  68. return animTrack != null && animTrack.avatarMask != null;
  69. }
  70. }
  71. }