/// <summary> /// Вызывается при нажатии пользователем на кнопку окончания хода endTurnButton. Обрабатывает процесс окончания хода /// </summary> public void OnEndTurnButtonClick() { // Наращивается счетчик текущего хода IncreaseCurrentTurnCounter(); Player.UpdatePlayerData(); // После окончания хода у всех юнитов восстанавливаются очки действий(action points) RestorePlayerUnitsAP(Player.listOfUnits); // Если какой-то юнит оставлся активным на момент окончания хода, обновим о нем информацию. if (UnitInfoPanelLogic.unitInfoPanel.activeSelf) { UnitInfoPanelLogic.UpdateUnitInfo(Player.selectedUnit); Player.selectedUnit.SetTilesForMoving(); Player.selectedUnit.ShowTilesForMoving(); } StatusBarLogic.UpdateStatusBar(); foreach (City city in Player.listOfCities) { city.GenerateProduction(); } if (Player.selectedCity != null) { CityInfoPanelLogic.UpdateCityInfo(Player.selectedCity); } }
/// <summary> /// Отмечает юнит выбранным. /// </summary> /// <param name="unit">Выбранный юнит.</param> public static void SelectUnit(Unit unit) { // Проверяем, не выбирается ли данный юнит подряд дважды if (selectedUnit == unit) { // В таком случае, снимаем выделение с юнита UnselectUnit(); } else { if (selectedUnit != null) { // Если перед этим выбирался другой юнит, снимаем с него выделение. UnselectUnit(); } // Обозначаем данный юнит как выбранный selectedUnit = unit; //ChangeUnitTile(selectedUnit, GameData.selectedUnitTile); // Выводим информацию о выбранном юните в панель информации о юните UnitInfoPanelLogic.UpdateUnitInfo(selectedUnit); // Если у юнита есть неистраченные очки действия, отрисовываем сетку перемещений if (selectedUnit.HasAP()) { selectedUnit.SetTilesForMoving(); selectedUnit.ShowTilesForMoving(); } } }
/// <summary> /// Снимает выделение с выбранного юнита. /// </summary> public static void UnselectUnit() { selectedUnit.HideTilesForMoving(); // Снимаем с юнита выделение //ChangeUnitTile(selectedUnit, GameData.initialUnitTile); // Скрываем панель информации о юните UnitInfoPanelLogic.Close(); selectedUnit = null; }
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(); // Вновь отрисовываем сетку возможных тайлов для перемещения } } } } }