/**
   * Этот метод обновляет игровое поле в соответствии с пришедшим новым пулом <b>pool</b>
   *
   * @param pool новый пул пришедший от сервера
   */
  public void udateGrid(LetterPool pool) {
    // TODO:(danichbloomTOacbelter): сделать так чтобы размер fieldGrid совпадал с получаемым пулом.
    for (int i = 0; i < fieldGrid.getGrid().size(); i++) {
      LOGGER.info("Point i: " + i);
      Pair<Float, Float> point = fieldGrid.getGrid().get(i);
      if (i < pool.size()) {
        Letter newLetter = pool.get(i); // буква из нового пула
        LetterSprite localLetterSprite =
            point.getPointLetter(); // буква-спрайт из поля, которое на экране

        if (newLetter == null) { // Если в новом пуле на месте i нет буквы...
          LOGGER.debug("newLetter == null");
          if (localLetterSprite != null) { // Если на поле в этом месте есть буква-спрайт...
            LOGGER.debug("localLetterSprite != null");
            Letter localLetter = localLetterSprite.getLetter(); // извлекаем букву из спрайта
            if (localLetter
                != null) { // Если это оказывается не пустое место. (кстати сейчас иначе быть не
              // может, мы удаляем саму букву-спрайт)
              LOGGER.debug("deleteing localLetter: " + localLetter);
              gameScene.detachChild(
                  localLetterSprite); // удаляем букву с поля, потому что пришла буква null
              fieldGrid.deleteLetter(localLetterSprite);
              // TODO(danichbloomTOacbelter): Do I remove the letter correctly? Some times when fake
              // opponent picks a letter,
              // game fails with error java.lang.IndexOutOfBoundsException: Invalid index 34, size
              // is 34.
              // FATAL EXCEPTION: GLThread
            }
          }
        } else { // Если в новом пуле на месте i есть буква...
          LOGGER.debug("newLetter != null");
          if (localLetterSprite != null) { // Если на поле в этом месте есть буква-спрайт...
            LOGGER.debug("localLetterSprite != null");
            Letter localLetter = localLetterSprite.getLetter(); // извлекаем букву из спрайта
            if (localLetter
                != null) { // Если это оказывается не пустое место. (кстати сейчас иначе быть не
              // может, мы удаляем саму букву-спрайт)
              LOGGER.debug("localLetter != null");
              if (newLetter.getId()
                  != localLetter
                      .getId()) { // если новопришедная буква отличается от той что там должна
                // стоять
                // новая буква пришла на место старой, хотя старую никто не брал.
                LOGGER.warn("Substitution of a letter in the grid without picking it!");
              }
              continue;
            }
          } else { // Если на поле в этом месте нет буквы-спрайт...
            LOGGER.debug("putting new letter: " + newLetter);
            final LetterSprite newLetterSprite =
                new LetterSprite(
                    newLetter,
                    point.getKey() - SPRITE_SIZE * SCALE / 2,
                    point.getValue() - SPRITE_SIZE * SCALE / 2,
                    texBase);

            newLetterSprite.setScale(0);
            newLetterSprite.registerEntityModifier(
                new ScaleModifier(1.5f, 0, SCALE, EaseBounceOut.getInstance()));

            gameScene.attachChild(newLetterSprite, 0);
            gameScene.registerTouchArea(newLetterSprite);
            point.setPointLetter(newLetterSprite);
            continue;
          }
        }
      }
    }
  }