/** * Этот метод обновляет игровое поле в соответствии с пришедшим новым пулом <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; } } } } }