public void TryMove(int x1, int y1, int x2, int y2) { var startDrag = new Vector2(x1, y1); var endDrag = new Vector2(x2, y2); var p = _checkers.GetPiece(x1, y1); // Out of bounds if (x2 < 0 || x2 >= 8 || y2 < 0 || y2 >= 8) { //Если мы нажали вне границы то переносим шашку на стартувую позицию if (p != null) { MovePiece(pieces[p], x1, y1); } _isSelected = false; return; } if (p != null) { // If it has not moved (если шашку не перемещали) if (endDrag == startDrag || !_checkers.IsValidMove(p, x1, y1, x2, y2)) { MovePiece(pieces[p], x1, y1); _isSelected = false; return; } // Did we kill anything // If this is a jump if (Mathf.Abs(x2 - x1) == 2) { // Для получения средней шашки между двумя var middle = _checkers.GetPiece((x1 + x2) / 2, (y1 + y2) / 2); if (middle != null) { // Удаляем среднюю шашку между двумя _checkers.SetPiece(null, (x1 + x2) / 2, (y1 + y2) / 2); DestroyImmediate(pieces[middle].gameObject); _checkers.HasKilled = true; } } // If we did not kill anything and just moved // when we were supposed to do a forced move var forcedPieces = _checkers.ScanForForcedMoves(); if (forcedPieces.Count != 0 && _checkers.HasKilled == false) { MovePiece(pieces[p], x1, y1); _isSelected = false; } else { _checkers.MovePiece((x1, y1), (x2, y2)); MovePiece(pieces[p], x2, y2); _isSelected = false; _checkers.EndTurn(p, x1, y1, x2, y2); } } }