12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using System.Linq;
- using UnityEngine;
- using UnityEngine.Timeline;
- namespace UnityEditor.Timeline
- {
- static class AnimationOffsetMenu
- {
- public static GUIContent MatchPreviousMenuItem = EditorGUIUtility.TrTextContent("Match Offsets To Previous Clip");
- public static GUIContent MatchNextMenuItem = EditorGUIUtility.TrTextContent("Match Offsets To Next Clip");
- public static string MatchFieldsPrefix = "Match Offsets Fields/";
- public static GUIContent ResetOffsetMenuItem = EditorGUIUtility.TrTextContent("Reset Offsets");
- static bool EnforcePreviewMode(WindowState state)
- {
- state.previewMode = true; // try and set the preview mode
- if (!state.previewMode)
- {
- Debug.LogError("Match clips cannot be completed because preview mode cannot be enabed");
- return false;
- }
- return true;
- }
- internal static void MatchClipsToPrevious(WindowState state, TimelineClip[] clips)
- {
- if (!EnforcePreviewMode(state))
- return;
- clips = clips.OrderBy(x => x.start).ToArray();
- foreach (var clip in clips)
- {
- var sceneObject = TimelineUtility.GetSceneGameObject(state.editSequence.director, clip.parentTrack);
- if (sceneObject != null)
- {
- TimelineUndo.PushUndo(clip.asset, "Match Clip");
- TimelineAnimationUtilities.MatchPrevious(clip, sceneObject.transform, state.editSequence.director);
- }
- }
- InspectorWindow.RepaintAllInspectors();
- TimelineEditor.Refresh(RefreshReason.ContentsModified);
- }
- internal static void MatchClipsToNext(WindowState state, TimelineClip[] clips)
- {
- if (!EnforcePreviewMode(state))
- return;
- clips = clips.OrderByDescending(x => x.start).ToArray();
- foreach (var clip in clips)
- {
- var sceneObject = TimelineUtility.GetSceneGameObject(state.editSequence.director, clip.parentTrack);
- if (sceneObject != null)
- {
- TimelineUndo.PushUndo(clip.asset, "Match Clip");
- TimelineAnimationUtilities.MatchNext(clip, sceneObject.transform, state.editSequence.director);
- }
- }
- InspectorWindow.RepaintAllInspectors();
- TimelineEditor.Refresh(RefreshReason.ContentsModified);
- }
- public static void ResetClipOffsets(WindowState state, TimelineClip[] clips)
- {
- foreach (var clip in clips)
- {
- if (clip.asset is AnimationPlayableAsset)
- {
- TimelineUndo.PushUndo(clip.asset, "Reset Offsets");
- var playableAsset = (AnimationPlayableAsset)clip.asset;
- playableAsset.ResetOffsets();
- }
- }
- state.rebuildGraph = true;
- InspectorWindow.RepaintAllInspectors();
- TimelineEditor.Refresh(RefreshReason.SceneNeedsUpdate);
- }
- }
- }
|