List of usage examples for com.badlogic.gdx.math Polygon setVertices
public void setVertices(float[] vertices)
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(); }