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;
 }
Ejemplo n.º 3
0
 public CurveKeyframe(float time, float value)
 {
     this.time    = time;
     this.value   = value;
     inTangent    = 0;
     outTangent   = 0;
     inWeight     = 0;
     outWeight    = 0;
     WeightedMode = WeightedMode.None;
 }
Ejemplo n.º 4
0
 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;
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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;
        }