private void RemoveFromCandidates(PropertyModification[] modifications) { EditorCurveBinding[] bindings = AnimationWindowUtility.PropertyModificationsToEditorCurveBindings(modifications, state.activeRootGameObject, m_CandidateClip); if (bindings.Length == 0) { return; } // Remove entry from candidate clip. Undo.RegisterCompleteObjectUndo(m_CandidateClip, "Edit Candidate Curve"); for (int i = 0; i < bindings.Length; ++i) { EditorCurveBinding binding = bindings[i]; if (binding.isPPtrCurve) { AnimationUtility.SetObjectReferenceCurve(m_CandidateClip, binding, null); } else { AnimationUtility.SetEditorCurve(m_CandidateClip, binding, null); } } // Clear out candidate clip if it's empty. if (AnimationUtility.GetCurveBindings(m_CandidateClip).Length == 0 && AnimationUtility.GetObjectReferenceCurveBindings(m_CandidateClip).Length == 0) { ClearCandidates(); } }
public void GoToNextKeyframe(PropertyModification[] modifications) { EditorCurveBinding[] bindings = AnimationWindowUtility.PropertyModificationsToEditorCurveBindings(modifications, state.activeRootGameObject, state.activeAnimationClip); if (bindings.Length == 0) { return; } List <AnimationWindowCurve> curves = new List <AnimationWindowCurve>(); for (int i = 0; i < state.allCurves.Count; ++i) { AnimationWindowCurve curve = state.allCurves[i]; if (Array.Exists(bindings, binding => curve.binding.Equals(binding))) { curves.Add(curve); } } float newTime = AnimationWindowUtility.GetNextKeyframeTime(curves.ToArray(), time.time, state.clipFrameRate); SetCurrentTime(state.SnapToFrame(newTime, AnimationWindowState.SnapMode.SnapToClipFrame)); state.Repaint(); }
public bool CurveExists(PropertyModification[] modifications) { EditorCurveBinding[] bindings = AnimationWindowUtility.PropertyModificationsToEditorCurveBindings(modifications, state.activeRootGameObject, state.activeAnimationClip); if (bindings.Length == 0) { return(false); } EditorCurveBinding[] clipBindings = AnimationUtility.GetCurveBindings(state.activeAnimationClip); if (clipBindings.Length == 0) { return(false); } if (Array.Exists(bindings, binding => Array.Exists(clipBindings, clipBinding => clipBinding.Equals(binding)))) { return(true); } EditorCurveBinding[] objectCurveBindings = AnimationUtility.GetObjectReferenceCurveBindings(state.activeAnimationClip); if (objectCurveBindings.Length == 0) { return(false); } return(Array.Exists(objectCurveBindings, binding => Array.Exists(clipBindings, clipBinding => clipBinding.Equals(binding)))); }
public void RemoveCurve(PropertyModification[] modifications) { EditorCurveBinding[] bindings = AnimationWindowUtility.PropertyModificationsToEditorCurveBindings(modifications, state.activeRootGameObject, state.activeAnimationClip); if (bindings.Length == 0) { return; } BeginKeyModification(); Undo.RegisterCompleteObjectUndo(state.activeAnimationClip, "Remove Curve"); for (int i = 0; i < bindings.Length; ++i) { EditorCurveBinding binding = bindings[i]; if (binding.isPPtrCurve) { AnimationUtility.SetObjectReferenceCurve(state.activeAnimationClip, binding, null); } else { AnimationUtility.SetEditorCurve(state.activeAnimationClip, binding, null); } } EndKeyModification(); RemoveFromCandidates(modifications); ResampleAnimation(); state.Repaint(); }
private List <AnimationWindowKeyframe> GetKeys(PropertyModification[] modifications) { var keys = new List <AnimationWindowKeyframe>(); EditorCurveBinding[] bindings = AnimationWindowUtility.PropertyModificationsToEditorCurveBindings(modifications, state.activeRootGameObject, state.activeAnimationClip); if (bindings.Length == 0) { return(keys); } for (int i = 0; i < state.allCurves.Count; ++i) { AnimationWindowCurve curve = state.allCurves[i]; if (Array.Exists(bindings, binding => curve.binding.Equals(binding))) { int keyIndex = curve.GetKeyframeIndex(state.time); if (keyIndex >= 0) { keys.Add(curve.m_Keyframes[keyIndex]); } } } return(keys); }