Example #1
0
        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));
                    }
                }
            }
        }