private bool addKeyOnUserInteraction(float value, float curveValue, AnimationCurve curve, float scrubberPosition, bool inArea = true, float theshold = 0.000001f)
    {
        var  time            = (float)Mathf.RoundToInt(scrubberPosition * DirectorWindow.directorControl.frameRate) / DirectorWindow.directorControl.frameRate;
        bool differenceFound = false;
        var  v = Math.Abs(value - curveValue);

        if (v > theshold && !inArea)
        {
            differenceFound = true;
            if (hasUserInteracted)
            {
                AddOrMoveKey(time, curve, value);
            }
        }
        else if (Event.current.keyCode == KeyCode.K)
        {
            AnimationKeyTime akt = AnimationKeyTime.Time(time, DirectorWindow.directorControl.frameRate);
            for (int j = 0; j < curve.length; j++)
            {
                Keyframe k = curve[j];
                if (akt.ContainsTime(k.time))
                {
                    return(false);
                }
            }
            Keyframe kf = new Keyframe(time, value);
            AnimationCurveHelper.AddKey(curve, kf, akt);
            differenceFound = true;
        }
        else
        {
            RecordNeedKeyframeCurve(time, curve, value);
        }
        return(differenceFound);
    }
Beispiel #2
0
    private bool addKeyOnUserInteraction(float value, float curveValue, AnimationCurve curve, float scrubberPosition)
    {
        bool differenceFound = false;

        if (!(Math.Abs(value - curveValue) < THRESHOLD))
        {
            differenceFound = true;
            if (hasUserInteracted)
            {
                bool doesKeyExist = false;
                for (int j = 0; j < curve.length; j++)
                {
                    Keyframe k = curve[j];
                    if (k.time == scrubberPosition)
                    {
                        Keyframe newKeyframe = new Keyframe(k.time, value, k.inTangent, k.outTangent);
                        newKeyframe.tangentMode = k.tangentMode;
                        AnimationCurveHelper.MoveKey(curve, j, newKeyframe);
                        doesKeyExist = true;
                    }
                }
                if (!doesKeyExist)
                {
                    Keyframe kf = new Keyframe(scrubberPosition, value);
                    AnimationCurveHelper.AddKey(curve, kf);
                }
            }
        }
        return(differenceFound);
    }
    private void AddOrMoveKey(float time, AnimationCurve curve, float value)
    {
        bool             doesKeyExist = false;
        AnimationKeyTime akt          = AnimationKeyTime.Time(time, DirectorWindow.directorControl.frameRate);

        for (int j = 0; j < curve.length; j++)
        {
            Keyframe k = curve[j];
            if (akt.ContainsTime(k.time))
            {
                Keyframe newKeyframe = new Keyframe(k.time, value, k.inTangent, k.outTangent);
                AnimationCurveHelper.MoveKey(curve, j, newKeyframe);
                doesKeyExist = true;
            }
        }
        if (!doesKeyExist)
        {
            Keyframe kf = new Keyframe(time, value);
            AnimationCurveHelper.AddKey(curve, kf, akt);
        }
    }