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