private void addFace(final float pX, final float pY) {
    final Scene scene = mEngine.getScene();

    mFaceCount++;

    final AnimatedSprite face;
    final Body body;

    final FixtureDef objectFixtureDef = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f);

    if (mFaceCount % 2 == 0) {
      face = new AnimatedSprite(pX, pY, mBoxFaceTextureRegion);
      body =
          PhysicsFactory.createBoxBody(mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
    } else {
      face = new AnimatedSprite(pX, pY, mCircleFaceTextureRegion);
      body =
          PhysicsFactory.createCircleBody(
              mPhysicsWorld, face, BodyType.DynamicBody, objectFixtureDef);
    }

    face.animate(200, true);

    scene.registerTouchArea(face);
    scene.getLastChild().attachChild(face);
    mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face, body, true, true));
  }
 public void addFace(final int pID, final float pX, final float pY) {
   final Scene scene = this.mEngine.getScene();
   /* Create the face and add it to the scene. */
   final Sprite face = new Sprite(0, 0, this.mFaceTextureRegion);
   face.setPosition(pX - face.getWidth() * 0.5f, pY - face.getHeight() * 0.5f);
   face.setUserData(pID);
   this.mFaces.put(pID, face);
   scene.registerTouchArea(face);
   scene.attachChild(face);
 }
Example #3
0
  @Override
  public Scene onLoadScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());

    scene = new Scene();

    //        GameManager = new SquareManager(CAMERA_WIDTH/2-CAMERA_HEIGHT/2, 0,
    //        		CAMERA_HEIGHT, CAMERA_HEIGHT, mParallaxLayerBack);
    //
    GameManager =
        new SquareManager(
            CAMERA_WIDTH - CAMERA_HEIGHT, 0, CAMERA_HEIGHT, CAMERA_HEIGHT, mParallaxLayerBack);
    // Sprite1.registerEntityModifier(new MoveModifier(30, 0, CAMERA_WIDTH - Sprite1.getWidth(), 0,
    // CAMERA_HEIGHT - Sprite1.getHeight()));

    scene.registerTouchArea(GameManager);

    GameManager.setZIndex(0);
    scene.attachChild(GameManager);
    scene.sortChildren();

    scene.registerUpdateHandler(
        new TimerHandler(
            1f / 2f,
            true,
            new ITimerCallback() {

              @Override
              public void onTimePassed(TimerHandler arg0) {

                if (GameManager.CanClean && GameManager.CleanListCounter == 0) {
                  GameManager.CanMove = false;
                  GameManager.MoveDetected = true;

                  GameManager.CanClean = false;
                  GameManager.CollectToRemove();
                  GameManager.CalculateScore();
                  GameManager.CleanGame();

                  GameManager.ListAddedOnTop.clear();

                  GameManager.CanMove = true;
                  GameManager.MoveDetected = false;

                  GameManager.CanClean = GameManager.FindCoinsidence();
                }
              }
            }));

    return scene;
  }
  @Override
  public Scene onLoadScene() {
    final Scene scene = new Scene(1);
    scene.setBackground(new ColorBackground(0.1f, 0.6f, 0.9f));
    scene.setOnSceneTouchListener(
        new IOnSceneTouchListener() {
          @Override
          public boolean onSceneTouchEvent(final Scene pScene, final TouchEvent pSceneTouchEvent) {
            switch (pSceneTouchEvent.getAction()) {
              case TouchEvent.ACTION_DOWN:
                Toast.makeText(AndEngineTouchExample.this, "Scene touch DOWN", Toast.LENGTH_SHORT)
                    .show();
                break;
              case TouchEvent.ACTION_UP:
                Toast.makeText(AndEngineTouchExample.this, "Scene touch UP", Toast.LENGTH_SHORT)
                    .show();
                break;
            }
            return true;
          }
        });

    mIcon =
        new Sprite(100, 100, this.mIconTextureRegion) {
          @Override
          public boolean onAreaTouched(
              final TouchEvent pAreaTouchEvent,
              final float pTouchAreaLocalX,
              final float pTouchAreaLocalY) {
            switch (pAreaTouchEvent.getAction()) {
              case TouchEvent.ACTION_DOWN:
                Toast.makeText(AndEngineTouchExample.this, "Sprite touch DOWN", Toast.LENGTH_SHORT)
                    .show();
                break;
              case TouchEvent.ACTION_UP:
                Toast.makeText(AndEngineTouchExample.this, "Sprite touch UP", Toast.LENGTH_SHORT)
                    .show();
                break;
            }
            return true;
          }
        };

    scene.getLastChild().attachChild(mIcon);
    scene.registerTouchArea(mIcon);
    scene.setTouchAreaBindingEnabled(true);

    return scene;
  }
  /**
   * Этот метод обновляет игровое поле в соответствии с пришедшим новым пулом <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;
          }
        }
      }
    }
  }
  @Override
  public Scene onLoadScene() {
    this.mEngine.registerUpdateHandler(new FPSLogger());

    client = new WBClient(host, port, this);

    if (client.ConnectToServer()) {
      client.sendRegitsteringRequestForPlayerName("acbelter");
    } else {
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder
          .setMessage("Can't connect to server")
          .setCancelable(false)
          .setPositiveButton(
              "Exit",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                  WordsBattleActivity.this.finish();
                }
              })
          .setNegativeButton(
              "Close",
              new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                  dialog.cancel();
                }
              });
      AlertDialog alert = builder.create();
      alert.show();
    }

    // TODO(acbelter): Был глюк,что буквы сами появляются на сетке.
    // TODO(acbelter): После разблокировки экрана иногда не работает тачскрин и сцена
    // перезагружается.
    // TODO(acbelter): Причем не работают нажатия только на кнопки в сетке.
    // TODO(acbelter): Иногда неправильное отображение слов.
    // TODO(acbelter): Новые буквы не привязываются к сцене.
    fieldGrid = new CoordinateGrid(CAMERA_WIDTH, CAMERA_HEIGHT, SPRITE_SIZE, SCALE);

    SceneManager.init(this);
    MenuScene.load();
    // TODO(acbelter):Попросить пользователя ввести имя [userName].
    // затем вызвать client.sendRegitsteringRequestForPlayerName(userName);
    // Далее все дело проиходит в вызове реализации IWBClientDelegate в методе
    // UserNameSuccessfullyRegistered(), либо в любое время после.
    // тоесть, когда игрок зарегистрировался, дальше он уже может запрашивать игру. Можешь пока это
    // делать hard кодом, а можешь выдавать окошки,
    // которые будут спрашивать у пользователя имя оппонента.

    // gameScene.setBackground(new ColorBackground(10f/255f, 134f/255f, 7f/255f));
    gameScene = new Scene();
    gameScene.setBackground(new SpriteBackground(new Sprite(0, 0, texBase.getBackgroundTexture())));

    float fieldWidth = CAMERA_WIDTH - leftOffset - rightOffset;
    int wordMaxLength = (int) (fieldWidth / (SPRITE_SIZE * SCALE));

    // Позиции, от которых рисуются слова.
    float wordX = leftOffset + (fieldWidth - wordMaxLength * SPRITE_SIZE * SCALE) / 2;

    float opponentWordY = (upOffset - SPRITE_SIZE * SCALE) / 2;
    float playerWordY =
        CAMERA_HEIGHT - SPRITE_SIZE * SCALE - (downOffset - SPRITE_SIZE * SCALE) / 2;

    final WordSprite opponentWord =
        new WordSprite(wordMaxLength, wordX, opponentWordY, texBase.getPlaceTexture(), false);
    final WordSprite playerWord =
        new WordSprite(wordMaxLength, wordX, playerWordY, texBase.getPlaceTexture(), true);

    myWord = playerWord;

    for (Sprite spr : opponentWord.cells) {
      gameScene.attachChild(spr, 0);
      gameScene.registerTouchArea(spr);
    }

    for (Sprite spr : playerWord.cells) {
      gameScene.attachChild(spr, 0);
      gameScene.registerTouchArea(spr);
    }

    // TODO(acbelter): Разобраться с добавлением новых букв.
    Sprite menuButton =
        new Sprite(
            CAMERA_WIDTH - 2 * SPRITE_SIZE + (SPRITE_SIZE - SPRITE_SIZE * SCALE),
            -(SPRITE_SIZE - SPRITE_SIZE * SCALE) * 0.5f,
            texBase.getMenuButtonTexture()) {
          @Override
          public boolean onAreaTouched(
              final TouchEvent pSceneTouchEvent,
              final float pTouchAreaLocalX,
              final float pTouchAreaLocalY) {
            // TODO(acbelter): Реализовать этот метод.
            // Пока тут будет тест сервера.
            // FieldFiller.fill(gameScene, conn);
            SceneManager.setScene(MenuScene.run());
            return false;
          }
        };

    menuButton.setScale(0);
    menuButton.registerEntityModifier(new ScaleModifier(3, 0, SCALE, EaseBounceOut.getInstance()));

    // fillgrid

    gameScene.attachChild(menuButton);
    gameScene.registerTouchArea(menuButton);

    Sprite submitButton =
        new Sprite(
            CAMERA_WIDTH - 2 * SPRITE_SIZE + (SPRITE_SIZE - SPRITE_SIZE * SCALE),
            CAMERA_HEIGHT - SPRITE_SIZE * SCALE - (SPRITE_SIZE - SPRITE_SIZE * SCALE) * 0.5f,
            texBase.getSubmitButtonTexture()) {
          @Override
          public boolean onAreaTouched(
              final TouchEvent pSceneTouchEvent,
              final float pTouchAreaLocalX,
              final float pTouchAreaLocalY) {
            // String str = conn.checkWord(playerWord.getWord());
            String str = playerWord.getWord().toUpperCase();

            Toast toast = Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();

            return false;
          }
        };

    submitButton.setScale(0);
    submitButton.registerEntityModifier(
        new ScaleModifier(3, 0, SCALE, EaseBounceOut.getInstance()));

    gameScene.attachChild(submitButton);
    gameScene.registerTouchArea(submitButton);

    // TODO: При нажатии на меню нажимается game scene.
    gameScene.setTouchAreaBindingEnabled(false);
    // return gameScene;
    return MenuScene.run();
  }