void Rotate()
    {
        Quaternion targetRot = Quaternion.Euler(targetRotation.eulerAngles.x, targetRotation.eulerAngles.y, 0);

        targetRot *= Quaternion.Euler(-rotation.y * rotationSpeed, 0, 0);
        targetRot *= Quaternion.Euler(0, rotation.x * rotationSpeed, 0);
        targetRot *= Quaternion.Euler(0, 0, rotation.x * rotationSpeed * turnTilt);

        //targetRot = ClampRotationAroundXAxis(targetRot, 80);

        targetRot = ClampDistance(targetRot, character.rotation, new Vector3(-80, -160, -360), new Vector3(80, 160, 360));

        targetRot = currentStance.OnRotate(targetRot);

        targetRotation = Quaternion.Euler(targetRot.eulerAngles.x, targetRot.eulerAngles.y, targetRot.eulerAngles.z);
        cam.rotation   = Quaternion.Lerp(cam.rotation, targetRotation, Time.fixedDeltaTime * rotationSmoothness);
    }