Esempio n. 1
0
  /** Add model to TileMap */
  public final void addModel(final TileMapModel model) {
    int mapTileWidth = (int) model.getTileSize().x;
    int mapTileHeight = (int) model.getTileSize().y;

    for (int i = 0; i < model.getLayersCount(); i++) {

      final TileMapLayer layer = model.getLayer(i);

      int width = (int) Math.min(layer.mWidth, model.getMapSize().x);
      int height = (int) Math.min(layer.mHeight, model.getMapSize().y);

      LayerInfo layerInfo = addLayerInfo(new Vector2(width, height));

      for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
          final int tileId = layer.mData[x + y * width];
          if (tileId == 0) continue;

          final TileInfo tileInfo = model.getTileInfo(tileId);

          // Prepare Buffer
          layerInfo.prepareBuffer(tileInfo);

          // Get Buffer
          LayerInfo.Buffer buff = layerInfo.getBuffer(tileInfo);

          // Get Rect Area
          RectF textureArea = tileInfo.getTextureArea();
          RectF textureAreaU =
              GeneralUtils.divideRect(textureArea, tileInfo.getTexture().getSize());

          Vector2 tileSize = tileInfo.getSize();
          final int tileWidth = (int) tileSize.x;
          final int tileHeight = (int) tileSize.y;

          // Put Element buffer
          buff.mElementsVertex.put(x * mapTileWidth);
          buff.mElementsVertex.put(y * mapTileHeight);
          buff.mElementsVertex.put(x * mapTileWidth + tileWidth);
          buff.mElementsVertex.put(y * mapTileHeight);
          buff.mElementsVertex.put(x * mapTileWidth + tileWidth);
          buff.mElementsVertex.put(y * mapTileHeight + tileHeight);
          buff.mElementsVertex.put(x * mapTileWidth);
          buff.mElementsVertex.put(y * mapTileHeight);
          buff.mElementsVertex.put(x * mapTileWidth);
          buff.mElementsVertex.put(y * mapTileHeight + tileHeight);
          buff.mElementsVertex.put(x * mapTileWidth + tileWidth);
          buff.mElementsVertex.put(y * mapTileHeight + tileHeight);

          // Put Texture Buffer
          buff.mTextureVertex.put(textureAreaU.left);
          buff.mTextureVertex.put(textureAreaU.top);
          buff.mTextureVertex.put(textureAreaU.right);
          buff.mTextureVertex.put(textureAreaU.top);
          buff.mTextureVertex.put(textureAreaU.right);
          buff.mTextureVertex.put(textureAreaU.bottom);
          buff.mTextureVertex.put(textureAreaU.left);
          buff.mTextureVertex.put(textureAreaU.top);
          buff.mTextureVertex.put(textureAreaU.left);
          buff.mTextureVertex.put(textureAreaU.bottom);
          buff.mTextureVertex.put(textureAreaU.right);
          buff.mTextureVertex.put(textureAreaU.bottom);
        }
      }

      layerInfo.pack();
    }
  }