protected void createInvSprite(ITiledTextureRegion sheet) {

    final float w = this.getWidth();
    final float h = this.getHeight();
    final float sw = sheet.getWidth();
    final float sh = sheet.getHeight();

    this.sInvSprite =
        new TiledSprite(
            (w - sw) / 2f,
            (h - sh) / 2f,
            sheet,
            EnvironmentVars.MAIN_CONTEXT.getVertexBufferObjectManager());
    this.sInvSprite.setRotationCenter(sw / 2f, sh / 2f);
    this.sInvSprite.setRotation(Inventory.INVENTORY_ICON_ROTATION);
  }
示例#2
0
    /*
     * Attach the LevelTile's text to itself based on whether it's locked or
     * not. If not, then the level number will be displayed on the level
     * tile.
     */
    public void attachStar() {

      /* Determine the tile's string based on whether it's locked or not*/
      if (this.mIsLocked) {
        mStar.setCurrentTileIndex(0);

      } else {
        mStar.setCurrentTileIndex(mNumStars);
      }

      /* Setup the text position to be placed in the center-bottom of the tile */
      final float starPositionX = LevelSelector.this.TILE_DIMENSION / 6 + 5;
      final float starPositionY = LevelSelector.this.TILE_DIMENSION - 15;

      /* Attach the mStar to the LevelTile */
      StarSprite =
          new Sprite(0, 0, mStar, LevelSelector.this.mEngine.getVertexBufferObjectManager());
      this.attachChild(StarSprite);
      StarSprite.setPosition(starPositionX, starPositionY + 15);
    }
    public CubicEntity(
        float pX,
        float pY,
        int pCubic,
        final ITiledTextureRegion pCubicStart,
        final ITiledTextureRegion pCubicTurn,
        final ITiledTextureRegion pCubicStop,
        final ITiledTextureRegion pCubicTurnOption[],
        ITextureRegion pTextureRegion) {
      super(pX, pY, pTextureRegion, mVertexBufferObjectManager);
      setAlpha(0.0f);
      TYPE = pCubic;
      mCubicStartAniSprite = new AnimatedSprite(0, 0, pCubicStart, mVertexBufferObjectManager);
      this.attachChild(mCubicStartAniSprite);
      mCubicStartAniSprite.setVisible(false);

      float turnX = getWidth() - pCubicTurn.getWidth();
      float turnY = getHeight() - pCubicTurn.getHeight();
      mCubicTurnAniSprite =
          new AnimatedSprite(turnX - 15, turnY - 15, pCubicTurn, mVertexBufferObjectManager);
      this.attachChild(mCubicTurnAniSprite);
      mCubicTurnAniSprite.setVisible(false);

      for (int i = 0; i < mCubicTurnOptionAniSprite.length; i++) {
        float turnOpX = getWidth() - pCubicTurnOption[i].getWidth();
        float turnOpY = getHeight() - pCubicTurnOption[i].getHeight();
        mCubicTurnOptionAniSprite[i] =
            new AnimatedSprite(turnOpX, turnOpY, pCubicTurnOption[i], mVertexBufferObjectManager);
        this.attachChild(mCubicTurnOptionAniSprite[i]);
        mCubicTurnOptionAniSprite[i].setVisible(false);
      }

      float stopX = getWidth() - pCubicTurn.getWidth();
      float stopY = getHeight() - pCubicTurn.getHeight();
      mCubicStopAniSprite =
          new AnimatedSprite(stopX - 15, stopY - 15, pCubicStop, mVertexBufferObjectManager);
      this.attachChild(mCubicStopAniSprite);
      mCubicStopAniSprite.setVisible(false);

      float scrollX = turnX + pCubicTurn.getWidth() / 2 - mScrollLeftTextureRegion.getWidth();
      float scrollY = turnY + pCubicTurn.getHeight() - mScrollLeftTextureRegion.getHeight();
      mScrollLeftSprite =
          new Sprite(scrollX, scrollY, mScrollLeftTextureRegion, mVertexBufferObjectManager);
      this.attachChild(mScrollLeftSprite);
      mScrollLeftSprite.setVisible(false);

      mScrollLeftSprite.registerEntityModifier(
          new LoopEntityModifier(
              new SequenceEntityModifier(
                  new AlphaModifier(0.5f, 0.2f, 1.0f), new AlphaModifier(0.5f, 1.0f, 0.2f))));
    }
  @Override
  public void onUpdateTextureCoordinates(final TiledSprite pTiledSprite) {
    final float[] bufferData = this.mBufferData;

    final ITiledTextureRegion tiledTextureRegion = pTiledSprite.getTiledTextureRegion();

    final int tileCount = pTiledSprite.getTileCount();
    int bufferDataOffset = 0;
    for (int i = 0; i < tileCount; i++) {
      final ITextureRegion textureRegion = tiledTextureRegion.getTextureRegion(i);

      final float u;
      final float v;
      final float u2;
      final float v2;

      if (pTiledSprite.isFlippedVertical()) { // TODO Optimize with field access?
        if (pTiledSprite.isFlippedHorizontal()) { // TODO Optimize with field access?
          u = textureRegion.getU2();
          u2 = textureRegion.getU();
          v = textureRegion.getV2();
          v2 = textureRegion.getV();
        } else {
          u = textureRegion.getU();
          u2 = textureRegion.getU2();
          v = textureRegion.getV2();
          v2 = textureRegion.getV();
        }
      } else {
        if (pTiledSprite.isFlippedHorizontal()) { // TODO Optimize with field access?
          u = textureRegion.getU2();
          u2 = textureRegion.getU();
          v = textureRegion.getV();
          v2 = textureRegion.getV2();
        } else {
          u = textureRegion.getU();
          u2 = textureRegion.getU2();
          v = textureRegion.getV();
          v2 = textureRegion.getV2();
        }
      }

      if (textureRegion.isRotated()) {
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;
      } else {
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 0 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 1 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 2 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 3 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v2;

        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u;
        bufferData[
                bufferDataOffset
                    + 4 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;

        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_U] =
            u2;
        bufferData[
                bufferDataOffset
                    + 5 * TiledSprite.VERTEX_SIZE
                    + Sprite.TEXTURECOORDINATES_INDEX_V] =
            v;
      }

      bufferDataOffset += TiledSprite.TILEDSPRITE_SIZE;
    }

    this.setDirtyOnHardware();
  }
  protected void drawScene() {
    Log.i(TAG, "----------drawScene------------------------------");

    this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, 0), false);
    this.registerUpdateHandler(mPhysicsWorld);
    this.mPhysicsWorld.setContactListener(contactListener);

    final Sprite spriteBackGround =
        new Sprite(
            960 / 2 - mBackGroundTextureRegion.getWidth() / 2,
            0,
            mBackGroundTextureRegion,
            mVertexBufferObjectManager);
    this.attachChild(spriteBackGround);

    for (int i = 0; i < mTabSprite.length; i++) {
      mTabSprite[i] =
          new Sprite(
              960 / 2 - 1150 / 2,
              89.5f,
              tpTab[i].getTexturePackTextureRegionLibrary().get(0),
              mVertexBufferObjectManager);
      this.attachChild(mTabSprite[i]);
      mTabSprite[i].setVisible(false);
    }
    mTabSprite[0].setVisible(true);

    final Body body =
        this.physicsEditorShapeLibrary.createBody(
            "a3_5_1_iphone_dai", mTabSprite[0], this.mPhysicsWorld);
    this.mPhysicsWorld.registerPhysicsConnector(
        new PhysicsConnector(mTabSprite[0], body, true, true));
    mTabSprite[0].setUserData(body);

    // Cubic Choose
    mCubicChooseSpite[CUBIC_YELLOW] =
        new Sprite(
            279,
            70,
            tpOne
                .getTexturePackTextureRegionLibrary()
                .get(Vol3OsyougatsuResource.packer_parta_1.A3_6_4_IPHONE_KOMA_ID),
            mVertexBufferObjectManager);
    this.attachChild(mCubicChooseSpite[CUBIC_YELLOW]);

    mCubicChooseSpite[CUBIC_GREEN] =
        new Sprite(
            200,
            90f,
            tpOne
                .getTexturePackTextureRegionLibrary()
                .get(Vol3OsyougatsuResource.packer_parta_1.A3_6_3_IPHONE_KOMA_ID),
            mVertexBufferObjectManager);
    this.attachChild(mCubicChooseSpite[CUBIC_GREEN]);

    mCubicChooseSpite[CUBIC_BLUE] =
        new Sprite(
            110,
            107,
            tpOne
                .getTexturePackTextureRegionLibrary()
                .get(Vol3OsyougatsuResource.packer_parta_1.A3_6_2_IPHONE_KOMA_ID),
            mVertexBufferObjectManager);
    this.attachChild(mCubicChooseSpite[CUBIC_BLUE]);

    mCubicChooseSpite[CUBIC_ORANGE] =
        new Sprite(
            22f,
            135,
            tpOne
                .getTexturePackTextureRegionLibrary()
                .get(Vol3OsyougatsuResource.packer_parta_1.A3_6_1_IPHONE_KOMA_ID),
            mVertexBufferObjectManager);
    this.attachChild(mCubicChooseSpite[CUBIC_ORANGE]);

    cubicTouch = new CubicTouch(0, 0, 960, 640, null);
    this.attachChild(cubicTouch);
    this.registerTouchArea(cubicTouch);

    for (int i = CUBIC_ORANGE; i <= CUBIC_YELLOW; i++) {
      final TextureRegion iOTextureRegion =
          new TextureRegion(
              bitmapTexture[i % 2],
              2,
              2,
              mCubicStartTiledTexture[i].getWidth(),
              mCubicStartTiledTexture[i].getHeight());
      mCubicEntity[i] =
          new CubicEntity(
              0,
              100,
              i,
              mCubicStartTiledTexture[i],
              mCubicTurnTiledTexture[i],
              mCubicStopTiledTexture[i],
              mCubicTurnOptionTiledTexture,
              iOTextureRegion);
      this.attachChild(mCubicEntity[i]);
      mCubicEntity[i].setVisible(false);
      // Body
      final Body bodyCubic =
          this.physicsEditorShapeLibrary.createBody(
              CUBIC_BODYNAME[i], mCubicEntity[i], this.mPhysicsWorld);
      bodyCubic.setFixedRotation(true);
      bodyCubic.setActive(false);
      mCubicEntity[i].setUserData(bodyCubic);
      mPhysicsWorld.registerPhysicsConnector(
          new PhysicsConnector(mCubicEntity[i], bodyCubic, true, true));
    }

    final SceneTouch sceneTouch = new SceneTouch(0, 0, 960, 640, null);
    this.attachChild(sceneTouch);
    this.registerTouchArea(sceneTouch);

    mSuzuAniSprite =
        new AnimatedSprite(
            960 / 2 - mSuzuTiledTexTure.getWidth() / 2,
            -19,
            mSuzuTiledTexTure,
            mVertexBufferObjectManager);
    this.attachChild(mSuzuAniSprite);

    mShishiAniSprite =
        new AnimatedSprite(960, 59.5f, mShishiTiledTexTure, mVertexBufferObjectManager);
    this.attachChild(mShishiAniSprite);
    mShishiAniSprite.setVisible(false);

    mArrowSprite =
        new Sprite(
            120,
            133,
            tpThree
                .getTexturePackTextureRegionLibrary()
                .get(Vol3OsyougatsuResource.packer_parta_3.A3_8_1_IPHONE_YAJIRUSHI_ID),
            mVertexBufferObjectManager);
    this.attachChild(mArrowSprite);
    mArrowSprite.setVisible(false);
  }
  public void createExplosion(float x, float y, float radius, float damage, boolean harmPlayer) {

    final float X = x, Y = y;

    final HashMap<Character, Float> CHARACTERS_IN_RANGE = new HashMap<Character, Float>();

    for (final Zombie z : Zombie.getAliveZombies())
      this.onExplosionCheckCharacterCollision(x, y, radius, z, CHARACTERS_IN_RANGE);

    if (harmPlayer)
      this.onExplosionCheckCharacterCollision(x, y, radius, this.pPlayer, CHARACTERS_IN_RANGE);

    final Iterator<Character> CHARACTER_ITERATOR = CHARACTERS_IN_RANGE.keySet().iterator();
    final Iterator<Float> DAMAGE_ITERATOR = CHARACTERS_IN_RANGE.values().iterator();

    while (CHARACTER_ITERATOR.hasNext()) {

      final Character CHAR = CHARACTER_ITERATOR.next();
      final Float DAMAGE = DAMAGE_ITERATOR.next();

      CHAR.setHealthAmount((int) (CHAR.getHealthAmount() - damage * DAMAGE));

      if (CHAR.getHealthAmount() <= 0) AchievementsManager.incrementZombiesKilledByExplosion();
    }

    final ITiledTextureRegion EXPLOSION_TEXTURE = HudRegions.region_explosion;
    final AnimatedSprite EXPLOSION =
        new AnimatedSprite(
            x, y, EXPLOSION_TEXTURE, EnvironmentVars.MAIN_CONTEXT.getVertexBufferObjectManager());

    if (this.explosionCount == 0) EXPLOSION_TEXTURE.getTexture().load();

    EXPLOSION.setScaleCenter(0, 0);
    EXPLOSION.setScale(2f);
    EXPLOSION.setPosition(
        EXPLOSION.getX() - EXPLOSION.getWidthScaled() / 2f,
        EXPLOSION.getY() - EXPLOSION.getHeightScaled() / 2f);
    EXPLOSION.setZIndex(this.getLevel().getMapHeight());
    this.attachChild(EXPLOSION);
    this.explosionCount++;

    EXPLOSION.animate(
        30L,
        false,
        new IAnimationListener() {
          private boolean usedEffects;

          @Override
          public void onAnimationFinished(AnimatedSprite pAnimatedSprite) {
            EnvironmentVars.MAIN_CONTEXT.runOnUpdateThread(
                new Runnable() {
                  @Override
                  public void run() {
                    SessionScene.this.explosionCount--;
                    if (SessionScene.this.explosionCount == 0)
                      EXPLOSION_TEXTURE.getTexture().unload();
                    EXPLOSION.detachSelf();
                    EXPLOSION.dispose();
                  }
                });
          }

          @Override
          public void onAnimationFrameChanged(
              AnimatedSprite pAnimatedSprite, int pOldFrameIndex, int pNewFrameIndex) {

            if (pNewFrameIndex >= 3)
              if (!this.usedEffects) {
                SessionScene.this.createExplosionMark(X, Y);
                SessionScene.this.onExplosionCreateSmoke(X, Y);
                this.usedEffects = true;
              }
          }

          @Override
          public void onAnimationLoopFinished(
              AnimatedSprite pAnimatedSprite, int pRemainingLoopCount, int pInitialLoopCount) {}

          @Override
          public void onAnimationStarted(AnimatedSprite pAnimatedSprite, int pInitialLoopCount) {}
        });

    this.getCameraManager().shakeRandomDirection();

    SessionScene.EXPLOSION_SOUND.play();
  }