/// <summary>
        /// Execute move
        /// </summary>
        /// <remarks>
        /// It is executed when CanMove return true, it set up start and end Field,
        /// if was beat, it call Kill() on beaten pawn.
        /// If wasn't it call BeatOrDieChecker.CheckBeats(List{PawnController}),
        /// If CheckQueen returned true, it also call PawnController.TransformToQueen()
        /// </remarks>
        /// <param name="pawn">Pawn which is moving</param>
        /// <seealso cref="BeatOrDieChecker.CheckBeats(List{PawnController})"/>
        public void ExecuteMove(GameObject pawn)
        {
            var startField = board.fields[posStartX, posStartY];
            var endField   = board.fields[posEndX, posEndY];

            TurnManager.NextTurn();
            if (beat)
            {
                board.fields[beatX, beatY].PawnController.Kill();
                TurnManager.turn = pawnController.playerPosition;
                beat             = false;
            }
            else
            {
                var pawnsToDie = beatOrDieChecker.CheckBeats(players[(int)startField.playerPosition].pawns);
                foreach (var pawnToKill in pawnsToDie)
                {
                    if (pawnToKill != pawnController)
                    {
                        pawnToKill.Kill();
                    }
                }
            }

            startField.Free           = true;
            startField.playerPosition = PlayerPosition.Empty;
            startField.PawnController = null;
            endField.Free             = false;
            endField.playerPosition   = pawnController.playerPosition;
            endField.PawnController   = pawnController;

            if (queen)
            {
                pawnController.TransformToQueen();
            }

            pawn.transform.localPosition = board.CalculatePosition(posEndX, posEndY);
        }