node.getLocalRotation().fromAngleNormalAxis(-actAngle, upAngle);
node.getLocalRotation().fromAngleNormalAxis(-faceAngle, upAngle);
    public void update(float time) {        prevLoc.set(node.getLocalTranslation());        loc.set(prevLoc);        super.update(time);        loc.subtractLocal(node.getLocalTranslation());        if (!loc.equals(Vector3f.ZERO)) {            float distance = loc.length();            loc.normalizeLocal();            float actAngle;            if (loc.x < 0)                actAngle = FastMath.atan(loc.z / loc.x);            else if (loc.x > 0)                actAngle = FastMath.PI + FastMath.atan(loc.z / loc.x);            else if (loc.z > 0)                actAngle = FastMath.PI;            else                actAngle = 0;            if (doGradualRotation) {                float oldAct = actAngle;                actAngle -= faceAngle;                // redo: THE FOLLOWING IS SUPPOSED TO CORRECT THE RAPID CHANGE                // FROM ONE DIR TO ANOTHER... IT DOESN'T.                if (actAngle == FastMath.PI) {                    actAngle -= FastMath.PI / 8f;                    oldAct -= FastMath.PI / 8f;                }                actAngle = FastMath.normalizeAngle(actAngle);                // update rotation                if (actAngle > 0) {                    faceAngle += time * turnSpeed;                    if (faceAngle > oldAct)                        faceAngle = oldAct;                } else if (actAngle < 0) {                    faceAngle -= time * turnSpeed;                    if (faceAngle < oldAct)                        faceAngle = oldAct;                }            }            node.getLocalRotation().fromAngleNormalAxis(-actAngle, upAngle);            node.getLocalTranslation().set(prevLoc);            node.getLocalRotation().getRotationColumn(0, _calc).multLocal(                    distance);            node.getLocalTranslation().addLocal(_calc);        }        chaseCam.update(time);    }