Java 类com.badlogic.gdx.graphics.g2d.PolygonRegion 实例源码

项目:Catan    文件:SessionScreen.java   
/**
 * @param xCor left coordinate of intersection
 * @param yCor right coordinate of intersection
 * @return PolygonRegion of intersection piece which lies on intersection with coordinates xCor and yCor, null if no game piece lies on that space
 */
private PolygonRegion getIntersectionPiece(int xCor, int yCor) {

    for (PolygonRegion pr : villages) {
        float xV0 = pr.getVertices()[0];
        float yV0 = pr.getVertices()[1];

        float xPos = (xCor * BASE);
        float yPos = -1 * (yCor * LENGTH / 2);

        if (xV0 == xPos - PIECEBASE / 2.0 && yV0 == yPos - PIECEBASE / 2.0) {
            return pr;
        }
    }

    return null;
}
项目:Catan    文件:SessionScreen.java   
/**
 * @param xCorFirst  left coordinate of first intersection
 * @param yCorFirst  right coordinate of first intersection
 * @param xCorSecond left coordinate of second intersection
 * @param yCorSecond right coordinate of second intersection
 * @return PolygonRegion of edge piece which lies between (xCorFirst,yCorFirst) and (xCorSecond,yCorSecon), null if no game piece lies on that space
 */
private PolygonRegion getEdgePiece(int xCorFirst, int yCorFirst, int xCorSecond, int yCorSecond) {

    for (PolygonRegion pr : edgeUnits) {
        float xVM = pr.getVertices()[0];
        float yVM = pr.getVertices()[1];

        float xCorM = (float) (Math.min(xCorFirst, xCorSecond) + (Math.max(xCorFirst, xCorSecond) - Math.min(xCorFirst, xCorSecond)) / 2.0);
        float yCorM = (float) (Math.min(yCorFirst, yCorSecond) + (Math.max(yCorFirst, yCorSecond) - Math.min(yCorFirst, yCorSecond)) / 2.0);

        if (xVM == xCorM && yVM == yCorM) {
            return pr;
        }
    }
    return null;
}
项目:NoRiskNoFun    文件:GameObjectMap.java   
@Override
public void draw (Batch batch, float parentAlpha) {
    batch.end();

    Gdx.gl.glLineWidth(10);

    for (PolygonRegion region : polygonRegions) {

        this.batch.begin();
        this.batch.draw(region, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        this.batch.end();

        Polyline line = new Polyline(region.getVertices());
        line.setScale(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
        shapeRenderer.setProjectionMatrix(batch.getProjectionMatrix());
        shapeRenderer.setColor(Color.BROWN);
        shapeRenderer.polyline(line.getTransformedVertices());
        shapeRenderer.end();
    }

    batch.begin();
}
项目:gdx-cclibs    文件:Poly.java   
protected int apply (float[] vertices, int vertexStartingIndex, AttributeOffsets offsets, int vertexSize) {
    final PolygonRegion region = this.region;
    final TextureRegion tRegion = region.getRegion();
    if (!sizeSet && region != null) {
        width = tRegion.getRegionWidth();
        height = tRegion.getRegionHeight();
    }

    float color = this.color;
    for (int i = 0, v = vertexStartingIndex + offsets.color0; i < numVertices; i++, v += vertexSize) {
        vertices[v] = color;
    }

    float[] textureCoords = region.getTextureCoords();
    for (int i = 0, v = vertexStartingIndex
        + offsets.textureCoordinate0, n = textureCoords.length; i < n; i += 2, v += vertexSize) {
        vertices[v] = textureCoords[i];
        vertices[v + 1] = textureCoords[i + 1];
    }

    return 0; // handled by subclass
}
项目:RavTech    文件:RemoteEditLoadingScreen.java   
PolygonRegion createCircleRegion (float degrees) {
    final int steps = Math.abs((int)degrees);
    if (steps < 3) {
        return new PolygonRegion(new TextureRegion(emptyTexture), new float[0], new short[0]);
    }

    float[] vertecies = new float[steps * 2];
    vertecies[0] = 0;
    vertecies[1] = 0;

    for (int i = 2; i < (vertecies.length); i += 2) {
        float subDegrees = degrees * ((float)i - 2) / (vertecies.length - 4);
        vertecies[i] = (float)Math.cos(Math.toRadians(subDegrees));
        vertecies[i + 1] = (float)Math.sin(Math.toRadians(subDegrees));
    }

    short[] triangles = new short[(steps - 2) * 3];

    for (int i = 0; i < (steps - 2) * 3; i += 3) {
        triangles[i] = 0;
        triangles[i + 1] = (short)((i / 3) + 1);
        triangles[i + 2] = (short)((i / 3) + 2);
    }

    return new PolygonRegion(new TextureRegion(emptyTexture), vertecies, triangles);
}
项目:libgdxcn    文件:AssetManager.java   
/** Creates a new AssetManager with all default loaders. */
public AssetManager (FileHandleResolver resolver) {
    setLoader(BitmapFont.class, new BitmapFontLoader(resolver));
    setLoader(Music.class, new MusicLoader(resolver));
    setLoader(Pixmap.class, new PixmapLoader(resolver));
    setLoader(Sound.class, new SoundLoader(resolver));
    setLoader(TextureAtlas.class, new TextureAtlasLoader(resolver));
    setLoader(Texture.class, new TextureLoader(resolver));
    setLoader(Skin.class, new SkinLoader(resolver));
    setLoader(ParticleEffect.class, new ParticleEffectLoader(resolver));
    setLoader(PolygonRegion.class, new PolygonRegionLoader(resolver));
    setLoader(I18NBundle.class, new I18NBundleLoader(resolver));
    setLoader(Model.class, ".g3dj", new G3dModelLoader(new JsonReader(), resolver));
    setLoader(Model.class, ".g3db", new G3dModelLoader(new UBJsonReader(), resolver));
    setLoader(Model.class, ".obj", new ObjLoader(resolver));
    executor = new AsyncExecutor(1);
}
项目:libgdxcn    文件:PolygonRegionTest.java   
@Override
public void create () {
    texture = new Texture(Gdx.files.internal("data/tree.png"));

    PolygonRegionLoader loader = new PolygonRegionLoader();
    region = loader.load(new TextureRegion(texture), Gdx.files.internal("data/tree.psh"));

    // create a region from an arbitrary set of vertices (a triangle in this case)
    region2 = new PolygonRegion(new TextureRegion(texture), new float[] {0, 0, 100, 100, 0, 100}, new short[] {0, 1, 2});

    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.position.x = 0;
    camera.position.y = 0;

    batch = new PolygonSpriteBatch();
    debugRenderer = new PolygonRegionDebugRenderer();

    Gdx.input.setInputProcessor(this);
}
项目:Catan    文件:SessionScreen.java   
/**
 * removes polygon of village at given coordinates from the board
 *
 * @param xCor left coordinate of intersection
 * @param yCor right coordinate of intersection
 * @return true if a village was removed from the board
 */
private boolean removeVillage(int xCor, int yCor) {
    PolygonRegion village = getIntersectionPiece(xCor, yCor);
    if (village != null) {
        villages.remove(village);
        return true;
    }
    return false;
}
项目:Catan    文件:SessionScreen.java   
/**
 * renders the village with appropriate color and kind at the given position. If position is already occupied, the currently placed village will be removed and replaced
 *
 * @param position of intersection to update
 * @param color    of player who owns the new Village
 * @param kind     of new Village
 */
public void updateIntersection(CoordinatePair position, PlayerColor color, VillageKind kind) {

    int offsetX = position.getLeft();
    int offsetY = position.getRight();

    // Removes village on given coordinate
    removeVillage(offsetX, offsetY);

    PolygonRegion village = null;
    switch (kind) {
        case CITY:
            village = gamePieces.createCity(offsetX, offsetY, BASE, LENGTH, PIECEBASE, color);
            break;
        case SCIENCE_METROPOLIS:
            village = gamePieces.createMetropolis(offsetX, offsetY, BASE, LENGTH, PIECEBASE, kind);
            break;
        case SETTLEMENT:
            village = gamePieces.createSettlement(offsetX, offsetY, BASE, LENGTH, PIECEBASE, color);
            break;
        case TRADE_METROPOLIS:
            village = gamePieces.createMetropolis(offsetX, offsetY, BASE, LENGTH, PIECEBASE, kind);
            break;
        case POLITICS_METROPOLIS:
            village = gamePieces.createMetropolis(offsetX, offsetY, BASE, LENGTH, PIECEBASE, kind);
            break;
        default:
            break;
    }
    if (village != null)
        villages.add(village);
}
项目:Catan    文件:SessionScreen.java   
/**
 * renders the road with appropriate color and position. If edge is already occupied, it removes current edge piece and replaces it with this one
 *
 * @param firstCoordinate  end point of edge
 * @param secondCoordinate other end point of edge
 * @param kind             of new edge unit (SHIP or ROAD)
 * @param color            of player who owns the new edge unit
 */
public void updateEdge(CoordinatePair firstCoordinate, CoordinatePair secondCoordinate, EdgeUnitKind kind, PlayerColor color) {
    if (firstCoordinate == null || secondCoordinate == null) {
        return;
    }

    int xCorFirst = firstCoordinate.getLeft();
    int yCorFirst = firstCoordinate.getRight();
    int xCorSecond = secondCoordinate.getLeft();
    int yCorSecond = secondCoordinate.getRight();

    System.out.println("Road placed at " + firstCoordinate + " " + secondCoordinate);

    // removes edge on given coordinate
    removeEdgeUnit(xCorFirst, yCorFirst, xCorSecond, yCorSecond);

    PolygonRegion edgeUnit = null;
    switch (kind) {
        case ROAD:
            edgeUnit = gamePieces.createRoad(xCorFirst, yCorFirst, xCorSecond, yCorSecond, BASE, LENGTH, PIECEBASE, color);
            break;
        case SHIP:
            edgeUnit = gamePieces.createShip(xCorFirst, yCorFirst, xCorSecond, yCorSecond, BASE, LENGTH, PIECEBASE, color);
            break;
        default:
            break;
    }
    if (edgeUnit != null)
        edgeUnits.add(edgeUnit);
}
项目:NoRiskNoFun    文件:GameScene.java   
/**
 * Re-color a given region
 * @param color New Color for the Region
 * @param region Region to re-color
 */
private void setRegionColor(Color color, AssetMap.Region region) {
    Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
    pix.setColor(color);
    pix.fill();

    Texture regionTexture = new Texture(pix);
    PolygonRegion polygonRegion = regionMap.get(region);
    polygonRegion.getRegion().setTexture(regionTexture);
}
项目:NoRiskNoFun    文件:GameObjectMap.java   
private void initPolygonRegions() {

        polygonRegions = new ArrayList<>(assetMap.getRegions().size());


        for (AssetMap.Region region : assetMap.getRegions()) {
            PolygonRegion polyReg = new PolygonRegion(new TextureRegion(texture),
                    region.getVertices(),
                    new EarClippingTriangulator().computeTriangles(region.getVertices()).toArray());

            regionMap.put(region, polyReg);
            regionNameMap.put(region.getName(), region);
            polygonRegions.add(polyReg);
        }
    }
项目:gdx-cclibs    文件:Poly2D.java   
@Override
protected int apply (float[] vertices, int vertexStartingIndex, AttributeOffsets offsets, int vertexSize) {
    super.apply(vertices, vertexStartingIndex, offsets, vertexSize);
    final PolygonRegion region = this.region;
    final TextureRegion tRegion = region.getRegion();

    final float originX = this.originX;
    final float originY = this.originY;
    final float scaleX = this.scaleX;
    final float scaleY = this.scaleY;
    final float[] regionVertices = region.getVertices();

    final float worldOriginX = x + originX;
    final float worldOriginY = y + originY;
    final float sX = width / tRegion.getRegionWidth();
    final float sY = height / tRegion.getRegionHeight();
    final float cos = MathUtils.cosDeg(rotation);
    final float sin = MathUtils.sinDeg(rotation);

    float fx, fy;
    for (int i = 0, v = vertexStartingIndex + offsets.position, n = regionVertices.length; i < n; i += 2, v += vertexSize) {
        fx = (regionVertices[i] * sX - originX) * scaleX;
        fy = (regionVertices[i + 1] * sY - originY) * scaleY;
        vertices[v] = cos * fx - sin * fy + worldOriginX;
        vertices[v + 1] = sin * fx + cos * fy + worldOriginY;
    }

    return numVertices;
}
项目:SSTrain    文件:WorldRenderer.java   
private void drawHoldBeam(Vector2 from, Vector2 to, float orgSize, float dstSize) {
    Vector2 delta = from.cpy().sub(to);

    float w = Math.max(orgSize, dstSize);
    float h = delta.len();

    float tw = holdBG.getRegionWidth();
    float th = holdBG.getRegionHeight();

    float factorScale = (tw / w) * 0.5f;
    float topFactor = Math.max(dstSize - orgSize, 0f) * factorScale;
    float botFactor = Math.max(orgSize - dstSize, 0f) * factorScale;

    float[] points = {
            topFactor,
            0f,

            botFactor,
            th,

            tw - botFactor,
            th,

            tw - topFactor,
            0f
    };

    PolygonRegion clamped = new PolygonRegion(holdBG, points, triangles);
    spriteBatch.draw(clamped, from.x - w * 0.5f, from.y, w * 0.5f, 0f, w, h, 1f, 1f, delta.angle() + 90);
}
项目:SIFTrain    文件:WorldRenderer.java   
private void drawHoldBeam(Vector2 from, Vector2 to, float orgSize, float dstSize) {
    Vector2 delta = from.cpy().sub(to);

    float w = Math.max(orgSize, dstSize);
    float h = delta.len();

    float tw = holdBG.getRegionWidth();
    float th = holdBG.getRegionHeight();

    float factorScale = (tw / w) * 0.5f;
    float topFactor = Math.max(dstSize - orgSize, 0f) * factorScale;
    float botFactor = Math.max(orgSize - dstSize, 0f) * factorScale;

    float[] points = {
            topFactor,
            0f,

            botFactor,
            th,

            tw - botFactor,
            th,

            tw - topFactor,
            0f
    };

    PolygonRegion clamped = new PolygonRegion(holdBG, points, triangles);
    spriteBatch.draw(clamped, from.x - w * 0.5f, from.y, w * 0.5f, 0f, w, h, 1f, 1f, delta.angle() + 90);
}
项目:RubeLoader    文件:PolySpatial.java   
public PolySpatial(PolygonRegion region, Body body, Color color)
{
    this(region,color);
    mBody = body;
    mTmp.set(mBody.getPosition());
    mSprite.setOrigin(0, 0);
}
项目:RubeLoader    文件:PolySpatial.java   
public PolySpatial(PolygonRegion region, Body body, Color color)
{
    this(region,color);
    mBody = body;
    mTmp.set(mBody.getPosition());
    mSprite.setOrigin(0, 0);
}
项目:NoRiskNoFun    文件:GameObjectMap.java   
public Map<AssetMap.Region, PolygonRegion> getRegionMap() {
    return regionMap;
}
项目:NoRiskNoFun    文件:GameObjectMap.java   
public List<PolygonRegion> getPolygonRegions() {
    return polygonRegions;
}
项目:fabulae    文件:FilledPolygonRenderer.java   
protected PolygonRegion createdPolygonRegion(TextureRegion pixel, float[] vertices) {
    return new PolygonRegion(pixel, vertices,
            new EarClippingTriangulator().computeTriangles(vertices)
            .toArray());
}
项目:RavTech    文件:RemoteEditLoadingScreen.java   
@Override
public void render (float delta) {
    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    PolygonRegion outerRegion = createCircleRegion(percentage % 2 < 1 ? (percentage % 1) * 360 : 1 * 360);
    PolygonRegion innerRegion = createCircleRegion(percentage % 2 > 1 ? (percentage % 1) * 360 : 0);

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.viewportWidth = Gdx.graphics.getWidth();
    camera.viewportHeight = Gdx.graphics.getHeight();
    camera.update();

    final int ringRadius = 200;
    final int innerRingRadius = 180;
    final int innerRingWidth = 20;
    final Color outerColor = new Color(0.97f, 0.44f, 0f, 1f);
    final Color innerColor = Color.WHITE;

    String percentageString = (Math.round((((float)percentage % 1)) * 10)) * 10 + "%";

    polygonBatch.setProjectionMatrix(camera.combined);
    polygonBatch.begin();

    polygonBatch.setColor(outerColor);
    polygonBatch.draw(outerRegion, 0, 0, ringRadius, ringRadius);

    polygonBatch.setColor(innerColor);
    polygonBatch.draw(innerRegion, 0, 0, innerRingRadius, innerRingRadius);

    polygonBatch.setColor(outerColor);
    polygonBatch.draw(innerRegion, 0, 0, innerRingRadius - innerRingWidth, innerRingRadius - innerRingWidth);

    font.setColor(innerColor);
    font.getData().setScale(1f);
    font.setColor(Color.WHITE);
    drawStringCentered(polygonBatch, 0, 0, percentageString);

    font.getData().setScale(1f);
    font.setColor(Color.GRAY);
    drawStringCentered(polygonBatch, 0, -300, percentage % 2 < 1 ? "Fetching Assets..." : "Recieving Game State...");

    polygonBatch.end();
}
项目:ead    文件:TexturedShapeEditor.java   
@Override
public void create() {
    super.create();

    executor = new AsyncExecutor(1);

    // create a string of generally-overlapping polygons, will draw in
    // blue
    GeoTester.randomPolys(3, 40, 80, new Vector2(100, 300), blue);
    float s = 10;
    Polygon p0 = new Polygon(new float[] {
            // north-west, low, north-east
            0, 3 * s, 0, 2 * s, 2 * s, 0, 3 * s, 0, 4.5f * s, 2 * s, 6 * s,
            0, 7 * s, 0, 9 * s, 2 * s, 9 * s, 3 * s,
            // north-east, high, north-west
            8 * s, 3 * s, 6.5f * s, 1 * s, 5 * s, 3 * s, 4 * s, 3 * s,
            2.5f * s, s, 1 * s, 3 * s });
    blue.add(p0);
    // merge them into a single polygon, will draw in red
    for (Polygon bp : blue) {
        GeometryUtils.merge(geo, bp);
    }
    Geometry collapsed = GeometryUtils.collapse(geo);
    Polygon p = GeometryUtils.jtsCoordsToGdx(collapsed.getCoordinates());
    red.add(p);

    triangles = GeometryUtils.triangulate(collapsed);
    Gdx.app.error("GeoTester", "ready to display triangles worth "
            + triangles.length + " vertices");

    // use the polygon to clip a randomly-generated texture
    textureSolid = new Texture(GeoTester.randomPixmap(100, 100, null),
            false);

    PolygonRegion polyReg = new PolygonRegion(new TextureRegion(
            textureSolid), p.getVertices(), triangles);
    poly = new PolygonSprite(polyReg);
    poly.setOrigin(p.getVertices()[0], p.getVertices()[1]);
    polyBatch = new PolygonSpriteBatch();

    // prepare rendering aids
    shapeRenderer = new ShapeRenderer();

    Gdx.input.setInputProcessor(this);
}
项目:RubeLoader    文件:PolySpatial.java   
public PolySpatial(PolygonRegion region, Color color) {
    mSprite = new PolygonSprite(region);
    mSprite.setColor(color);
    mSprite.setSize(region.getRegion().getRegionWidth()/PIXELS_PER_METER,region.getRegion().getRegionHeight()/PIXELS_PER_METER);
}
项目:RubeLoader    文件:PolySpatial.java   
public PolySpatial(PolygonRegion region, Color color) {
    mSprite = new PolygonSprite(region);
    mSprite.setColor(color);
    mSprite.setSize(region.getRegion().getRegionWidth()/PIXELS_PER_METER,region.getRegion().getRegionHeight()/PIXELS_PER_METER);
}
项目:Catan    文件:SessionScreen.java   
/**
 * removes polygon of edge unit at given coordinates from the board
 *
 * @param xCorFirst  left coordinate of first intersection
 * @param yCorFirst  right coordinate of first intersection
 * @param xCorSecond left coordinate of second intersection
 * @param yCorSecond right coordinate of second intersection
 * @return true if an edge unit was removed from the board
 */
public boolean removeEdgeUnit(int xCorFirst, int yCorFirst, int xCorSecond, int yCorSecond) {
    PolygonRegion edgePiece = getEdgePiece(xCorFirst, yCorFirst, xCorSecond, yCorSecond);
    if (edgePiece != null) {
        edgeUnits.remove(edgePiece);
        return true;
    }
    return false;
}