Example usage for com.badlogic.gdx.utils.async AsyncTask AsyncTask

List of usage examples for com.badlogic.gdx.utils.async AsyncTask AsyncTask

Introduction

In this page you can find the example usage for com.badlogic.gdx.utils.async AsyncTask AsyncTask.

Prototype

AsyncTask

Source Link

Usage

From source file:es.eucm.ead.editor.utils.ShapeEditor.java

License:Open Source License

@Override
public void render() {
    super.render();
    renderPolygonShapes(blue, Color.BLUE, 0, 0);
    renderPolygonShapes(red, Color.RED, 0, 0);

    Array<Polygon> a = new Array<Polygon>();
    a.add(GeometryUtils.createPoly(polySides, polySize, new Vector2(lastX, lastY)));
    renderPolygonShapes(a, Color.DARK_GRAY, 0, 0);

    if (Gdx.input.isTouched()) {
        int mouseX = Gdx.input.getX();
        int mouseY = height - Gdx.input.getY();
        if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)) {
            pendingMerges.offer(GeometryUtils.createPoly(polySides, polySize, new Vector2(mouseX, mouseY)));
        } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) {
            pendingRemoves.offer(GeometryUtils.createPoly(polySides, polySize, new Vector2(mouseX, mouseY)));
        }//from ww w . jav a2  s.co m
    }

    if (updatedGeometry != null && updatedGeometry.isDone()) {
        Gdx.app.error("GeoTester", "merging in...");
        red.clear();
        for (Geometry g : updatedGeometry.get()) {
            red.add(GeometryUtils.jtsCoordsToGdx(g.getCoordinates()));
        }
        geo.clear();
        geo.addAll(updatedGeometry.get());
        updatedGeometry = null;
    } else if (!pendingMerges.isEmpty() && updatedGeometry == null) {
        updatedGeometry = executor.submit(new AsyncTask<Array<Geometry>>() {
            @Override
            public Array<Geometry> call() throws Exception {
                Array<Geometry> ga = new Array<Geometry>();
                for (Geometry g : geo) {
                    ga.add((Geometry) g.clone());
                }
                while (!pendingMerges.isEmpty()) {
                    GeometryUtils.merge(ga, pendingMerges.poll());
                }
                if (GeoTester.r(0, 10) < 4) {
                    GeometryUtils.simplify(ga, 5);
                }
                return ga;
            }
        });
    } else if (!pendingRemoves.isEmpty() && updatedGeometry == null) {
        updatedGeometry = executor.submit(new AsyncTask<Array<Geometry>>() {
            @Override
            public Array<Geometry> call() throws Exception {
                Array<Geometry> ga = new Array<Geometry>();
                for (Geometry g : geo) {
                    ga.add((Geometry) g.clone());
                }
                while (!pendingRemoves.isEmpty()) {
                    GeometryUtils.subtract(ga, pendingRemoves.poll());
                }
                if (GeoTester.r(0, 10) < 4) {
                    GeometryUtils.simplify(ga, 5);
                }
                return ga;
            }
        });
    }
}

From source file:es.eucm.ead.editor.utils.TexturedShapeEditor.java

License:Open Source License

@Override
public void render() {
    super.render();
    renderPolygonSprite();/*  ww  w  .  ja va 2 s . c o m*/

    renderTriangles(red.get(0), triangles);
    renderPolygonShapes(blue, Color.BLUE, 0, 0);
    renderPolygonShapes(red, Color.RED, 0, 0);

    Array<Polygon> a = new Array<Polygon>();
    a.add(GeometryUtils.createPoly(6, polySize, new Vector2(lastX, lastY)));
    renderPolygonShapes(a, Color.DARK_GRAY, 0, 0);

    if (Gdx.input.isTouched()) {
        int mouseX = Gdx.input.getX();
        int mouseY = height - Gdx.input.getY();
        if (Gdx.input.isButtonPressed(Input.Buttons.LEFT)) {
            pendingMerges.offer(GeometryUtils.createPoly(6, polySize, new Vector2(mouseX, mouseY)));
        } else if (Gdx.input.isButtonPressed(Input.Buttons.RIGHT)) {
            pendingRemoves.offer(GeometryUtils.createPoly(6, polySize, new Vector2(mouseX, mouseY)));
        }
    }

    if (updatedRegion != null && updatedRegion.isDone()) {
        Gdx.app.error("GeoTester", "merging in...");
        poly.setRegion(updatedRegion.get());
        triangles = updatedRegion.get().getTriangles();
        red.clear();
        red.add(new Polygon(updatedRegion.get().getVertices()));
        updatedRegion = null;
    } else if (!pendingMerges.isEmpty() && updatedRegion == null) {
        updatedRegion = executor.submit(new AsyncTask<PolygonRegion>() {
            @Override
            public PolygonRegion call() throws Exception {
                long t0 = System.nanoTime();
                while (!pendingMerges.isEmpty()) {
                    GeometryUtils.merge(geo, pendingMerges.poll());
                }
                Geometry collapsed = GeometryUtils.collapse(geo);
                GeometryUtils.simplify(geo, 3);
                Polygon p = GeometryUtils.jtsCoordsToGdx(collapsed.getCoordinates());
                short[] ts = GeometryUtils.triangulate(collapsed);
                PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid), p.getVertices(), ts);
                long t1 = System.nanoTime() - t0;
                Gdx.app.error("GeoTester", "ready to display triangles worth " + ts.length
                        + " vertices after merge in " + (t1 / 1000000) + " ms");
                return polyReg;
            }
        });
    } else if (!pendingRemoves.isEmpty() && updatedRegion == null) {
        updatedRegion = executor.submit(new AsyncTask<PolygonRegion>() {
            @Override
            public PolygonRegion call() throws Exception {
                long t0 = System.nanoTime();
                while (!pendingRemoves.isEmpty()) {
                    GeometryUtils.subtract(geo, pendingRemoves.poll());
                }
                Geometry collapsed = GeometryUtils.collapse(geo);
                if (GeoTester.r(0, 10) < 4) {
                    GeometryUtils.simplify(geo, 3);
                }
                Polygon p = GeometryUtils.jtsCoordsToGdx(collapsed.getCoordinates());
                short[] ts = GeometryUtils.triangulate(collapsed);
                PolygonRegion polyReg = new PolygonRegion(new TextureRegion(textureSolid), p.getVertices(), ts);
                long t1 = System.nanoTime() - t0;
                Gdx.app.error("GeoTester", "ready to display triangles worth " + ts.length
                        + " vertices after removal in " + (t1 / 1000000) + " ms");
                return polyReg;
            }
        });
    }
}