Example usage for com.badlogic.gdx.math Polygon getVertices

List of usage examples for com.badlogic.gdx.math Polygon getVertices

Introduction

In this page you can find the example usage for com.badlogic.gdx.math Polygon getVertices.

Prototype

public float[] getVertices() 

Source Link

Document

Returns the polygon's local vertices without scaling or rotation and without being offset by the polygon position.

Usage

From source file:Tabox2D.java

License:Open Source License

/**
 * Creates a Polygons with the given points
 * @param type "dynamic" or "static"/*from  w w w .  j  av  a2s  .co  m*/
 * @param pts points for the polygon
 * @return A new Tabody instance
 */
public Tabody newPoly(String type, float[] pts) {
    // Scale proportions:
    for (int i = 0; i < pts.length; i++) {
        pts[i] /= meterSize;
    }

    PolygonShape polygonShape;
    BodyDef defPoly = new BodyDef();

    setType(defPoly, type);

    // Get bounding box:

    Polygon polyForBox = new Polygon();
    polyForBox.setVertices(pts);

    //polyForBox.translate(center.x, center.y);

    Rectangle boundingRect = boundingBoxOf(polyForBox.getVertices());
    Vector2 aabbCenter = new Vector2(boundingRect.x + boundingRect.width / 2,
            boundingRect.y + boundingRect.height / 2);
    defPoly.position.set(aabbCenter.x, aabbCenter.y);

    Tabody regularPoly = new Tabody();
    regularPoly.body = world.createBody(defPoly);
    polygonShape = new PolygonShape();

    for (int i = 0; i < pts.length - 1; i += 2) {
        pts[i] -= aabbCenter.x;
        pts[i + 1] -= aabbCenter.y;
    }
    polygonShape.set(pts);

    FixtureDef fixtureBox = new FixtureDef();
    fixtureBox.shape = polygonShape;
    fixtureBox.density = 1;
    fixtureBox.friction = 1;
    fixtureBox.restitution = 0;

    ////////////////////////////////////////
    regularPoly.w = boundingRect.width * meterSize;//radius * 2 * meterSize;
    regularPoly.h = boundingRect.height * meterSize;//radius * 2 * meterSize;
    regularPoly.fixture = fixtureBox;
    regularPoly.bodyType = "poly";
    ////////////////////////////////////////

    regularPoly.body.createFixture(fixtureBox);
    polygonShape.dispose();
    tabodies.add(regularPoly);
    return regularPoly;
}

From source file:com.agateau.pixelwheels.utils.Box2DUtils.java

License:Open Source License

public static Body createStaticBodyForMapObject(World world, MapObject object) {
    final float u = Constants.UNIT_FOR_PIXEL;
    float rotation = object.getProperties().get("rotation", 0f, Float.class);

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.StaticBody;
    bodyDef.angle = -rotation * MathUtils.degreesToRadians;

    if (object instanceof RectangleMapObject) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();

        /*//from w w  w  . j a  v a  2s  .c  om
          A          D
           x--------x
           |        |
           x--------x
          B          C
         */
        float[] vertices = new float[8];
        // A
        vertices[0] = 0;
        vertices[1] = 0;
        // B
        vertices[2] = 0;
        vertices[3] = -rect.getHeight();
        // C
        vertices[4] = rect.getWidth();
        vertices[5] = -rect.getHeight();
        // D
        vertices[6] = rect.getWidth();
        vertices[7] = 0;
        scaleVertices(vertices, u);

        bodyDef.position.set(u * rect.getX(), u * (rect.getY() + rect.getHeight()));
        Body body = world.createBody(bodyDef);

        PolygonShape shape = new PolygonShape();
        shape.set(vertices);

        body.createFixture(shape, 1);
        return body;
    } else if (object instanceof PolygonMapObject) {
        Polygon polygon = ((PolygonMapObject) object).getPolygon();
        float[] vertices = polygon.getVertices().clone();
        scaleVertices(vertices, u);

        bodyDef.position.set(polygon.getX() * u, polygon.getY() * u);
        Body body = world.createBody(bodyDef);

        PolygonShape shape = new PolygonShape();
        shape.set(vertices);

        body.createFixture(shape, 1);
        return body;
    } else if (object instanceof EllipseMapObject) {
        Ellipse ellipse = ((EllipseMapObject) object).getEllipse();
        float radius = ellipse.width * u / 2;
        float x = ellipse.x * u + radius;
        float y = ellipse.y * u + radius;

        bodyDef.position.set(x, y);
        Body body = world.createBody(bodyDef);

        CircleShape shape = new CircleShape();
        shape.setRadius(radius);

        body.createFixture(shape, 1);
        return body;
    }
    throw new RuntimeException("Unsupported MapObject type: " + object);
}

From source file:com.bladecoder.engine.actions.Param.java

License:Apache License

public static String toStringParam(Polygon p) {
    StringBuilder sb = new StringBuilder();
    float[] verts = p.getVertices();

    sb.append(verts[0]);/*from   www .j av  a2 s  .c o m*/

    for (int i = 1; i < verts.length; i++) {
        sb.append(NUMBER_PARAM_SEPARATOR);
        sb.append(verts[i]);
    }

    return sb.toString();
}

From source file:com.bladecoder.engine.util.PolygonUtils.java

License:Apache License

public static void addPoint(Polygon poly, float x, float y, int index) {
    float verts[] = poly.getVertices();

    x -= poly.getX();// w ww  . j a  va 2  s  .c o  m
    y -= poly.getY();

    int length = verts.length;
    float destination[] = new float[length + 2];

    System.arraycopy(verts, 0, destination, 0, index);
    destination[index] = x;
    destination[index + 1] = y;
    System.arraycopy(verts, index, destination, index + 2, length - index);

    poly.setVertices(destination);
}

From source file:com.bladecoder.engine.util.PolygonUtils.java

License:Apache License

public static void deletePoint(Polygon poly, int index) {

    float verts[] = poly.getVertices();

    if (verts.length < 8)
        return;/*from   w  w w .  j a  v  a 2s .c  o m*/

    int length = verts.length;
    float destination[] = new float[length - 2];

    //      index = index * 2;

    System.arraycopy(verts, 0, destination, 0, index);
    System.arraycopy(verts, index + 2, destination, index, length - index - 2);

    poly.setVertices(destination);
}

From source file:com.bladecoder.engineeditor.scneditor.ScnWidgetInputListener.java

License:Apache License

@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
    // EditorLogger.debug("Touch Dragged - X: " + Gdx.input.getX() + " Y: "
    // + Gdx.input.getY());

    super.touchDragged(event, x, y, pointer);

    if (Gdx.input.isButtonPressed(Buttons.LEFT)) {
        Scene scn = scnWidget.getScene();

        if (scn == null)
            return;

        Vector2 d = new Vector2(Gdx.input.getX(), Gdx.input.getY());
        scnWidget.screenToWorldCoords(d);

        d.sub(org);/* www.  j  av a  2  s  .c  o  m*/
        org.add(d);

        if (draggingMode == DraggingModes.DRAGGING_ACTOR) {

            selActor.setPosition(selActor.getX() + d.x, selActor.getY() + d.y);
            Ctx.project.setModified(this, Project.POSITION_PROPERTY, null, selActor);

        } else if (draggingMode == DraggingModes.DRAGGING_BBOX_POINT) {
            Polygon poly = selActor.getBBox();

            float verts[] = poly.getVertices();
            verts[vertIndex] += d.x;
            verts[vertIndex + 1] += d.y;
            poly.dirty();

            Ctx.project.setModified();
        } else if (draggingMode == DraggingModes.DRAGGING_WALKZONE_POINT) {
            Polygon poly = scn.getPolygonalNavGraph().getWalkZone();

            float verts[] = poly.getVertices();
            verts[vertIndex] += d.x;
            verts[vertIndex + 1] += d.y;
            poly.dirty();

            Ctx.project.setModified();
        } else if (draggingMode == DraggingModes.DRAGGING_WALKZONE) {
            Polygon poly = scn.getPolygonalNavGraph().getWalkZone();
            poly.translate(d.x, d.y);
        } else if (draggingMode == DraggingModes.DRAGGING_MARKER_0) {
            Vector2 depthVector = scnWidget.getScene().getDepthVector();

            depthVector.x += d.y;
            Ctx.project.setModified();
            updateFakeDepth();
        } else if (draggingMode == DraggingModes.DRAGGING_MARKER_100) {
            Vector2 depthVector = scnWidget.getScene().getDepthVector();

            depthVector.y += d.y;
            Ctx.project.setModified();
            updateFakeDepth();
        }

    } else if (Gdx.input.isButtonPressed(Buttons.RIGHT) || Gdx.input.isButtonPressed(Buttons.MIDDLE)) {

        Vector2 p = new Vector2(Gdx.input.getX(), Gdx.input.getY());
        scnWidget.screenToWorldCoords(p);
        p.sub(org);

        scnWidget.translate(p);
    }
}

From source file:com.bladecoder.engineeditor.ui.EditActorDialog.java

License:Apache License

@Override
protected void inputsToModel(boolean create) {

    String type = typePanel.getText();
    boolean typeChanged = false;
    BaseActor oldElement = e;//from  w  w  w  .  j  a v  a 2s.com

    boolean isPlayer = false;

    if (!create) {

        typeChanged = (type.equals(CHARACTER_TYPE_STR) && !(e instanceof CharacterActor))
                || (type.equals(SPRITE_TYPE_STR)
                        && (!(e instanceof SpriteActor) || e instanceof CharacterActor))
                || (type.equals(BACKGROUND_TYPE_STR)
                        && (!(e instanceof InteractiveActor) || e instanceof SpriteActor))
                || (type.equals(OBSTACLE_TYPE_STR) && !(e instanceof ObstacleActor))
                || (type.equals(ANCHOR_TYPE_STR) && !(e instanceof AnchorActor));

        isPlayer = parent.getPlayer() == e;

        // remove to allow id, zindex and layer change
        parent.removeActor(e);
    }

    if (create || typeChanged) {
        if (type.equals(BACKGROUND_TYPE_STR)) {
            e = new InteractiveActor();
        } else if (type.equals(SPRITE_TYPE_STR)) {
            e = new SpriteActor();
        } else if (type.equals(CHARACTER_TYPE_STR)) {
            e = new CharacterActor();
        } else if (type.equals(OBSTACLE_TYPE_STR)) {
            e = new ObstacleActor();
        } else if (type.equals(ANCHOR_TYPE_STR)) {
            e = new AnchorActor();
        }

        if (!(e instanceof SpriteActor) && !(e instanceof AnchorActor)) {
            Polygon bbox = e.getBBox();

            bbox.setVertices(new float[8]);

            float[] verts = bbox.getVertices();

            verts[0] = -DEFAULT_DIM / 2;
            verts[1] = 0f;
            verts[2] = -DEFAULT_DIM / 2;
            verts[3] = DEFAULT_DIM;
            verts[4] = DEFAULT_DIM / 2;
            verts[5] = DEFAULT_DIM;
            verts[6] = DEFAULT_DIM / 2;
            verts[7] = 0f;
            bbox.dirty();
        }
    }

    if (typeChanged) {
        // Put sounds, verbs and animations in the new element

        if (oldElement instanceof InteractiveActor && e instanceof InteractiveActor) {
            HashMap<String, Verb> verbs = ((InteractiveActor) e).getVerbManager().getVerbs();
            HashMap<String, Verb> oldVerbs = ((InteractiveActor) oldElement).getVerbManager().getVerbs();

            for (String k : oldVerbs.keySet()) {
                Verb v = oldVerbs.get(k);
                verbs.put(k, v);
            }

            HashMap<String, SoundFX> oldSounds = ((InteractiveActor) oldElement).getSounds();

            if (oldSounds != null) {
                for (String k : oldSounds.keySet()) {
                    ((InteractiveActor) e).addSound(oldSounds.get(k));
                }
            }
        }

        if (oldElement instanceof SpriteActor && e instanceof SpriteActor) {
            ((SpriteActor) e).setRenderer(((SpriteActor) oldElement).getRenderer());
        }
    }

    e.setId(ElementUtils.getCheckedId(id.getText(), parent.getActors().keySet().toArray(new String[0])));
    e.setVisible(Boolean.parseBoolean(visible.getText()));

    if (e instanceof InteractiveActor) {
        InteractiveActor ia = (InteractiveActor) e;

        ia.setLayer(layer.getText());
        ia.setInteraction(Boolean.parseBoolean(interaction.getText()));

        String key = desc.getText();

        if (key == null || key.isEmpty() || key.charAt(0) != I18N.PREFIX)
            key = Ctx.project.getI18N().genKey(parent.getId(), e.getId(), "desc");

        Ctx.project.getI18N().setTranslation(key, desc.getText());

        if (desc.getText() != null)
            ia.setDesc(key);
        else
            ia.setDesc(null);

        ia.setState(state.getText());
        ia.setZIndex(Float.parseFloat(zIndex.getText()));

        if (e instanceof SpriteActor) {
            SpriteActor sa = (SpriteActor) e;

            String rendererType = renderer.getText();

            if (Project.ATLAS_RENDERER_STRING.equals(rendererType)) {
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof AtlasRenderer))
                    sa.setRenderer(new AtlasRenderer());
            } else if (Project.IMAGE_RENDERER_STRING.equals(rendererType)) {
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof ImageRenderer))
                    sa.setRenderer(new ImageRenderer());
            } else if (Project.S3D_RENDERER_STRING.equals(rendererType)) {
                Sprite3DRenderer r;

                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof Sprite3DRenderer)) {
                    r = new Sprite3DRenderer();
                    sa.setRenderer(r);
                } else {
                    r = (Sprite3DRenderer) sa.getRenderer();
                }

                r.setCameraFOV(Float.parseFloat(fov.getText()));
                r.setCameraName(cameraName.getText());
                r.setSpriteSize(Param.parseVector2(spriteSize.getText()));
            } else if (Project.SPINE_RENDERER_STRING.equals(rendererType)) {
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof SpineRenderer))
                    sa.setRenderer(new SpineRenderer());
            }

            sa.setBboxFromRenderer(true);
            sa.setDepthType(DepthType.valueOf(depthType.getText()));
            sa.setScale(Float.parseFloat(scale.getText()));

            if (e instanceof CharacterActor) {
                CharacterActor ca = (CharacterActor) e;

                ca.setWalkingSpeed(Float.parseFloat(walkingSpeed.getText()));
                ca.setTextColor(Param.parseColor(textColor.getText()));
            }
        }
    }

    parent.addActor(e);

    if (isPlayer && !typeChanged)
        parent.setPlayer((CharacterActor) e);

    if (e instanceof InteractiveActor) {
        SceneLayer l = parent.getLayer(((InteractiveActor) e).getLayer());
        l.orderByZIndex();
    }

    if (e instanceof SpriteActor)
        ((SpriteActor) e).retrieveAssets();

    // TODO UNDO OP
    // UndoOp undoOp = new UndoAddElement(doc, e);
    // Ctx.project.getUndoStack().add(undoOp);

    Ctx.project.setModified();
}

From source file:com.flatfisk.gnomp.math.GeometryUtils.java

License:Apache License

/**
 * @see #isConvex(com.badlogic.gdx.math.Vector2[])
 *///from w  w  w.  jav  a  2  s .c  om
public static boolean isConvex(Polygon polygon) {
    return isConvex(polygon.getVertices());
}

From source file:com.github.skittishSloth.openSkies.maps.VoronoiTestScreen.java

public VoronoiTestScreen() {
    final int tileSize = 1;
    final int width = Gdx.graphics.getWidth() / tileSize;
    final int height = Gdx.graphics.getHeight() / tileSize;

    final int numSites = 2000;

    map = VoronoiMap.generateRandom(numSites, width, height);
    final Collection<Site> sites = map.getSites();
    bfMap = new BruteForceVoronoiMap(width, height, tileSize, sites);

    final float[][] landProbability = PerlinNoiseGenerator.generatePerlinNoise(width, height, 2);

    final Pixmap pm = new Pixmap(width, height, Pixmap.Format.RGBA8888);
    pm.setColor(Color.BLACK);//from  w  w  w.  j  ava 2 s.com
    pm.fill();

    final Map<Site, Cell> cells = bfMap.buildCells(landProbability);
    for (final Site site : sites) {
        final Cell cell = cells.get(site);
        if (cell == null) {
            System.err.println("Cell was null for site " + site.getX() + ", " + site.getY());
            continue;
        }

        final boolean landCell = cell.isLand();
        final Color cellColor;
        if (landCell) {
            cellColor = Elevation.PLAINS.getColor();
        } else {
            cellColor = Elevation.WATER.getColor();
        }

        pm.setColor(cellColor);
        final List<VoronoiTile> tiles = cell.getTiles();
        for (final VoronoiTile tile : tiles) {
            final int x = tile.getX();
            final int y = tile.getY();
            pm.drawPixel(x, y);
        }
    }

    pm.setColor(Color.BLACK);
    for (final Site site : sites) {
        final Cell cell = cells.get(site);
        if (cell == null) {
            System.err.println("Cell was null for site " + site.getX() + ", " + site.getY());
            continue;
        }

        final Polygon polygon = cell.calculateConvexHull();
        final float[] vertices = polygon.getVertices();
        final boolean hasCornerPoint = cell.hasCornerPoint();

        final List<Point> verticesPoints = new ArrayList<Point>();
        for (int i = 0; i < vertices.length - 1;) {
            final int x = Math.round(vertices[i++]);
            final int y = Math.round(vertices[i++]);
            if ((x == 0) && (y == 0)) {
                if (!hasCornerPoint) {
                    continue;
                }
            }
            final Point p = new Point(x, y);
            verticesPoints.add(p);
        }

        final int numPoints = verticesPoints.size();

        for (int i = 0; i < numPoints - 1;) {
            final Point p1 = verticesPoints.get(i++);
            final Point p2 = verticesPoints.get(i++);
            pm.drawLine(p1.x, p1.y, p2.x, p2.y);
        }
    }

    pm.setColor(Color.WHITE);
    for (final Site site : sites) {
        final int x = site.getX();
        final int y = site.getY();
        pm.drawPixel(x, y);
    }

    mapTexture = new Texture(pm);
    pm.dispose();

    batch = new SpriteBatch();
}

From source file:com.mygdx.game.Tools.B2WorldCreators.B2WorldCreator1_1.java

public B2WorldCreator1_1(PlayScreen1_1 screen) {

    world = screen.getWorld();/*  w ww  .  j a  va 2s  .  co m*/
    map = screen.getMap();
    enemies = new Array<Enemy>();

    BodyDef bdef = new BodyDef();
    PolygonShape shape = new PolygonShape();
    FixtureDef fdef = new FixtureDef();
    Body body;

    for (MapObject object : map.getLayers().get("Cannon").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();
        enemies.add(new Cannon(screen, (rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM));

    }

    for (MapObject object : map.getLayers().get("Robot").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();
        enemies.add(new Robot(screen, (rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM));

    }
    for (MapObject object : map.getLayers().get("AirEnemy").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();
        enemies.add(new AirEnemy(screen, (rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM));
    }
    for (MapObject object : map.getLayers().get("Wheel").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();
        enemies.add(new Wheel(screen, (rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM));

    }
    for (MapObject object : map.getLayers().get("Ground").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();

        bdef.type = BodyDef.BodyType.StaticBody;
        bdef.position.set((rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM);

        body = world.createBody(bdef);

        shape.setAsBox((rect.getWidth() / 2) / AdventureGame.PPM, (rect.getHeight() / 2) / AdventureGame.PPM);
        fdef.shape = shape;
        fdef.filter.categoryBits = AdventureGame.GROUND_BIT;
        fdef.filter.maskBits = AdventureGame.BULLET_BIT | AdventureGame.PLAYER_BIT
                | AdventureGame.ENEMYBULLET_BIT | AdventureGame.ENEMY_BIT | AdventureGame.DYNAMITE_BIT;
        fdef.isSensor = false;
        body.createFixture(fdef);
    }
    for (MapObject object : map.getLayers().get("Ground").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();

        bdef.type = BodyDef.BodyType.StaticBody;
        bdef.position.set((rect.getX()) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight()) / AdventureGame.PPM);

        body = world.createBody(bdef);

        EdgeShape shapeFloor = new EdgeShape();

        shapeFloor.set(0, 0, rect.getWidth() / AdventureGame.PPM, 0);
        fdef.shape = shapeFloor;
        fdef.filter.categoryBits = AdventureGame.FLOOR_BIT;
        fdef.filter.maskBits = AdventureGame.BULLET_BIT | AdventureGame.PLAYER_BIT
                | AdventureGame.ENEMYBULLET_BIT | AdventureGame.ENEMY_BIT | AdventureGame.DYNAMITE_BIT;
        fdef.isSensor = false;
        body.createFixture(fdef);
    }

    for (MapObject object : map.getLayers().get("Finish").getObjects().getByType(RectangleMapObject.class)) {
        Rectangle rect = ((RectangleMapObject) object).getRectangle();

        bdef.type = BodyDef.BodyType.StaticBody;
        bdef.position.set((rect.getX() + rect.getWidth() / 2) / AdventureGame.PPM,
                (rect.getY() + rect.getHeight() / 2) / AdventureGame.PPM);

        body = world.createBody(bdef);

        shape.setAsBox((rect.getWidth() / 2) / AdventureGame.PPM, (rect.getHeight() / 2) / AdventureGame.PPM);
        fdef.shape = shape;
        fdef.filter.categoryBits = AdventureGame.FINISH_BIT;
        fdef.filter.maskBits = AdventureGame.PLAYER_BIT;
        fdef.isSensor = true;
        body.createFixture(fdef);
    }

    for (MapObject object : map.getLayers().get("Ground").getObjects().getByType(PolygonMapObject.class)) {

        Polygon pol = ((PolygonMapObject) object).getPolygon();

        bdef.type = BodyDef.BodyType.StaticBody;
        bdef.position.set(pol.getX() / AdventureGame.PPM, (pol.getY()) / AdventureGame.PPM);

        body = world.createBody(bdef);
        body.setLinearDamping(100);

        float[] vert = pol.getVertices();
        for (int i = 0; i < vert.length; i++) {
            vert[i] /= AdventureGame.PPM;
        }

        shape.set(vert);
        fdef.shape = shape;
        fdef.filter.categoryBits = AdventureGame.FLOOR_BIT;
        fdef.filter.maskBits = AdventureGame.BULLET_BIT | AdventureGame.PLAYER_BIT | AdventureGame.DYNAMITE_BIT
                | AdventureGame.ENEMY_BIT;
        fdef.isSensor = false;
        fdef.friction = 0.035f;
        body.createFixture(fdef);

    }

}