private void MoveCamera() { var angleRetrieved = false; float horizontalCameraAngle = 0; double horizontalCameraAngleUpDown = 0; double horizontalCameraAngleLeftRight = 0; if (_isCameraMovingUp) { if (!_isCameraMovingBack) { horizontalCameraAngle = _gameValueService.GetHorizontalCameraAngle(); angleRetrieved = true; horizontalCameraAngleUpDown = horizontalCameraAngle + Math.PI; } } else if (_isCameraMovingBack) { horizontalCameraAngle = _gameValueService.GetHorizontalCameraAngle(); angleRetrieved = true; horizontalCameraAngleUpDown = horizontalCameraAngle; } if (_isCameraMovingRight) { if (!_isCameraMovingLeft) { if (!angleRetrieved) { horizontalCameraAngle = _gameValueService.GetHorizontalCameraAngle(); } horizontalCameraAngleLeftRight = horizontalCameraAngle + 0.5 * Math.PI; } } else if (_isCameraMovingLeft) { if (!angleRetrieved) { horizontalCameraAngle = _gameValueService.GetHorizontalCameraAngle(); } horizontalCameraAngleLeftRight = horizontalCameraAngle + 1.5 * Math.PI; } float xOffset = 0, yOffset = 0; if (horizontalCameraAngleUpDown != 0) { xOffset += (float)Math.Cos(horizontalCameraAngleUpDown); yOffset += (float)Math.Sin(horizontalCameraAngleUpDown); } if (horizontalCameraAngleLeftRight != 0) { xOffset += (float)Math.Cos(horizontalCameraAngleLeftRight); yOffset += (float)Math.Sin(horizontalCameraAngleLeftRight); } ChangeCameraPosition(xOffset * CameraMovementOffset, yOffset * CameraMovementOffset); }