private void ProcessMovement()
        {
            var destination = MouseHelper.GetPositionUnderMouse();

            var movementEvent = new MovementEvent(destination);

            movementEventRepository.SetValue(movementEvent);

            SetDirection();
        }
        private void ProcessPickup()
        {
            var marker      = MouseHelper.GetComponentOnGameObjectUnderMouse <PickupableItemMarker>();
            var destination = MouseHelper.GetPositionUnderMouse();

            pickupEventRepository.SetValue(new PickupEvent(marker));

            if (PositionHelper.GetDistance(player.position, destination) > config.InteractCriticalDistance)
            {
                ProcessMovement();
            }
        }
        private void ProcessSceneTransition()
        {
            var marker      = MouseHelper.GetComponentOnGameObjectUnderMouse <SceneTransferMarker>();
            var destination = MouseHelper.GetPositionUnderMouse();

            interactWithSceneTransferEventRepository.SetValue(new InteractWithSceneTransferEvent(marker));

            if (PositionHelper.GetDistance(player.position, destination) > config.InteractCriticalDistance)
            {
                ProcessMovement();
            }
        }
        public override void Update()
        {
            if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.PickupableItem) ||
                MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.Npc) ||
                MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.SceneTransfer) ||
                MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.DialogueButton) ||
                MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.FinishDialogueButton))
            {
                cursor = Resources.Load <Texture2D>("pointer");
            }
            else
            {
                cursor = Resources.Load <Texture2D>("normal");
            }

            Cursor.SetCursor(cursor, new Vector2(0, 0), CursorMode.Auto);

            if (Input.GetMouseButtonDown(0))
            {
                if (Input.mousePosition != previousPointClicked && previousClickDateTime - DateTime.UtcNow < TimeSpan.FromMilliseconds(200)) // у нас происходит двойной клик. Для кнопок это критично
                {                                                                                                                            // Поэтому я сохраняю предыдущую точку нажатия и сравниваю её с текущей
                    previousClickDateTime = DateTime.UtcNow;
                    previousPointClicked  = Input.mousePosition;
                    movementEventRepository.RemoveValue();
                    pickupEventRepository.RemoveValue();
                    interactWithNpcEventRepository.RemoveValue();
                    newTextEventRepository.RemoveValue();

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.Ground))
                    {
                        ProcessMovement();
                    }

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.PickupableItem))
                    {
                        ProcessPickup();
                    }

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.Npc))
                    {
                        ProcessNpc();
                    }

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.DialogueButton))
                    {
                        ProcessButton();
                    }

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.FinishDialogueButton))
                    {
                        ProcessFinishDialogue();
                    }

                    if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.SceneTransfer))
                    {
                        ProcessSceneTransition();
                    }
                }
            }

            if (Input.GetMouseButtonDown(1))
            {
                if (MouseHelper.IsMouseAboveObjectWithTag(Constants.Tags.PickupableItem))
                {
                    var marker = MouseHelper.GetComponentOnGameObjectUnderMouse <PickupableItemMarker>();
                    startDialogueEventRepository.SetValue(new StartDialogueEvent(marker.Id, "You"));
                }
            }
        }
        private void ProcessButton()
        {
            var button = MouseHelper.GetComponentOnGameObjectUnderMouse <NextReplicaDialogueButtonMarker>();

            newTextEventRepository.SetValue(new NewTextEvent(button.Node));
        }