Пример #1
0
        protected override void DetectMouse()
        {
            if (UIShouldBlockInput && MMGUI.PointOrTouchBlockedByUI())
            {
                return;
            }

            if (Input.GetMouseButtonDown(MouseButtonIndex))
            {
                if (_isDoubleClick)
                {
                    _characterRun.RunStart();
                    StopCoroutine(_doubleClick);
                    _isDoubleClick = false;
                }
                else
                {
                    _characterRun.RunStop();
                    _doubleClick = StartCoroutine(DoubleClick());
                }
            }

            if (!Input.GetMouseButtonDown(MouseButtonIndex) && !Input.GetMouseButton(MouseButtonIndex))
            {
                return;
            }
            var ray = _mainCamera.ScreenPointToRay(Input.mousePosition);

#if UNITY_EDITOR
            Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);
#endif
            if (Physics.Raycast(ray, out var hitInfo, Mathf.Infinity, TargetLayerMask))
            {
                _brain.Target = hitInfo.transform;
                _characterPathfinder3D.SetNewDestination(_brain.Target);
                return;
            }
            _brain.Target = null;
            if (_brain.CurrentState != _initialState)
            {
                _brain.TransitionToState(_initialState.StateName);
            }
            if (!_playerPlane.Raycast(ray, out var distance))
            {
                return;
            }
            Destination.transform.position = ray.GetPoint(distance);
            _characterPathfinder3D.SetNewDestination(Destination.transform);
            if (Input.GetMouseButtonDown(MouseButtonIndex))
            {
                OnClickFeedbacks?.PlayFeedbacks(Destination.transform.position);
            }
        }