Ejemplo n.º 1
0
    // that means the invoker must have info on the animObj you're setting they keyframe 2

    // in the keyframes, there are several things going on

    // we need to invoke this function each time that
    // a keyframe is generated from these times

    // so that we can place keyframes, and reference the
    // beizer curve key frame structues // control points

    // these are all position curves

    // 1st -> during initialization of the clip / track, generate a Beizer Path (quadratic)
    // 2nd -> during intialization of the clip / track, generate a Linear Path (linear)

    // keyframe generator

    // 1st --> create a keyframe from the curve
    // 2nd --> keyframe should have a reference to the next control point
    // 3rd --> invoke generate points from t0 to t1
    // 4th --> add those points on the path
    // 5th --> if a beizer control point is generated between those keyframes
    // 6th --> change the intermediate keyframes between k1 and k2.

    // [k1] ----- [k2] ---- [k3] ----- [k4] ----- [k5]

    // this checks to see if there are control points in between
    // this position

    //  but when you put a intermediate keyframe, that keyframe has  no information
    //  on whether or not that there's keyframes on the left or the right of this keyframe

    //  do this step before adding into path

    //  the way to check is to return the keys for all 3 position curves
    //  find the index of this new keyframe

    //  check to see if there are indices
    //  if there is on the left, like a linked list, change the next control point inside the video keyframe on the left
    //  if there is on the right, like a linked list, change the next control point inside the video keyframe on the right

    //  one strategy is to have a reference to the next position keyframe in each video keyframe
    //  by doing this, you can invoke the generatePoints method to

    //  we need to distingiush between intermediate keyframes and control points
    //  but the animation curves won't give us this information

    //  one thing you could do is have a videokeyframe that flags between intermediate point and control point
    //

    // question --> should we use a videoKeyframe array and change each time? []
    // or should we use a list<>
    public void SetOrUpdateKeyframes()
    {
        // first, set the position curve pos at the current timeline marker
        onObjectMoved(AnimationCurveToUpdate.x);
        onObjectMoved(AnimationCurveToUpdate.y);
        onObjectMoved(AnimationCurveToUpdate.z);

        // second, set the rotation curve at the current timeline marker
        onObjectedRotated(AnimationCurveToUpdate.rotationX);
        onObjectedRotated(AnimationCurveToUpdate.rotationY);
        onObjectedRotated(AnimationCurveToUpdate.rotationZ);

        // create a video keyframe at this time
        VideoKeyFrame vk;

        animTrack.AddKeyFrameUI(timeline.timelineTicker.currentTime, out vk);
        int vkIndex = animTrack.videoKeyFrames.IndexOf(vk);

        int vkLeft  = vkIndex - 1;
        int vkRight = vkIndex + 1;

        // add control point w/ this video keyframe -> beizer control points and intermediate points are in charge of the beizer animation curves
        beizerPathGroup.beizerPathData.addControlPoint(vk);

        // generate intermediate points, depending on where the control point was created
        if (vkLeft >= 0)
        {
            beizerPathGroup.beizerPathData.generateIntermediatePoints(vkLeft, vkIndex);

            // set the control point defintions here
            // vk.controlPoint.leftControlPoint = animTrack.videoKeyFrames[vkLeft].controlPoint;
        }

        if (vkRight < animTrack.videoKeyFrames.Count)
        {
            beizerPathGroup.beizerPathData.generateIntermediatePoints(vkIndex, vkRight);

            // vk.controlPoint.rightControlPoint = animTrack.videoKeyFrames[vkRight].controlPoint;
        }
    }