public void ToggleWeighted(WeightedMode weightedMode, List <KeyIdentifier> keysToSet) { bool allWeighted = keysToSet.TrueForAll(key => (key.keyframe.weightedMode & weightedMode) == weightedMode); List <ChangedCurve> changedCurves = new List <ChangedCurve>(); foreach (KeyIdentifier keyToSet in keysToSet) { AnimationCurve animationCurve = keyToSet.curve; Keyframe key = keyToSet.keyframe; bool weighted = (key.weightedMode & weightedMode) == weightedMode; if (weighted == allWeighted) { WeightedMode lastWeightedMode = key.weightedMode; key.weightedMode = weighted ? key.weightedMode & ~weightedMode : key.weightedMode | weightedMode; if (key.weightedMode != WeightedMode.None) { TangentMode rightTangentMode = AnimationUtility.GetKeyRightTangentMode(key); TangentMode leftTangentMode = AnimationUtility.GetKeyLeftTangentMode(key); if ((lastWeightedMode & WeightedMode.Out) == WeightedMode.None && (key.weightedMode & WeightedMode.Out) == WeightedMode.Out) { if (rightTangentMode == TangentMode.Linear || rightTangentMode == TangentMode.Constant) { AnimationUtility.SetKeyRightTangentMode(ref key, TangentMode.Free); } if (keyToSet.key < (animationCurve.length - 1)) { key.outWeight = 1 / 3.0f; } } if ((lastWeightedMode & WeightedMode.In) == WeightedMode.None && (key.weightedMode & WeightedMode.In) == WeightedMode.In) { if (leftTangentMode == TangentMode.Linear || leftTangentMode == TangentMode.Constant) { AnimationUtility.SetKeyLeftTangentMode(ref key, TangentMode.Free); } if (keyToSet.key > 0) { key.inWeight = 1 / 3.0f; } } } animationCurve.MoveKey(keyToSet.key, key); AnimationUtility.UpdateTangentsFromModeSurrounding(animationCurve, keyToSet.key); ChangedCurve changedCurve = new ChangedCurve(animationCurve, keyToSet.curveId, keyToSet.binding); if (!changedCurves.Contains(changedCurve)) { changedCurves.Add(changedCurve); } } } updater.UpdateCurves(changedCurves, "Toggle Weighted"); }
public SerializableKeyframe(float time, float value, float inTangent, float outTangent, float inWeight, float outWeight, WeightedMode weightedMode) { this.time = time; this.value = value; this.inTangent = inTangent; this.outTangent = outTangent; this.inWeight = inWeight; this.outWeight = outWeight; this.weightedMode = weightedMode; }
public CurveKeyframe(float time, float value) { this.time = time; this.value = value; inTangent = 0; outTangent = 0; inWeight = 0; outWeight = 0; WeightedMode = WeightedMode.None; }
public CurveKeyframe(float time, float value, float inTangent, float outTangent, float inWeight, float outWeight) { this.time = time; this.value = value; this.inTangent = inTangent; this.outTangent = outTangent; this.inWeight = inWeight; this.outWeight = outWeight; WeightedMode = WeightedMode.None; }
public KeyFrameInfo(Keyframe keyframe) { Value = keyframe.value; InTangent = keyframe.inTangent; InWeight = keyframe.inWeight; OutTangent = keyframe.outTangent; OutWeight = keyframe.outWeight; Time = keyframe.time; WeightedMode = keyframe.weightedMode; }
public SPCRAnimCurveKeyFrameSave(Keyframe keyframe) { time = keyframe.time; value = keyframe.value; inTangent = keyframe.inTangent; outTangent = keyframe.outTangent; inWeight = keyframe.inWeight; outWeight = keyframe.outWeight; weightedMode = keyframe.weightedMode; }
protected override void ReadFromImpl(object obj) { base.ReadFromImpl(obj); Keyframe uo = (Keyframe)obj; inTangent = uo.inTangent; outTangent = uo.outTangent; inWeight = uo.inWeight; outWeight = uo.outWeight; weightedMode = uo.weightedMode; }
public void ToggleWeighted(WeightedMode weightedMode, List <KeyIdentifier> keysToSet) { bool flag = keysToSet.TrueForAll((KeyIdentifier key) => (key.keyframe.weightedMode & weightedMode) == weightedMode); List <ChangedCurve> list = new List <ChangedCurve>(); foreach (KeyIdentifier current in keysToSet) { AnimationCurve curve = current.curve; Keyframe keyframe = current.keyframe; bool flag2 = (keyframe.weightedMode & weightedMode) == weightedMode; if (flag2 == flag) { WeightedMode weightedMode2 = keyframe.weightedMode; keyframe.weightedMode = ((!flag2) ? (keyframe.weightedMode | weightedMode) : (keyframe.weightedMode & ~weightedMode)); if (keyframe.weightedMode != WeightedMode.None) { AnimationUtility.TangentMode keyRightTangentMode = AnimationUtility.GetKeyRightTangentMode(keyframe); AnimationUtility.TangentMode keyLeftTangentMode = AnimationUtility.GetKeyLeftTangentMode(keyframe); if ((weightedMode2 & WeightedMode.Out) == WeightedMode.None && (keyframe.weightedMode & WeightedMode.Out) == WeightedMode.Out) { if (keyRightTangentMode == AnimationUtility.TangentMode.Linear || keyRightTangentMode == AnimationUtility.TangentMode.Constant) { AnimationUtility.SetKeyRightTangentMode(ref keyframe, AnimationUtility.TangentMode.Free); } if (current.key < curve.length - 1) { keyframe.outWeight = 0.333333343f; } } if ((weightedMode2 & WeightedMode.In) == WeightedMode.None && (keyframe.weightedMode & WeightedMode.In) == WeightedMode.In) { if (keyLeftTangentMode == AnimationUtility.TangentMode.Linear || keyLeftTangentMode == AnimationUtility.TangentMode.Constant) { AnimationUtility.SetKeyLeftTangentMode(ref keyframe, AnimationUtility.TangentMode.Free); } if (current.key > 0) { keyframe.inWeight = 0.333333343f; } } } curve.MoveKey(current.key, keyframe); AnimationUtility.UpdateTangentsFromModeSurrounding(curve, current.key); ChangedCurve item = new ChangedCurve(curve, current.curveId, current.binding); if (!list.Contains(item)) { list.Add(item); } } } this.updater.UpdateCurves(list, "Toggle Weighted"); }
public AnimationWindowKeyframe(AnimationWindowCurve curve, Keyframe key) { this.time = key.time; this.value = key.value; this.curve = curve; this.m_InTangent = key.inTangent; this.m_OutTangent = key.outTangent; this.m_InWeight = key.inWeight; this.m_OutWeight = key.outWeight; this.m_WeightedMode = key.weightedMode; this.m_TangentMode = key.tangentModeInternal; this.m_curve = curve; }
public static Keyframe CreateKeyframe(float time, float value, ImportSettings.InterpolationMode interpolationMode) { float inTangent = 0; float outTangent = 0; float inWeight = 0; float outWeight = 0; WeightedMode weightedMode = WeightedMode.None; bool isKeyBroken = false; if (interpolationMode == ImportSettings.InterpolationMode.Step) { inTangent = float.PositiveInfinity; inWeight = 1; outTangent = float.PositiveInfinity; outWeight = 1; weightedMode = WeightedMode.Both; isKeyBroken = true; } else if (interpolationMode == ImportSettings.InterpolationMode.CubicSpline) { // @TODO: Find out what the right math is to calculate the tangent/weight values. // For now, just let Unity do whatever it does by default :) return(new Keyframe(time, value)); } else if (interpolationMode == ImportSettings.InterpolationMode.Linear) { inTangent = 0; inWeight = 0; outTangent = 0; outWeight = 0; weightedMode = WeightedMode.Both; isKeyBroken = true; } Keyframe keyframe = new Keyframe(time, value, inTangent, outTangent, inWeight, outWeight); keyframe.weightedMode = weightedMode; if (isKeyBroken) { #pragma warning disable CS0618 // https://github.com/unity-cn/CustomAnimationTools/blob/0b3b340c0880452949c34355052d9efb02990d4b/AnimationTools/Assets/Editor/CustomAnimationTools.cs#L164 keyframe.tangentMode |= (1 << 0); #pragma warning restore CS0618 } return(keyframe); }
int weightedModeToInt(WeightedMode mode) { switch (mode) { case (WeightedMode.None): return(0); case (WeightedMode.In): return(1); case (WeightedMode.Out): return(2); case (WeightedMode.Both): return(3); default: return(0); } }
public AnimationWindowKeyframe(AnimationWindowCurve curve, Keyframe key) { this.time = key.time; if (curve.isDiscreteCurve) { this.value = UnityEngine.Animations.DiscreteEvaluationAttributeUtilities.ConvertFloatToDiscreteInt(key.value); } else { this.value = key.value; } this.curve = curve; this.m_InTangent = key.inTangent; this.m_OutTangent = key.outTangent; this.m_InWeight = key.inWeight; this.m_OutWeight = key.outWeight; this.m_WeightedMode = key.weightedMode; this.m_TangentMode = key.tangentModeInternal; this.m_curve = curve; }