@Override
    public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) {
        Spatial spatial = trackSpatial;
        if (spatial == null) {
            spatial = control.getSpatial();
        }

        Vector3f tempV = vars.vect1;
        Vector3f tempS = vars.vect2;
        Quaternion tempQ = vars.quat1;
        Vector3f tempV2 = vars.vect3;
        Vector3f tempS2 = vars.vect4;
        Quaternion tempQ2 = vars.quat2;
        
        int lastFrame = times.length - 1;
        if (time < 0 || lastFrame == 0) {
            if (rotations != null)
                rotations.get(0, tempQ);
            if (translations != null)
                translations.get(0, tempV);
            if (scales != null) {
                scales.get(0, tempS);
            }
        } else if (time >= times[lastFrame]) {
            if (rotations != null)
                rotations.get(lastFrame, tempQ);
            if (translations != null)
                translations.get(lastFrame, tempV);
            if (scales != null) {
                scales.get(lastFrame, tempS);
            }
        } else {
            int startFrame = 0;
            int endFrame = 1;
            // use lastFrame so we never overflow the array
            for (int i = 0; i < lastFrame && times[i] < time; ++i) {
                startFrame = i;
                endFrame = i + 1;
            }

            float blend = (time - times[startFrame]) / (times[endFrame] - times[startFrame]);

            if (rotations != null)
                rotations.get(startFrame, tempQ);
            if (translations != null)
                translations.get(startFrame, tempV);
            if (scales != null) {
                scales.get(startFrame, tempS);
            }
            if (rotations != null)
                rotations.get(endFrame, tempQ2);
            if (translations != null)
                translations.get(endFrame, tempV2);
            if (scales != null) {
                scales.get(endFrame, tempS2);
            }
            tempQ.nlerp(tempQ2, blend);
            tempV.interpolateLocal(tempV2, blend);
            tempS.interpolateLocal(tempS2, blend);
        }

        if (translations != null) {
            spatial.setLocalTranslation(tempV);
        }
        if (rotations != null) {
            spatial.setLocalRotation(tempQ);
        }
        if (scales != null) {
            spatial.setLocalScale(tempS);
        }
    }
Modify the spatial which this track modifies.

@param time
           the current time of the animation
jme3-core/src/main/java/com/jme3/animation/SpatialTrack.java