Example usage for com.badlogic.gdx.maps.tiled TiledMapTileLayer getObjects

List of usage examples for com.badlogic.gdx.maps.tiled TiledMapTileLayer getObjects

Introduction

In this page you can find the example usage for com.badlogic.gdx.maps.tiled TiledMapTileLayer getObjects.

Prototype

public MapObjects getObjects() 

Source Link

Usage

From source file:com.barconr.games.marblegame.Physics2D.java

License:Apache License

public void createFixtures(TiledMap tiledmap) {
    int layerHeight = 0, layerWidth = 0;
    float tileWidth = 0, tileHeight = 0;

    ballsListener = new BallContactListener();

    // Load the Tiled map layer and store some relevant variables
    TiledMapTileLayer tilelayer = (TiledMapTileLayer) (tiledmap.getLayers().get(0));
    layerHeight = tilelayer.getHeight();
    layerWidth = tilelayer.getWidth();/*  w w w.j  av  a  2  s . c o m*/

    maze = new Maze(layerWidth, layerHeight);

    tileHeight = tilelayer.getTileHeight();
    tileWidth = tilelayer.getTileWidth();

    System.out.println("Layer height (tiles) = " + layerHeight + " Layer width (tiles) = " + layerWidth
            + " Tile height = " + tileHeight + "tile width = " + tileWidth);
    System.out.println("Tile count = " + tilelayer.getObjects().getCount());
    System.out.println("layer height pixels = " + (layerHeight * tileHeight) + "LAYER WIDTH PIXELS : "
            + (layerWidth * tileWidth));

    //Create the box2d world
    world = new World(new Vector2(0, -9), true);
    world.setContactListener(ballsListener);

    // Loop through the grid reference
    for (int y_pos = 0; y_pos < layerHeight; y_pos++) {

        for (int x_pos = 0; x_pos < layerWidth; x_pos++) {

            boolean impassibleBlock = tilelayer.getCell(x_pos, layerHeight - y_pos - 1).getTile()
                    .getProperties().containsKey("block");

            // If the tile square contains the reference "start"
            // Store this as the start position
            if (tilelayer.getCell(x_pos, layerHeight - y_pos - 1).getTile().getProperties()
                    .containsKey("start")) {
                if (startPosition == null) {
                    System.out.println("x:" + x_pos * tileWidth + " y:" + y_pos * tileHeight);
                    startPosition = new Vector2(x_pos * tileWidth * Assets.METERS_PER_PIXEL,
                            (50 - y_pos) * tileHeight * Assets.METERS_PER_PIXEL);

                }

            }

            //Create a fixture for the end position
            if (tilelayer.getCell(x_pos, layerHeight - y_pos - 1).getTile().getProperties()
                    .containsKey("end")) {
                //Draw box for fixture that is impassible
                PolygonShape squareShape = new PolygonShape();

                BodyDef squareBodyDef = new BodyDef();

                squareBodyDef.type = BodyType.StaticBody; //Static body which won't move
                //Box position
                squareBodyDef.position.set(new Vector2((x_pos * Assets.METERS_PER_PIXEL * tileWidth),
                        (layerHeight - y_pos - 1) * Assets.METERS_PER_PIXEL * tileHeight));
                //Correction for fact Box2Ds squares are half width/height from center point
                squareBodyDef.position.add(tileWidth / 2 * Assets.METERS_PER_PIXEL,
                        tileHeight / 2 * Assets.METERS_PER_PIXEL);

                Body squareBody = world.createBody(squareBodyDef);

                squareShape.setAsBox(tileWidth / 2 * Assets.METERS_PER_PIXEL,
                        tileHeight / 2 * Assets.METERS_PER_PIXEL);
                FixtureDef fixDefSquare = new FixtureDef();

                fixDefSquare.shape = squareShape;
                fixDefSquare.isSensor = true;

                fixDefSquare.density = 0.1f;
                fixDefSquare.restitution = 0.3f;

                Fixture endFix = squareBody.createFixture(fixDefSquare);
                endFix.setSensor(true);
                endFix.setUserData("exit");
            }

            if (impassibleBlock) {

                //Draw box for fixture that blocks

                maze.setMazeUnit(new MazeUnit("block"), x_pos, y_pos);
                //System.out.print("@");      // Draw ascii map in stdout

            } else {
                maze.setMazeUnit(new MazeUnit("passage"), x_pos, y_pos);
            }

        }
        //System.out.println();
    }

    // The players ball
    playerBallBodyDef = new BodyDef();
    playerBallBodyDef.type = BodyType.DynamicBody;

    if (startPosition == null) {
        playerBallBodyDef.position.set(3f, 3f);

    } else {
        playerBallBodyDef.position.set(startPosition.x, startPosition.y);
    }
    playerBallBodyDef.allowSleep = false;

    ballCircleBody = world.createBody(playerBallBodyDef);

    dynamicCircle = new CircleShape();
    dynamicCircle.setRadius(8 / Assets.PIXELS_PER_METER);

    FixtureDef ballFixtureDef = new FixtureDef();
    ballFixtureDef.shape = dynamicCircle;
    ballFixtureDef.density = 0.1f;
    ballFixtureDef.friction = 1f;
    //ballFixtureDef.

    ballFixtureDef.restitution = 0.5f;
    //ballCircleBody.setUserData("ball");
    Fixture fx = ballCircleBody.createFixture(ballFixtureDef);
    fx.setUserData("ball");

    maze.removeExtraBoxes();
    /*
    PolygonShape squareShape = new PolygonShape();
            
    */

    for (int i = 0; i < maze.width; i++) {
        for (int j = 0; j < maze.height; j++) {
            if (maze.mazeUnits[j][i].getType().equals("block")) {
                BodyDef squareBodyDef = new BodyDef();
                PolygonShape squareShape = new PolygonShape();
                squareBodyDef.type = BodyType.StaticBody; //Static body which won't move
                //Box position
                squareBodyDef.position.set(new Vector2((j * Assets.METERS_PER_PIXEL * tileWidth),
                        (layerHeight - i - 1) * Assets.METERS_PER_PIXEL * tileHeight));
                //Correction for fact Box2Ds squares are half width/height from center point
                squareBodyDef.position.add(tileWidth / 2 * Assets.METERS_PER_PIXEL,
                        tileHeight / 2 * Assets.METERS_PER_PIXEL);

                Body squareBody = world.createBody(squareBodyDef);
                //Size of box
                squareShape.setAsBox(tileWidth / 2 * Assets.METERS_PER_PIXEL,
                        tileHeight / 2 * Assets.METERS_PER_PIXEL);
                FixtureDef fixDefSquare = new FixtureDef();
                fixDefSquare.shape = squareShape;
                fixDefSquare.density = 0.1f;
                fixDefSquare.restitution = 0.3f;
                squareBody.createFixture(fixDefSquare);
            }
        }
    }

}

From source file:com.prisonbreak.game.MapControlRenderer.java

@Override
public void render() {
    if (state == STATE.ONGOING) {
        player.update();/*from www.j  a  v a 2 s. co  m*/
        moveCamera();

        // check if Player is detected by the Guards
        for (Guard guard : guards) {
            if (guard instanceof PatrolGuard) {
                ((PatrolGuard) guard).update();
            }

            if (guard.detectPlayer()) {
                //                    Gdx.app.log("Game over", "");
                loseGame();
                break;
            }
        }

        // search for the door in contact
        for (Object o : doorObjects) {
            RectangleMapObject r = null;
            if (o instanceof RectangleMapObject) {
                r = (RectangleMapObject) o;
            }

            if (r != null && r.getRectangle().overlaps(player.getSprite().getBoundingRectangle())) {
                currentDoor = r;
                break;
            }
        }

        // the door "disappears" when Player steps in
        // and "showed" again when Player steps out
        if (currentDoor != null) {
            int x = currentDoor.getProperties().get("lowerLeftX", Integer.class);
            int y = currentDoor.getProperties().get("lowerLeftY", Integer.class);
            String name = currentDoor.getProperties().get("tileLayerName", String.class);
            TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(name);

            // if the door has not been hidden, and Player steps in -> hide the door
            if (!currentDoor.getProperties().get("locked", Boolean.class) && !doorHidden
                    && currentDoor.getRectangle().overlaps(player.getSprite().getBoundingRectangle())) {
                // extract the tiles
                tile1 = layer.getCell(x, y).getTile(); // lower left
                tile2 = layer.getCell(x + 1, y).getTile(); // lower right
                tile3 = layer.getCell(x, y + 1).getTile(); // upper left
                tile4 = layer.getCell(x + 1, y + 1).getTile(); // upper right

                // "hide" the door when Player steps in
                layer.getCell(x, y).setTile(null);
                layer.getCell(x + 1, y).setTile(null);
                layer.getCell(x, y + 1).setTile(null);
                layer.getCell(x + 1, y + 1).setTile(null);

                doorHidden = true; // set the flag
            }

            // if the door is currently hidden, and Player steps out -> show it
            if (!currentDoor.getProperties().get("locked", Boolean.class) && doorHidden
                    && !currentDoor.getRectangle().overlaps(player.getSprite().getBoundingRectangle())) {
                // "show" the door when Player steps out
                layer.getCell(x, y).setTile(tile1);
                layer.getCell(x + 1, y).setTile(tile2);
                layer.getCell(x, y + 1).setTile(tile3);
                layer.getCell(x + 1, y + 1).setTile(tile4);

                doorHidden = false;
            }
        }

        // update winning state
        if (winGame())
            state = STATE.WIN;
    }

    shapeRenderer.setProjectionMatrix(camera.combined);

    beginRender();

    int currentLayer = 0;
    for (MapLayer layer : map.getLayers()) {
        if (layer.isVisible()) {
            // tile layer
            if (layer instanceof TiledMapTileLayer) {
                renderTileLayer((TiledMapTileLayer) layer);
                ++currentLayer;

                // layer to draw characters and guards
                if (currentLayer == drawSpritesAfterLayer) {
                    // draw player
                    player.getSprite().draw(this.getBatch());

                    // draw all the guards
                    for (Guard guard : guards) {
                        guard.getSprite().draw(this.getBatch());
                    }
                }
                // layer to draw guard's detection area
                // note: even though detection area is RECTANGLE
                //      , draw a POLYGON instead (POLYGON still inside the RECTANGLE)                            
                if (currentLayer == drawDetectionAreaAfterLayer) {
                    for (Guard guard : guards) {
                        endRender();

                        // first, determine the four vertices
                        float nearLeftX, nearLeftY, nearRightX, nearRightY, // "nearer" points in Guard's POV
                                farLeftX, farLeftY, farRightX, farRightY; // "further" points in Guard's POV
                        if (guard.getCurrentDirection().equalsIgnoreCase("up")) {
                            nearLeftX = guard.getDetectArea().x + guard.getDetectArea().width / 4;
                            nearRightX = guard.getDetectArea().x + guard.getDetectArea().width * 3 / 4;
                            nearLeftY = nearRightY = guard.getDetectArea().y;

                            farLeftX = guard.getDetectArea().x;
                            farRightX = guard.getDetectArea().x + guard.getDetectArea().width;
                            farLeftY = farRightY = guard.getDetectArea().y + guard.getDetectArea().height;
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("down")) {
                            nearLeftX = guard.getDetectArea().x + guard.getDetectArea().width * 3 / 4;
                            nearRightX = guard.getDetectArea().x + guard.getDetectArea().width / 4;
                            nearLeftY = nearRightY = guard.getDetectArea().y + guard.getDetectArea().height;

                            farLeftX = guard.getDetectArea().x + guard.getDetectArea().width;
                            farRightX = guard.getDetectArea().x;
                            farLeftY = farRightY = guard.getDetectArea().y;
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("right")) {
                            nearLeftY = guard.getDetectArea().y + guard.getDetectArea().height * 3 / 4;
                            nearRightY = guard.getDetectArea().y + guard.getDetectArea().height / 4;
                            nearLeftX = nearRightX = guard.getDetectArea().x;

                            farLeftY = guard.getDetectArea().y + guard.getDetectArea().height;
                            farRightY = guard.getDetectArea().y;
                            farLeftX = farRightX = guard.getDetectArea().x + guard.getDetectArea().width;
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("left")) {
                            nearLeftY = guard.getDetectArea().y + guard.getDetectArea().height / 4;
                            nearRightY = guard.getDetectArea().y + guard.getDetectArea().height * 3 / 4;
                            nearLeftX = nearRightX = guard.getDetectArea().x + guard.getDetectArea().width;

                            farLeftY = guard.getDetectArea().y;
                            farRightY = guard.getDetectArea().y + guard.getDetectArea().height;
                            farLeftX = farRightX = guard.getDetectArea().x;
                        } else {
                            nearLeftX = nearLeftY = nearRightX = nearRightY = 0;
                            farLeftX = farLeftY = farRightY = farRightX = 0;
                        }

                        // draw detection area
                        Gdx.gl.glEnable(GL20.GL_BLEND);
                        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
                        shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
                        shapeRenderer.setColor(1, 0, 0, 0.5f);
                        if (guard.getCurrentDirection().equalsIgnoreCase("up")) {
                            // the body (rectangle) of the polygon
                            shapeRenderer.rect(nearLeftX, nearLeftY, nearRightX - nearLeftX,
                                    farLeftY - nearLeftY);

                            // the left side (triangle) of the polygon
                            shapeRenderer.triangle(nearLeftX, nearLeftY, farLeftX, farLeftY, nearLeftX,
                                    farLeftY);

                            // the right side (triangle) of the polygon
                            shapeRenderer.triangle(nearRightX, nearRightY, farRightX, farRightY, nearRightX,
                                    farRightY);
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("down")) {
                            // the body (rectangle) of the polygon
                            shapeRenderer.rect(nearRightX, farRightY, nearLeftX - nearRightX,
                                    nearRightY - farRightY);

                            // the left side (triangle) of the polygon
                            shapeRenderer.triangle(nearLeftX, nearLeftY, farLeftX, farLeftY, nearLeftX,
                                    farLeftY);

                            // the right side (triangle) of the polygon
                            shapeRenderer.triangle(nearRightX, nearRightY, farRightX, farRightY, nearRightX,
                                    farRightY);
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("right")) {
                            // the body (rectangle) of the polygon
                            shapeRenderer.rect(nearRightX, nearRightY, farRightX - nearRightX,
                                    nearLeftY - nearRightY);

                            // the left side (triangle) of the polygon
                            shapeRenderer.triangle(nearLeftX, nearLeftY, farLeftX, farLeftY, farLeftX,
                                    nearLeftY);

                            // the right side (triangle) of the polygon
                            shapeRenderer.triangle(nearRightX, nearRightY, farRightX, farRightY, farRightX,
                                    nearRightY);
                        } else if (guard.getCurrentDirection().equalsIgnoreCase("left")) {
                            // the body (rectangle) of the polygon
                            shapeRenderer.rect(farLeftX, nearLeftY, nearLeftX - farLeftX,
                                    nearRightY - nearLeftY);

                            // the left side (triangle) of the polygon
                            shapeRenderer.triangle(nearLeftX, nearLeftY, farLeftX, farLeftY, farLeftX,
                                    nearLeftY);

                            // the right side (triangle) of the polygon
                            shapeRenderer.triangle(nearRightX, nearRightY, farRightX, farRightY, farRightX,
                                    nearRightY);
                        }

                        shapeRenderer.end();
                        Gdx.gl.glDisable(GL20.GL_BLEND);

                        beginRender();
                    }
                }
            }
            // object layer
            else {
                for (MapObject object : layer.getObjects()) {
                    renderObject(object);
                }
            }
        }
    }

    endRender();

    stage.act();
    stage.draw();
}