internal static void UpdateTangentsFromMode(MovieCurve curve) { for (int i = 0; i < curve.curve.length; i++) { TangentUtility.Internal_UpdateTangents(curve, i); } }
internal static void UpdateTangentsFromModeSurrounding(MovieCurve curve, int index) { TangentUtility.Internal_UpdateTangents(curve, index - 2); TangentUtility.Internal_UpdateTangents(curve, index - 1); TangentUtility.Internal_UpdateTangents(curve, index); TangentUtility.Internal_UpdateTangents(curve, index + 1); TangentUtility.Internal_UpdateTangents(curve, index + 2); }
public static void SetKeyBroken(MovieCurve curve, int index, bool broken) { if (curve == null) { throw new ArgumentNullException("curve"); } if (index < 0 || index >= curve.curve.length) { throw new ArgumentException("Index out of bounds."); } TangentUtility.SetKeyBroken(ref curve, index, broken); // curve.curve.MoveKey(index, key); TangentUtility.UpdateTangentsFromModeSurrounding(curve, index); }
private static void Internal_UpdateTangents(MovieCurve movieCurve, int index) { AnimationCurve curve = movieCurve.curve; if (index >= 0 && index < curve.length) { Keyframe key = curve[index]; var leftTang = TangentUtility.GetKeyLeftTangentMode(movieCurve, index); var rightTang = TangentUtility.GetKeyRightTangentMode(movieCurve, index); if (leftTang == TangentUtility.TangentMode.Linear && index >= 1) { key.inTangent = TangentUtility.Internal_CalculateLinearTangent(curve, index, index - 1); curve.MoveKey(index, key); } if (rightTang == TangentUtility.TangentMode.Linear && index + 1 < curve.length) { key.outTangent = TangentUtility.Internal_CalculateLinearTangent(curve, index, index + 1); curve.MoveKey(index, key); } // if (TangentUtility.GetKeyLeftTangentMode(key) == TangentUtility.TangentMode.ClampedAuto || TangentUtility.GetKeyRightTangentMode(key) == TangentUtility.TangentMode.ClampedAuto) // { // TangentUtility.Internal_CalculateAutoTangent(curve, index); // } if (leftTang == TangentUtility.TangentMode.Auto || rightTang == TangentUtility.TangentMode.Auto) { curve.SmoothTangents(index, 0f); } if (leftTang == TangentUtility.TangentMode.Free && rightTang == TangentUtility.TangentMode.Free && !TangentUtility.GetKeyBroken(movieCurve, index)) { key.outTangent = key.inTangent; curve.MoveKey(index, key); } if (leftTang == TangentUtility.TangentMode.Constant) { key.inTangent = float.PositiveInfinity; curve.MoveKey(index, key); } if (rightTang == TangentUtility.TangentMode.Constant) { key.outTangent = float.PositiveInfinity; curve.MoveKey(index, key); } } }
public static void SetKeyRightTangentMode(MovieCurve curve, int index, TangentUtility.TangentMode tangentMode) { if (curve == null) { throw new ArgumentNullException("curve"); } if (index < 0 || index >= curve.curve.length) { throw new ArgumentException("Index out of bounds."); } if (tangentMode != TangentUtility.TangentMode.Free) { TangentUtility.SetKeyBroken(curve, index, true); } TangentUtility.SetKeyRightTangentMode(ref curve, index, tangentMode); // curve.MoveKey(index, key); TangentUtility.UpdateTangentsFromModeSurrounding(curve, index); }