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

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

Introduction

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

Prototype

public void setVertices(float[] vertices) 

Source Link

Document

Sets the polygon's local vertices relative to the origin point, without any scaling, rotating or translations being applied.

Usage

From source file:Tabox2D.java

License:Open Source License

private Tabody generateRegularPoly(String name, String type, float x, float y, float rad) {
    // Scale proportions:
    x /= meterSize;//  ww w .j  av  a 2 s. co m
    y /= meterSize;
    rad /= meterSize;

    PolygonShape polygonShape;
    BodyDef defPoly = new BodyDef();

    setType(defPoly, type);

    // Generate points:
    List<Vector2> pts = new ArrayList<Vector2>();
    Vector2 p0 = new Vector2(0, rad);

    float conv = MathUtils.degreesToRadians;
    float angleInDeg = polyInfo.get(name + "_angle");
    float cos = MathUtils.cos(conv * angleInDeg);
    float sin = MathUtils.sin(conv * angleInDeg);

    for (int i = 0; i < polyInfo.get(name); i++) {
        pts.add(new Vector2(p0.x, p0.y));
        p0.set(p0.x, p0.y);

        float newX = p0.x * cos - p0.y * sin;
        float newY = p0.x * sin + p0.y * cos;

        p0.x = newX;
        p0.y = newY;
    }

    // Get bounding box:

    float[] rawPoints = new float[pts.size() * 2];
    int pointIndex = 0;
    for (int i = 0; i < rawPoints.length - 1; i += 2) {
        rawPoints[i] = pts.get(pointIndex).x;
        rawPoints[i + 1] = pts.get(pointIndex).y;
        pointIndex++;
    }

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

    Rectangle boundingRect = polyForBox.getBoundingRectangle();
    float boxX = boundingRect.x;
    float boxY = boundingRect.y;
    float boxW = boundingRect.getWidth();
    float boxH = boundingRect.getHeight();

    Vector2 aabbCenter = new Vector2(boxX + boxW / 2, boxY + boxH / 2);
    defPoly.position.set(x, y);

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

    //polygonShape.setAsBox(w / 2, h / 2);
    for (int i = 0; i < rawPoints.length - 1; i += 2) {
        rawPoints[i] -= aabbCenter.x;
        rawPoints[i + 1] -= aabbCenter.y;
    }
    //rawPoints[0] += 0.5;
    polygonShape.set(rawPoints);

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

    ////////////////////////////////////////
    regularPoly.w = boxW * meterSize;//radius * 2 * meterSize;
    regularPoly.h = boxH * meterSize;//radius * 2 * meterSize;
    regularPoly.fixture = fixtureBox;
    regularPoly.bodyType = "poly";
    ////////////////////////////////////////

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

From source file:Tabox2D.java

License:Open Source License

/**
 * Creates a Polygons with the given points
 * @param type "dynamic" or "static"//from   w ww  . j av  a 2s.c o  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:Tabox2D.java

License:Open Source License

/**
 * Returns the bounding box of the given polygon
 * @param ptsCombined The points as Vector2 list
 * @return A Rectangle object/*  www.  j  av a  2 s.co  m*/
 */
private Rectangle boundingBoxOf(List<Vector2> ptsCombined) {
    float[] rawPtsCombined = new float[ptsCombined.size() * 2];
    int ptsCombinedIndex = 0;
    for (int i = 0; i < rawPtsCombined.length - 1; i += 2) {
        rawPtsCombined[i] = ptsCombined.get(ptsCombinedIndex).x;
        rawPtsCombined[i + 1] = ptsCombined.get(ptsCombinedIndex).y;
        ptsCombinedIndex++;
    }

    Polygon polygon = new Polygon();
    polygon.setVertices(rawPtsCombined);
    Rectangle boundingRect = polygon.getBoundingRectangle();
    return boundingRect;
}

From source file:Tabox2D.java

License:Open Source License

/**
 * Returns the bounding box of the given polygon
 * @param ptsCombined The points as a float[] object
 * @return A Rectangle object//from   w ww .java2  s  .  co  m
 */
private Rectangle boundingBoxOf(float[] ptsCombined) {
    Polygon polygon = new Polygon();
    polygon.setVertices(ptsCombined);
    Rectangle boundingRect = polygon.getBoundingRectangle();
    return boundingRect;
}

From source file:com.agateau.pixelwheels.vehicledef.VehicleIO.java

License:Open Source License

private static Shape2D loadShape(XmlReader.Element element, float vehicleWidth, float vehicleHeight) {
    String type = element.getName();
    if (type.equals("octogon")) {
        float width = element.getFloatAttribute("height");
        float height = element.getFloatAttribute("width");
        float x = element.getFloatAttribute("y", (vehicleWidth - width) / 2);
        float y = element.getFloatAttribute("x", (vehicleHeight - height) / 2);
        float corner = element.getFloatAttribute("corner", 0);
        Polygon polygon = new Polygon();
        polygon.setVertices(new float[] { width / 2 - corner, -height / 2, width / 2, -height / 2 + corner,
                width / 2, height / 2 - corner, width / 2 - corner, height / 2, -width / 2 + corner, height / 2,
                -width / 2, height / 2 - corner, -width / 2, -height / 2 + corner, -width / 2 + corner,
                -height / 2 });/*w  w w. j av  a2 s.  co  m*/
        polygon.translate(x - (vehicleWidth - width) / 2, y - (vehicleHeight - height) / 2);
        return polygon;
    } else if (type.equals("trapezoid")) {
        float bottomHeight = element.getFloatAttribute("bottomWidth");
        float topHeight = element.getFloatAttribute("topWidth");
        float height = Math.max(bottomHeight, topHeight);
        float width = element.getFloatAttribute("height");
        float x = element.getFloatAttribute("y", (vehicleWidth - width) / 2);
        float y = element.getFloatAttribute("x", (vehicleHeight - height) / 2);
        Polygon polygon = new Polygon();
        polygon.setVertices(new float[] { width / 2, topHeight / 2, -width / 2, bottomHeight / 2, -width / 2,
                -bottomHeight / 2, width / 2, -topHeight / 2, });
        polygon.translate(x - (vehicleWidth - width) / 2, y - (vehicleHeight - height) / 2);
        return polygon;
    } else {
        throw new RuntimeException("Unknown shape type: " + element);
    }
}

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

License:Apache License

public static void parsePolygon(Polygon p, String s) {

    String[] vs = s.split(NUMBER_PARAM_SEPARATOR);

    if (vs.length < 6)
        return;// w w  w.  j a  v a 2s . c  o m

    float verts[] = new float[vs.length];

    for (int i = 0; i < vs.length; i++) {
        verts[i] = Float.parseFloat(vs[i]);
    }

    p.setVertices(verts);

}

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  w w  .  ja v a2s.  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   ww w .jav a2  s  . 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.model.ChapterDocument.java

License:Apache License

public void setBbox(Element e, Polygon p) {
    if (p == null) {
        p = new Polygon();

        float[] verts = new float[8];

        verts[0] = 0f;/* ww  w.  j ava2s. c  om*/
        verts[1] = 0f;
        verts[2] = 0f;
        verts[3] = 200;
        verts[4] = 200;
        verts[5] = 200;
        verts[6] = 200;
        verts[7] = 0f;

        p.setVertices(verts);
    }

    e.setAttribute(XMLConstants.BBOX_ATTR, Param.toStringParam(p));

    modified = true;
    firePropertyChange(XMLConstants.BBOX_ATTR, e);
}

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;/*ww w  . ja v a  2 s  .co m*/

    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();
}