void HandleCameraMovement()
    {
        Vector3 cameraAdjustmentVector;

        // On PC, the cursor point is the mouse position
        var cursorScreenPosition = MyInput.GetMousePosition();

        var halfWidth  = Screen.width / 2.0f;
        var halfHeight = Screen.height / 2.0f;
        var maxHalf    = Mathf.Max(halfWidth, halfHeight);

        // Acquire the relative screen position
        var posRel = cursorScreenPosition - new Vector3(halfWidth, halfHeight, cursorScreenPosition.z);

        posRel.x /= maxHalf;
        posRel.y /= maxHalf;

        cameraAdjustmentVector   = posRel.x * m_screenMovementRight + posRel.y * m_screenMovementForward;
        cameraAdjustmentVector.y = 0.0f;

        // Set the target position of the camera to point at the focus point
        var cameraTargetPosition = transform.position + m_cameraOffsetToPlayer + cameraAdjustmentVector * m_cameraPreview;

        // Apply some smoothing to the camera movement
        m_cameraTransform.position = Vector3.SmoothDamp(
            m_cameraTransform.position,
            cameraTargetPosition,
            ref m_cameraVelocity,
            m_cameraSmoothing);
    }
    void HandleRigidbodyRotation()
    {
        var cursorScreenPosition = MyInput.GetMousePosition();
        var cursorWorldPosition  = Utils.ScreenPointToWorldPointOnPlane(cursorScreenPosition, m_playerMovementPlane, Camera.main);

        // The facing direction is the direction from the character to the cursor world position
        var facingDirection = (cursorWorldPosition - transform.position);

        facingDirection.y = 0;

        // Make the character rotate towards the target rotation
        var newRotatation = Quaternion.LookRotation(facingDirection);

        transform.rotation = newRotatation;
    }