예제 #1
0
 private void DoManipulators()
 {
     if (!(this.m_EditorClip == null) && this.m_EditorClip.clip != null)
     {
         AnimationPlayableAsset animationPlayableAsset = this.m_EditorClip.clip.asset as AnimationPlayableAsset;
         AnimationTrack         animationTrack         = this.m_EditorClip.clip.parentTrack as AnimationTrack;
         Transform transform = this.GetTransform();
         if (transform != null && animationPlayableAsset != null && this.m_OffsetEditMode != TimelineAnimationUtilities.OffsetEditMode.None && animationTrack != null)
         {
             Vector3    vector     = transform.get_position();
             Quaternion quaternion = transform.get_rotation();
             EditorGUI.BeginChangeCheck();
             if (this.m_OffsetEditMode == TimelineAnimationUtilities.OffsetEditMode.Translation)
             {
                 vector = Handles.PositionHandle(vector, (Tools.get_pivotRotation() != 1) ? quaternion : Quaternion.get_identity());
             }
             else if (this.m_OffsetEditMode == TimelineAnimationUtilities.OffsetEditMode.Rotation)
             {
                 quaternion = Handles.RotationHandle(quaternion, vector);
             }
             if (EditorGUI.EndChangeCheck())
             {
                 TimelineAnimationUtilities.RigidTransform rigidTransform = TimelineAnimationUtilities.UpdateClipOffsets(animationPlayableAsset, animationTrack, transform, vector, quaternion);
                 animationPlayableAsset.position = rigidTransform.position;
                 animationPlayableAsset.rotation = rigidTransform.rotation;
                 this.Reevaluate();
                 base.Repaint();
             }
         }
     }
 }
예제 #2
0
 private void DoOffsetManipulator()
 {
     if (base.get_targets().Length <= 1)
     {
         if (!(base.timelineWindow == null) && base.timelineWindow.state != null && !(base.timelineWindow.state.currentDirector == null))
         {
             AnimationTrack animationTrack = base.get_target() as AnimationTrack;
             if (animationTrack != null && animationTrack.applyOffsets && this.m_OffsetEditMode != TimelineAnimationUtilities.OffsetEditMode.None)
             {
                 GameObject sceneGameObject = TimelineUtility.GetSceneGameObject(base.timelineWindow.state.currentDirector, animationTrack);
                 Transform  transform       = (!(sceneGameObject != null)) ? null : sceneGameObject.get_transform();
                 TimelineAnimationUtilities.RigidTransform trackOffsets = TimelineAnimationUtilities.GetTrackOffsets(animationTrack, transform);
                 EditorGUI.BeginChangeCheck();
                 TimelineAnimationUtilities.OffsetEditMode offsetEditMode = this.m_OffsetEditMode;
                 if (offsetEditMode != TimelineAnimationUtilities.OffsetEditMode.Translation)
                 {
                     if (offsetEditMode == TimelineAnimationUtilities.OffsetEditMode.Rotation)
                     {
                         trackOffsets.rotation = Handles.RotationHandle(trackOffsets.rotation, trackOffsets.position);
                     }
                 }
                 else
                 {
                     trackOffsets.position = Handles.PositionHandle(trackOffsets.position, (Tools.get_pivotRotation() != 1) ? trackOffsets.rotation : Quaternion.get_identity());
                 }
                 if (EditorGUI.EndChangeCheck())
                 {
                     TimelineAnimationUtilities.UpdateTrackOffset(animationTrack, transform, trackOffsets);
                     this.Evaluate();
                     base.Repaint();
                 }
             }
         }
     }
 }
예제 #3
0
        public override bool Execute(IEnumerable <TimelineClip> clips)
        {
            var clip = clips.FirstOrDefault();

            if (clip != null && (clip.curves != null || clip.animationClip != null))
            {
                var clipToEdit = clip.animationClip != null ? clip.animationClip : clip.curves;
                if (clipToEdit == null)
                {
                    return(false);
                }

                GameObject gameObject = null;
                if (TimelineEditor.inspectedDirector != null)
                {
                    gameObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, clip.parentTrack);
                }

                var timeController = TimelineAnimationUtilities.CreateTimeController(clip);
                TimelineAnimationUtilities.EditAnimationClipWithTimeController(
                    clipToEdit, timeController, clip.animationClip != null  ? gameObject : null);
                return(true);
            }

            return(false);
        }
        public static bool Do(WindowState state, TrackAsset track)
        {
            AnimationClip clipToEdit = null;

            AnimationTrack animationTrack = track as AnimationTrack;

            if (animationTrack != null)
            {
                if (!animationTrack.CanConvertToClipMode())
                {
                    return(false);
                }

                clipToEdit = animationTrack.infiniteClip;
            }
            else if (track.hasCurves)
            {
                clipToEdit = track.curves;
            }

            if (clipToEdit == null)
            {
                return(false);
            }

            var gameObject     = state.GetSceneReference(track);
            var timeController = TimelineAnimationUtilities.CreateTimeController(state, CreateTimeControlClipData(track));

            TimelineAnimationUtilities.EditAnimationClipWithTimeController(clipToEdit, timeController, gameObject);

            return(true);
        }
예제 #5
0
        public override bool Execute(TimelineWindow.TimelineState state, TimelineClip[] clips)
        {
            TimelineClip timelineClip = clips[0];
            bool         result;

            if (timelineClip.curves != null || timelineClip.animationClip != null)
            {
                AnimationClip animationClip = (!(timelineClip.animationClip != null)) ? timelineClip.curves : timelineClip.animationClip;
                if (animationClip == null)
                {
                    result = false;
                }
                else
                {
                    Component bindingForTrack = state.GetBindingForTrack(timelineClip.parentTrack);
                    TimelineWindowTimeControl timeController = TimelineAnimationUtilities.CreateTimeController(state, timelineClip);
                    TimelineAnimationUtilities.EditAnimationClipWithTimeController(animationClip, timeController, (!(timelineClip.animationClip != null)) ? null : bindingForTrack);
                    result = true;
                }
            }
            else
            {
                result = false;
            }
            return(result);
        }
예제 #6
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            base.get_serializedObject().Update();
            bool flag = this.m_lastPosition != this.m_TrackPositionProperty.get_vector3Value() || this.m_lastRotation != this.m_TrackRotationProperty.get_quaternionValue();

            this.m_lastPosition = this.m_TrackPositionProperty.get_vector3Value();
            this.m_lastRotation = this.m_TrackRotationProperty.get_quaternionValue();
            EditorGUI.BeginChangeCheck();
            this.DrawAvatarProperties();
            if (EditorGUI.EndChangeCheck())
            {
                this.RebuildGraph();
            }
            if (base.get_targets().Length == 1)
            {
                EditorGUI.BeginChangeCheck();
                EditorGUILayout.PropertyField(this.m_ApplyOffsetsProperty, AnimationTrackInspector.Styles.TrackOffsetTitle, new GUILayoutOption[0]);
                if (EditorGUI.EndChangeCheck())
                {
                    this.RebuildGraph();
                }
                Animator animator = this.GetAnimator();
                bool     flag2    = animator == null || !TimelineAnimationUtilities.ValidateOffsetAvailabitity(base.timelineWindow.state.currentDirector, animator) || !this.m_ApplyOffsetsProperty.get_boolValue();
                using (new EditorGUI.DisabledScope(flag2))
                {
                    EditorGUI.set_indentLevel(EditorGUI.get_indentLevel() + 1);
                    float num  = 0f;
                    float num2 = 0f;
                    GUI.get_skin().get_button().CalcMinMaxWidth(AnimationTrackInspector.Styles.PositionIcon, ref num, ref num2);
                    AnimationTrackInspector.ShowMotionOffsetEditModeToolbar(ref this.m_OffsetEditMode);
                    SceneView.RepaintAll();
                    EditorGUI.BeginChangeCheck();
                    EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                    EditorGUILayout.PropertyField(this.m_TrackPositionProperty, new GUILayoutOption[0]);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.BeginHorizontal(new GUILayoutOption[0]);
                    AnimationPlayableAssetInspector.ShowRotationField(this.m_TrackRotationProperty);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.Space();
                    EditorGUILayout.Space();
                    EditorGUI.set_indentLevel(EditorGUI.get_indentLevel() - 1);
                    flag |= EditorGUI.EndChangeCheck();
                    if (flag)
                    {
                        AnimationTrack animationTrack = (AnimationTrack)base.get_target();
                        animationTrack.UpdateClipOffsets();
                        this.Evaluate();
                    }
                }
            }
            else
            {
                GUILayout.Label(AnimationTrackInspector.Styles.TrackOffsetCannotBeEditedWarning, EditorStyles.get_helpBox(), new GUILayoutOption[0]);
            }
            AnimationTrackInspector.MatchTargetsField(this.m_MatchFieldsProperty, null, null, false);
            base.get_serializedObject().ApplyModifiedProperties();
        }
예제 #7
0
 void OnDestroy()
 {
     if (state != null)
     {
         state.OnDestroy();
     }
     m_HasBeenInitialized = false;
     RemoveEditorCallbacks();
     TimelineAnimationUtilities.UnlinkAnimationWindow();
 }
예제 #8
0
        internal static void DeleteItems(IEnumerable <ITimelineItem> items)
        {
            var tracks = items.GroupBy(c => c.parentTrack);

            foreach (var track in tracks)
            {
                TimelineUndo.PushUndo(track.Key, "Delete Items");
            }

            TimelineAnimationUtilities.UnlinkAnimationWindowFromClips(items.OfType <ClipItem>().Select(i => i.clip));

            EditMode.PrepareItemsDelete(ItemsUtils.ToItemsPerTrack(items));
            EditModeUtils.Delete(items);

            SelectionManager.RemoveAllClips();
        }
예제 #9
0
        void OnAfterSequenceChange()
        {
            Repaint();

            m_SequencePath = state.GetCurrentSequencePath();

            m_LastFrameHadSequence = state.editSequence.asset != null;
            TimelineWindowViewPrefs.SaveAll();

            // this prevent clearing the animation window when going in/out of playmode, but
            // clears it when we switch master timelines
            if (m_PreviousMasterSequence != null && m_PreviousMasterSequence != state.masterSequence.asset)
            {
                TimelineAnimationUtilities.UnlinkAnimationWindow();
            }
        }
        public override bool Execute(WindowState state, TrackAsset[] tracks)
        {
            // disable preview mode so deleted tracks revert to default state
            // Case 956129: Disable preview mode _before_ deleting the tracks, since clip data is still needed
            state.previewMode = false;

            TimelineAnimationUtilities.UnlinkAnimationWindowFromTracks(tracks);

            foreach (var track in tracks)
            {
                Do(state.editSequence.asset, track);
            }

            state.Refresh();

            return(true);
        }
예제 #11
0
        public override bool Execute(IEnumerable <TrackAsset> tracks)
        {
            // disable preview mode so deleted tracks revert to default state
            // Case 956129: Disable preview mode _before_ deleting the tracks, since clip data is still needed
            TimelineEditor.state.previewMode = false;

            TimelineAnimationUtilities.UnlinkAnimationWindowFromTracks(tracks);

            foreach (var track in tracks)
            {
                Do(TimelineEditor.inspectedAsset, track);
            }

            TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved);

            return(true);
        }
 internal static void MatchClipsToNext(ITimelineState state, TimelineClip[] clips)
 {
     if (AnimationOffsetMenu.EnforcePreviewMode(state))
     {
         clips = (from x in clips
                  orderby x.start descending
                  select x).ToArray <TimelineClip>();
         TimelineClip[] array = clips;
         for (int i = 0; i < array.Length; i++)
         {
             TimelineClip timelineClip = array[i];
             TimelineUndo.PushUndo(timelineClip.asset, "Match Clip");
             GameObject sceneGameObject = TimelineUtility.GetSceneGameObject(state.currentDirector, timelineClip.parentTrack);
             TimelineAnimationUtilities.MatchNext(timelineClip, sceneGameObject.get_transform(), state.currentDirector);
         }
     }
 }
        void DoOffsetManipulator()
        {
            if (targets.Length > 1) //do not edit the track offset on a multiple selection
            {
                return;
            }

            if (timelineWindow == null || timelineWindow.state == null || timelineWindow.state.editSequence.director == null)
            {
                return;
            }

            AnimationTrack animationTrack = target as AnimationTrack;

            if (animationTrack != null && (animationTrack.trackOffset == TrackOffset.ApplyTransformOffsets) && m_OffsetEditMode != TimelineAnimationUtilities.OffsetEditMode.None)
            {
                var boundObject          = TimelineUtility.GetSceneGameObject(timelineWindow.state.editSequence.director, animationTrack);
                var boundObjectTransform = boundObject != null ? boundObject.transform : null;

                var offsets = TimelineAnimationUtilities.GetTrackOffsets(animationTrack, boundObjectTransform);
                EditorGUI.BeginChangeCheck();

                switch (m_OffsetEditMode)
                {
                case TimelineAnimationUtilities.OffsetEditMode.Translation:
                    offsets.position = Handles.PositionHandle(offsets.position, (Tools.pivotRotation == PivotRotation.Global)
                            ? Quaternion.identity
                            : offsets.rotation);
                    break;

                case TimelineAnimationUtilities.OffsetEditMode.Rotation:
                    offsets.rotation = Handles.RotationHandle(offsets.rotation, offsets.position);
                    break;
                }

                if (EditorGUI.EndChangeCheck())
                {
                    UndoExtensions.RegisterTrack(animationTrack, L10n.Tr("Inspector"));
                    TimelineAnimationUtilities.UpdateTrackOffset(animationTrack, boundObjectTransform, offsets);
                    Evaluate();
                    Repaint();
                }
            }
        }
        public static void MatchPrevious(TimelineClip currentClip, Transform matchPoint, PlayableDirector director)
        {
            MatchTargetFields matchFields = TimelineAnimationUtilities.GetMatchFields(currentClip);

            if (matchFields != MatchTargetFieldConstants.None && !(matchPoint == null))
            {
                double       time         = director.get_time();
                TimelineClip previousClip = TimelineAnimationUtilities.GetPreviousClip(currentClip);
                if (previousClip != null && currentClip != previousClip)
                {
                    AnimationTrack animationTrack  = currentClip.parentTrack as AnimationTrack;
                    double         blendInDuration = currentClip.blendInDuration;
                    currentClip.blendInDuration = 0.0;
                    double blendOutDuration = previousClip.blendOutDuration;
                    previousClip.blendOutDuration = 0.0;
                    director.Stop();
                    animationTrack.RemoveClip(currentClip);
                    director.Play();
                    double num = (currentClip.start <= previousClip.end) ? currentClip.start : previousClip.end;
                    director.set_time(num - 1E-05);
                    director.Evaluate();
                    Vector3    position = matchPoint.get_position();
                    Quaternion rotation = matchPoint.get_rotation();
                    director.Stop();
                    animationTrack.AddClip(currentClip);
                    animationTrack.RemoveClip(previousClip);
                    director.Play();
                    director.set_time(currentClip.start + 1E-05);
                    director.Evaluate();
                    AnimationPlayableAsset asset = currentClip.asset as AnimationPlayableAsset;
                    TimelineAnimationUtilities.RigidTransform result = TimelineAnimationUtilities.UpdateClipOffsets(asset, animationTrack, matchPoint, position, rotation);
                    TimelineAnimationUtilities.WriteMatchFields(asset, result, matchFields);
                    currentClip.blendInDuration   = blendInDuration;
                    previousClip.blendOutDuration = blendOutDuration;
                    director.Stop();
                    animationTrack.AddClip(previousClip);
                    director.Play();
                    director.set_time(time);
                    director.Evaluate();
                }
            }
        }
        internal static void MatchClipsToNext(TimelineClip[] clips)
        {
            if (!EnforcePreviewMode())
            {
                return;
            }

            clips = clips.OrderByDescending(x => x.start).ToArray();
            foreach (var clip in clips)
            {
                var sceneObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, clip.GetParentTrack());
                if (sceneObject != null)
                {
                    TimelineAnimationUtilities.MatchNext(clip, sceneObject.transform, TimelineEditor.inspectedDirector);
                }
            }

            InspectorWindow.RepaintAllInspectors();
            TimelineEditor.Refresh(RefreshReason.ContentsModified);
        }
예제 #16
0
        public override bool Execute(WindowState state, TimelineClip[] clips)
        {
            var clip = clips[0];

            if (clip.curves != null || clip.animationClip != null)
            {
                var clipToEdit = clip.animationClip != null ? clip.animationClip : clip.curves;
                if (clipToEdit == null)
                {
                    return(false);
                }

                var gameObject     = state.GetSceneReference(clip.parentTrack);
                var timeController = TimelineAnimationUtilities.CreateTimeController(state, clip);
                TimelineAnimationUtilities.EditAnimationClipWithTimeController(
                    clipToEdit, timeController, clip.animationClip != null  ? gameObject : null);
                return(true);
            }

            return(false);
        }
        void OnAfterSequenceChange()
        {
            Repaint();

            m_SequencePath = state.GetCurrentSequencePath();

            m_LastFrameHadSequence = state.editSequence.asset != null;
            TimelineWindowViewPrefs.SaveAll();

            // this prevent clearing the animation window when going in/out of playmode, but
            // clears it when we switch master timelines
            // the cast to a object will handle the case where the sequence has been deleted.
            object previousMasterSequence = m_PreviousMasterSequence;
            bool   isDeleted  = previousMasterSequence != null && m_PreviousMasterSequence == null;
            bool   hasChanged = m_PreviousMasterSequence != null && m_PreviousMasterSequence != state.masterSequence.asset;

            if (isDeleted || hasChanged)
            {
                TimelineAnimationUtilities.UnlinkAnimationWindow();
            }
        }
        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);
        }
예제 #19
0
        public static bool Do(TimelineWindow.TimelineState state, TrackAsset track)
        {
            AnimationTrack animationTrack = track as AnimationTrack;
            bool           result;

            if (animationTrack == null)
            {
                result = false;
            }
            else if (!animationTrack.CanConvertToClipMode())
            {
                result = false;
            }
            else
            {
                Component bindingForTrack = state.GetBindingForTrack(animationTrack);
                TimelineWindowTimeControl timeController = TimelineAnimationUtilities.CreateTimeController(state, EditTrackInAnimationWindow.CreateTimeControlClipData(animationTrack));
                TimelineAnimationUtilities.EditAnimationClipWithTimeController(animationTrack.animClip, timeController, (!(bindingForTrack != null)) ? null : bindingForTrack.get_gameObject());
                result = true;
            }
            return(result);
        }
예제 #20
0
        public static bool Do(TrackAsset track)
        {
            AnimationClip clipToEdit = null;

            AnimationTrack animationTrack = track as AnimationTrack;

            if (animationTrack != null)
            {
                if (!animationTrack.CanConvertToClipMode())
                {
                    return(false);
                }

                clipToEdit = animationTrack.infiniteClip;
            }
            else if (track.hasCurves)
            {
                clipToEdit = track.curves;
            }

            if (clipToEdit == null)
            {
                return(false);
            }

            GameObject gameObject = null;

            if (TimelineEditor.inspectedDirector != null)
            {
                gameObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, track);
            }

            var timeController = TimelineAnimationUtilities.CreateTimeController(CreateTimeControlClipData(track));

            TimelineAnimationUtilities.EditAnimationClipWithTimeController(clipToEdit, timeController, gameObject);

            return(true);
        }
        void DoManipulators()
        {
            if (m_EditorClip == null || m_EditorClip.clip == null)
            {
                return;
            }

            AnimationPlayableAsset animationPlayable = m_EditorClip.clip.asset as AnimationPlayableAsset;
            AnimationTrack         track             = m_EditorClip.clip.parentTrack as AnimationTrack;
            Transform transform = GetTransform();

            if (transform != null && animationPlayable != null && m_OffsetEditMode != TimelineAnimationUtilities.OffsetEditMode.None && track != null)
            {
                UndoExtensions.RegisterPlayableAsset(animationPlayable, "Inspector");
                Vector3    position = transform.position;
                Quaternion rotation = transform.rotation;

                EditorGUI.BeginChangeCheck();
                if (m_OffsetEditMode == TimelineAnimationUtilities.OffsetEditMode.Translation)
                {
                    position = Handles.PositionHandle(position, Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : rotation);
                }
                else if (m_OffsetEditMode == TimelineAnimationUtilities.OffsetEditMode.Rotation)
                {
                    rotation = Handles.RotationHandle(rotation, position);
                }

                if (EditorGUI.EndChangeCheck())
                {
                    var res = TimelineAnimationUtilities.UpdateClipOffsets(animationPlayable, track, transform, position, rotation);
                    animationPlayable.position    = res.position;
                    animationPlayable.eulerAngles = AnimationUtility.GetClosestEuler(res.rotation, animationPlayable.eulerAngles, RotationOrder.OrderZXY);
                    Reevaluate();
                    Repaint();
                }
            }
        }
예제 #22
0
        void ApplyConstraints(EditorCurveBinding binding, AnimationCurve curve)
        {
            if (curve.length == 0)
            {
                return;
            }

            var curveUpdated = false;

            var property = m_PropertiesMap[binding];

            if (property.propertyType == SerializedPropertyType.Boolean)
            {
                TimelineAnimationUtilities.ConstrainCurveToBooleanValues(curve);
                curveUpdated = true;
            }
            else
            {
                var range = AnimatedParameterUtility.GetAttributeForProperty <RangeAttribute>(property);
                if (range != null)
                {
                    TimelineAnimationUtilities.ConstrainCurveToRange(curve, range.min, range.max);
                    curveUpdated = true;
                }
            }

            if (!curveUpdated)
            {
                return;
            }

            using (new RebuildGuard(this))
            {
                AnimationUtility.SetEditorCurve(m_ProxyCurves, binding, curve);
            }
        }
예제 #23
0
        public override bool Execute(IEnumerable <TimelineClip> clips)
        {
            TimelineClip  clip;
            AnimationClip clipToEdit;

            if (!GetEditableClip(clips, out clip, out clipToEdit))
            {
                return(false);
            }

            GameObject gameObject = null;

            if (TimelineEditor.inspectedDirector != null)
            {
                gameObject = TimelineUtility.GetSceneGameObject(TimelineEditor.inspectedDirector, clip.parentTrack);
            }

            var timeController = TimelineAnimationUtilities.CreateTimeController(clip);

            TimelineAnimationUtilities.EditAnimationClipWithTimeController(
                clipToEdit, timeController, clip.animationClip != null ? gameObject : null);

            return(true);
        }