public void LoadTilesWithBody(TiledMap tileMap, World world) { TiledMapTileLayer layer = (TiledMapTileLayer) tileMap.getLayers().get("Body"); BodyDef def = new BodyDef(); FixtureDef fdef = new FixtureDef(); def.type = BodyType.StaticBody; FixtureDef sensorDef = new FixtureDef(); sensorDef.isSensor = true; int coinID = 0; int starID = 0; float tileSize = layer.getTileHeight(); GameTileRenderer.width = layer.getWidth(); GameTileRenderer.height = layer.getHeight(); GameTileRenderer.tlz = new int[GameTileRenderer.width][GameTileRenderer.height]; for (int[] row : GameTileRenderer.tlz) Arrays.fill(row, -1); for (int row = 0; row < layer.getHeight(); row++) { for (int col = 0; col < layer.getWidth(); col++) { Cell cell = layer.getCell(col, row); if (cell == null || cell.getTile() == null) continue; // create def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); float x = col * tileSize / B2D.PPM; float y = row * tileSize / B2D.PPM; int tileType = cell.getTile().getId(); tileType--; if (tileType <= 14) { // e element normal int id = tileType; GameTileRenderer.tlz[col][row] = id; ChainShape shape = new ChainShape(); Vector2[] v = new Vector2[5]; if (tileType < 14) { v[0] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[1] = new Vector2(-tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[2] = new Vector2(tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[3] = new Vector2(tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[4] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); } else { v[0] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[1] = new Vector2(-tileSize / 2 / B2D.PPM, 0 / B2D.PPM); v[2] = new Vector2(tileSize / 2 / B2D.PPM, 0 / B2D.PPM); v[3] = new Vector2(tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[4] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); } shape.createChain(v); fdef.friction = 0; fdef.shape = shape; if (tileType < 14) world.createBody(def).createFixture(fdef).setUserData("tile"); else world.createBody(def).createFixture(fdef).setUserData("die"); } if (tileType == 16) { // coin Cell c = new Cell(); layer.setCell(col, row, c); if (GameStats.AddTheCoin(coinID)) { GameWorld.cr.coins.add(new Vector2(x, y)); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); ChainShape shape = new ChainShape(); Vector2[] v = new Vector2[5]; v[0] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[1] = new Vector2(-tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[2] = new Vector2(tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[3] = new Vector2(tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[4] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); shape.createChain(v); sensorDef.shape = shape; TileData tmp = new TileData(coinID, "coin"); coinID++; world.createBody(def).createFixture(sensorDef).setUserData(tmp); } else { GameWorld.cr.coins.add(null); coinID++; } } if (tileType == 17) { Cell c = new Cell(); layer.setCell(col, row, c); GameWorld.cr.stars.add(new Vector2(x, y)); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); ChainShape shape = new ChainShape(); Vector2[] v = new Vector2[5]; v[0] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[1] = new Vector2(-tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[2] = new Vector2(tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[3] = new Vector2(tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[4] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); shape.createChain(v); sensorDef.shape = shape; TileData tmp = new TileData(starID, "star"); starID++; world.createBody(def).createFixture(sensorDef).setUserData(tmp); } if (tileType == 18) { Cell c = new Cell(); layer.setCell(col, row, c); GameMap.flagposition = new Vector2(x, y); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); ChainShape shape = new ChainShape(); Vector2[] v = new Vector2[5]; v[0] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[1] = new Vector2(-tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[2] = new Vector2(tileSize / 2 / B2D.PPM, tileSize / 2 / B2D.PPM); v[3] = new Vector2(tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); v[4] = new Vector2(-tileSize / 2 / B2D.PPM, -tileSize / 2 / B2D.PPM); shape.createChain(v); sensorDef.shape = shape; world.createBody(def).createFixture(sensorDef).setUserData("finish"); } // tiles.add(new Vector2(x, y)); } } }
public void LoadGameTiles(TiledMap tileMap, World world) { TiledMapTileLayer layer = (TiledMapTileLayer) tileMap.getLayers().get("Tiles"); BodyDef def = new BodyDef(); FixtureDef fdef = new FixtureDef(); def.type = BodyType.StaticBody; FixtureDef sensorDef = new FixtureDef(); sensorDef.isSensor = true; int coinID = 0; int starID = 0; float tileSize = layer.getTileHeight(); GameTileRenderer.width = layer.getWidth(); GameTileRenderer.height = layer.getHeight(); GameTileRenderer.tlz = new int[GameTileRenderer.width][GameTileRenderer.height]; for (int[] row : GameTileRenderer.tlz) Arrays.fill(row, -1); for (int row = 0; row < layer.getHeight(); row++) { for (int col = 0; col < layer.getWidth(); col++) { Cell cell = layer.getCell(col, row); if (cell == null || cell.getTile() == null) continue; // create def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); float x = col * tileSize / B2D.PPM; float y = row * tileSize / B2D.PPM; int tileType = cell.getTile().getId(); tileType--; if (tileType == 11) { GameStats.GameSpawnPosition = new Vector2(x, y); Cell c = new Cell(); layer.setCell(col, row, c); } if (tileType == 12) { Cell c = new Cell(); layer.setCell(col, row, c); GameMap.flagposition = new Vector2(x, y); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); sensorDef.shape = createShape(tileSize); world.createBody(def).createFixture(sensorDef).setUserData("finish"); } if (tileType == 8) { // e spike int id = tileType; GameTileRenderer.tlz[col][row] = id; fdef.friction = 0; fdef.shape = createSpikeShape(tileSize); world.createBody(def).createFixture(fdef).setUserData("die"); } if (tileType == 0 || tileType == 4) { // e element normal int id = tileType; GameTileRenderer.tlz[col][row] = id; fdef.friction = 0; fdef.shape = createShape(tileSize); world.createBody(def).createFixture(fdef).setUserData("tile"); } if ((tileType >= 1 && tileType <= 3) || (tileType >= 5 && tileType <= 7)) { // e bara int id = tileType; GameTileRenderer.tlz[col][row] = id; fdef.friction = 0; fdef.shape = createShape(tileSize); world.createBody(def).createFixture(fdef).setUserData("rail"); } if (tileType == 10) { // coin Cell c = new Cell(); layer.setCell(col, row, c); if (GameStats.AddTheCoin(coinID)) { GameWorld.cr.coins.add(new Vector2(x, y)); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); sensorDef.shape = createShape(tileSize); TileData tmp = new TileData(coinID, "coin"); coinID++; world.createBody(def).createFixture(sensorDef).setUserData(tmp); } else { GameWorld.cr.coins.add(null); coinID++; } } if (tileType == 9) { // coin Cell c = new Cell(); layer.setCell(col, row, c); GameWorld.cr.stars.add(new Vector2(x, y)); def.position.set((col + 0.5f) * tileSize / B2D.PPM, (row + 0.5f) * tileSize / B2D.PPM); sensorDef.shape = createShape(tileSize); TileData tmp = new TileData(starID, "star"); starID++; world.createBody(def).createFixture(sensorDef).setUserData(tmp); } } } }