private void HandleMouseAndKeyboardInput() { float moveAmount = (_moveSettings.MoveSpeed + _currentAcceleration) * Time.deltaTime; Vector3 moveVector = Vector3.zero; _moveDirFlags[(int)MoveDirection.Forward] = Hotkeys.MoveForward.IsActive(); _moveDirFlags[(int)MoveDirection.Backwards] = !_moveDirFlags[(int)MoveDirection.Forward] && Hotkeys.MoveBack.IsActive(); _moveDirFlags[(int)MoveDirection.Left] = Hotkeys.StrafeLeft.IsActive(); _moveDirFlags[(int)MoveDirection.Right] = !_moveDirFlags[(int)MoveDirection.Left] && Hotkeys.StrafeRight.IsActive(); _moveDirFlags[(int)MoveDirection.Up] = Hotkeys.MoveUp.IsActive(); _moveDirFlags[(int)MoveDirection.Down] = !_moveDirFlags[(int)MoveDirection.Up] && Hotkeys.MoveDown.IsActive(); bool wasZoomed = false; if (IsMovingForward) { Zoom(moveAmount); wasZoomed = true; } else if (IsMovingBackwards) { Zoom(-moveAmount); wasZoomed = true; } if (IsMovingLeft) { moveVector -= _targetTransform.right * moveAmount; } else if (IsMovingRight) { moveVector += _targetTransform.right * moveAmount; } if (IsMovingUp) { moveVector += _targetTransform.up * moveAmount; } else if (IsMovingDown) { moveVector -= _targetTransform.up * moveAmount; } bool needsToMove = moveVector.sqrMagnitude != 0.0f; if (needsToMove) { _targetTransform.position += moveVector; } if (needsToMove || wasZoomed) { float accelAdd = MoveSettings.AccelerationRate * Mathf.Abs(_targetCamera.EstimateZoomFactor(_lastFocusPoint)) * Time.deltaTime; _currentAcceleration += accelAdd; } else { _currentAcceleration = 0.0f; } // Get the mouse axes values. We need these for panning and rotation. float mouseX = RTInput.MouseAxisX(); float mouseY = RTInput.MouseAxisY(); // Only proceed if at least one mouse axis value is != 0 if (mouseX != 0.0f || mouseY != 0.0f) { if (_panSettings.IsPanningEnabled && Hotkeys.Pan.IsActive()) { if (_panSettings.PanMode == CameraPanMode.Standard) { Pan(CalculatePanAmount(mouseX, mouseY)); } else { StopCamTransform(); StartCoroutine(_genricCamTransformCrtn = DoSmoothPan(mouseX, mouseY)); } } else { if ((_orbitSettings.IsOrbitEnabled && Hotkeys.Orbit.IsActive())) { if (_orbitSettings.OrbitMode == CameraOrbitMode.Standard) { Vector2 rotation = CalculateOrbitRotation(mouseX, mouseY); Orbit(rotation.x, rotation.y); } else { StopCamTransform(); StartCoroutine(_genricCamTransformCrtn = DoSmoothOrbit(mouseX, mouseY)); } } else if (_lookAroundSettings.IsLookAroundEnabled && Hotkeys.LookAround.IsActive()) { if (_lookAroundSettings.LookAroundMode == CameraLookAroundMode.Standard) { Vector2 rotation = CalculateLookAroundRotation(mouseX, mouseY); LookAround(rotation.x, rotation.y); } else { StopCamTransform(); StartCoroutine(_genricCamTransformCrtn = DoSmoothLookAround(mouseX, mouseY)); } } } } if (CanUseMouseScrollWheel()) { float mouseScroll = RTInput.MouseScroll(); if (mouseScroll != 0.0f && _zoomSettings.IsZoomEnabled) { if (_zoomSettings.ZoomMode == CameraZoomMode.Standard) { Zoom(CalculateScrollZoomAmount(mouseScroll)); } else { StopCamTransform(); StartCoroutine(_genricCamTransformCrtn = DoSmoothZoom(mouseScroll)); } } } }