예제 #1
0
 private void FixedUpdate()
 {
     // Обработка передвижения камеры осуществляется, если окно внутриигрового меню неактивно
     if (!MenuPanelLogic.IsMenuActive())
     {
         ProcessCameraMovement();
     }
 }
    private void Update()
    {
        Vector3    mouseWorldCoordinates = GetMouseWorldCoordinates();                // Получаем положение курсора мыши в мировых координатах
        Vector3Int tileCoordinates       = GetTileCoordinates(mouseWorldCoordinates); // Конвертируем позицию этой точки в координаты ячейки, в которой она содержится

        // При наведении курсора на ячейку поля, на нее накладывается выделение в виде шестиугольной рамки.
        if (IsTileExists(tileCoordinates))
        {
            SelectTile(tileCoordinates);
        }

        // По нажатию клавиши Esc открывается внутриигровое меню
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            MenuPanelLogic.IsMenuPanelActive = true;
            MenuPanelLogic.menuBackground.SetActive(true);
        }
        // Все действия игроком на игровом поле обрабатываются, если внутриигровое меню неактивно.
        if (!MenuPanelLogic.IsMenuActive())
        {
            StatusBarLogic.UpdateStatusBar();
            // Обрабатываем нажатия пользователем левой кнопкой мыши по городам, юнитам и ландшафту
            // С помощью левой кнопки мыши пользователь может выбрать юнита для передвижения
            if (Input.GetMouseButtonDown(LEFT_BUTTON_CLICK))
            {
                // Проверяем, кликнул ли пользователь ЛКМ по одному из своих городов:
                ProcessClickOnPlayerCity(tileCoordinates);
                // Проверяем, кликнул ли пользователь ЛКМ по одному из своих юнитов:
                ProcessClickOnPlayerUnit(tileCoordinates);
            }

            // С помощью правой кнопки мыши юнитов можно будет передвигать
            if (Input.GetMouseButtonDown(RIGHT_BUTTON_CLICK))
            {
                if (Player.selectedUnit != null && Player.selectedUnit.IsMovingPossible(tileCoordinates))
                {
                    // Если юнит выбран и движение в выбранную клетку возможно, производим перемещение юнита
                    Player.selectedUnit.Move(tileCoordinates);              // Производим перемещение юнита в указанную клетку
                    UnitInfoPanelLogic.UpdateUnitInfo(Player.selectedUnit); // Обновляем информацию о юните в UnitInfoPanel
                    Player.selectedUnit.HideTilesForMoving();               // После движения убираем сетку возможных тайлов для передвижения
                    Player.selectedUnit.SetTilesForMoving();                // Просчитываем новую сетку возможных передвижений
                    if (Player.selectedUnit.HasAP())
                    {
                        Player.selectedUnit.ShowTilesForMoving();  // Вновь отрисовываем сетку возможных тайлов для перемещения
                    }
                }
            }
        }
    }