123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- using System.Collections.Generic;
- using System.Linq;
- using JetBrains.Annotations;
- using UnityEditor.Timeline.Actions;
- using UnityEngine;
- using UnityEngine.Timeline;
- using UnityEngine.Playables;
-
- namespace UnityEditor.Timeline
- {
- [ApplyDefaultUndo("Match Offsets")]
- [MenuEntry("Match Offsets To Previous Clip", MenuPriority.CustomClipActionSection.matchPrevious), UsedImplicitly]
- class MatchOffsetsPreviousAction : ClipAction
- {
- public override bool Execute(IEnumerable<TimelineClip> clips)
- {
- if (clips == null || !clips.Any())
- return false;
- AnimationOffsetMenu.MatchClipsToPrevious(clips.Where(x => IsValidClip(x, TimelineEditor.inspectedDirector)).ToArray());
- return true;
- }
-
- static bool IsValidClip(TimelineClip clip, PlayableDirector director)
- {
- return clip != null &&
- clip.GetParentTrack() != null &&
- (clip.asset as AnimationPlayableAsset) != null &&
- clip.GetParentTrack().clips.Any(x => x.start < clip.start) &&
- TimelineUtility.GetSceneGameObject(director, clip.GetParentTrack()) != null;
- }
-
- public override ActionValidity Validate(IEnumerable<TimelineClip> clips)
- {
- if (!clips.All(TimelineAnimationUtilities.IsAnimationClip))
- return ActionValidity.NotApplicable;
-
- var director = TimelineEditor.inspectedDirector;
- if (TimelineEditor.inspectedDirector == null)
- return ActionValidity.NotApplicable;
-
- if (clips.Any(c => IsValidClip(c, director)))
- return ActionValidity.Valid;
-
- return ActionValidity.NotApplicable;
- }
- }
-
- [ApplyDefaultUndo("Match Offsets")]
- [MenuEntry("Match Offsets To Next Clip", MenuPriority.CustomClipActionSection.matchNext), UsedImplicitly]
- class MatchOffsetsNextAction : ClipAction
- {
- public override bool Execute(IEnumerable<TimelineClip> clips)
- {
- AnimationOffsetMenu.MatchClipsToNext(clips.Where(x => IsValidClip(x, TimelineEditor.inspectedDirector)).ToArray());
- return true;
- }
-
- static bool IsValidClip(TimelineClip clip, PlayableDirector director)
- {
- return clip != null &&
- clip.GetParentTrack() != null &&
- (clip.asset as AnimationPlayableAsset) != null &&
- clip.GetParentTrack().clips.Any(x => x.start > clip.start) &&
- TimelineUtility.GetSceneGameObject(director, clip.GetParentTrack()) != null;
- }
-
- public override ActionValidity Validate(IEnumerable<TimelineClip> clips)
- {
- if (!clips.All(TimelineAnimationUtilities.IsAnimationClip))
- return ActionValidity.NotApplicable;
-
- var director = TimelineEditor.inspectedDirector;
- if (TimelineEditor.inspectedDirector == null)
- return ActionValidity.NotApplicable;
-
- if (clips.Any(c => IsValidClip(c, director)))
- return ActionValidity.Valid;
-
- return ActionValidity.NotApplicable;
- }
- }
-
- [ApplyDefaultUndo]
- [MenuEntry("Reset Offsets", MenuPriority.CustomClipActionSection.resetOffset), UsedImplicitly]
- class ResetOffsets : ClipAction
- {
- public override bool Execute(IEnumerable<TimelineClip> clips)
- {
- AnimationOffsetMenu.ResetClipOffsets(clips.Where(TimelineAnimationUtilities.IsAnimationClip).ToArray());
- return true;
- }
-
- public override ActionValidity Validate(IEnumerable<TimelineClip> clips)
- {
- if (!clips.All(TimelineAnimationUtilities.IsAnimationClip))
- return ActionValidity.NotApplicable;
-
- return ActionValidity.Valid;
- }
- }
- }
|