Search in sources :

Example 1 with Polygon

use of com.badlogic.gdx.math.Polygon in project libgdx by libgdx.

the class TiledMapObjectLoadingTest method render.

@Override
public void render() {
    Gdx.gl.glClearColor(0.55f, 0.55f, 0.55f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();
    shapeRenderer.setProjectionMatrix(camera.combined);
    batch.setProjectionMatrix(camera.combined);
    shapeRenderer.setColor(Color.BLUE);
    Gdx.gl20.glLineWidth(2);
    MapLayer layer = map.getLayers().get("Objects");
    AnimatedTiledMapTile.updateAnimationBaseTime();
    for (MapObject mapObject : layer.getObjects()) {
        if (mapObject instanceof TiledMapTileMapObject) {
            batch.begin();
            TiledMapTileMapObject tmtObject = (TiledMapTileMapObject) mapObject;
            TextureRegion textureRegion = tmtObject.getTile().getTextureRegion();
            // TilEd rotation is clockwise, we need counter-clockwise.
            float rotation = -tmtObject.getRotation();
            float scaleX = tmtObject.getScaleX();
            float scaleY = tmtObject.getScaleY();
            float xPos = tmtObject.getX();
            float yPos = tmtObject.getY();
            textureRegion.flip(tmtObject.isFlipHorizontally(), tmtObject.isFlipVertically());
            batch.draw(textureRegion, xPos, yPos, tmtObject.getOriginX() * scaleX, tmtObject.getOriginY() * scaleY, textureRegion.getRegionWidth() * scaleX, textureRegion.getRegionHeight() * scaleY, 1f, 1f, rotation);
            // We flip back to the original state.
            textureRegion.flip(tmtObject.isFlipHorizontally(), tmtObject.isFlipVertically());
            batch.end();
        } else if (mapObject instanceof EllipseMapObject) {
            shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
            Ellipse ellipse = ((EllipseMapObject) mapObject).getEllipse();
            shapeRenderer.ellipse(ellipse.x, ellipse.y, ellipse.width, ellipse.height);
            shapeRenderer.end();
        } else if (mapObject instanceof RectangleMapObject) {
            shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
            Rectangle rectangle = ((RectangleMapObject) mapObject).getRectangle();
            shapeRenderer.rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
            shapeRenderer.end();
        } else if (mapObject instanceof PolygonMapObject) {
            shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
            Polygon polygon = ((PolygonMapObject) mapObject).getPolygon();
            shapeRenderer.polygon(polygon.getTransformedVertices());
            shapeRenderer.end();
        }
    }
    batch.begin();
    font.draw(batch, "FPS: " + Gdx.graphics.getFramesPerSecond(), 10, 20);
    batch.end();
}
Also used : TextureRegion(com.badlogic.gdx.graphics.g2d.TextureRegion) PolygonMapObject(com.badlogic.gdx.maps.objects.PolygonMapObject) Ellipse(com.badlogic.gdx.math.Ellipse) RectangleMapObject(com.badlogic.gdx.maps.objects.RectangleMapObject) MapLayer(com.badlogic.gdx.maps.MapLayer) EllipseMapObject(com.badlogic.gdx.maps.objects.EllipseMapObject) Rectangle(com.badlogic.gdx.math.Rectangle) TiledMapTileMapObject(com.badlogic.gdx.maps.tiled.objects.TiledMapTileMapObject) Polygon(com.badlogic.gdx.math.Polygon) MapObject(com.badlogic.gdx.maps.MapObject) TextureMapObject(com.badlogic.gdx.maps.objects.TextureMapObject) EllipseMapObject(com.badlogic.gdx.maps.objects.EllipseMapObject) TiledMapTileMapObject(com.badlogic.gdx.maps.tiled.objects.TiledMapTileMapObject) RectangleMapObject(com.badlogic.gdx.maps.objects.RectangleMapObject) PolygonMapObject(com.badlogic.gdx.maps.objects.PolygonMapObject)

Example 2 with Polygon

use of com.badlogic.gdx.math.Polygon in project bladecoder-adventure-engine by bladecoder.

the class PolygonalNavGraph method findPath.

public ArrayList<Vector2> findPath(float sx, float sy, float tx, float ty) {
    resultPath.clear();
    Vector2 source = new Vector2(sx, sy);
    Vector2 target = new Vector2(tx, ty);
    // back inside.
    if (!PolygonUtils.isPointInside(walkZone, sx, sy, true)) {
        EngineLogger.debug("PolygonalPathFinder: Source not in polygon!");
        PolygonUtils.getClampedPoint(walkZone, sx, sy, source);
        if (!PolygonUtils.isPointInside(walkZone, source.x, source.y, true)) {
            EngineLogger.debug("PolygonalPathFinder: CLAMPED FAILED!!");
            return resultPath.getPath();
        }
    }
    if (!PolygonUtils.isPointInside(walkZone, tx, ty, true)) {
        PolygonUtils.getClampedPoint(walkZone, tx, ty, target);
        if (!PolygonUtils.isPointInside(walkZone, target.x, target.y, true)) {
            EngineLogger.debug("PolygonalPathFinder: CLAMPED FAILED!!");
            return resultPath.getPath();
        }
    }
    for (Polygon o : obstacles) {
        if (PolygonUtils.isPointInside(o, target.x, target.y, false)) {
            PolygonUtils.getClampedPoint(o, target.x, target.y, target);
            // we search for the first vertex inside
            if (!PolygonUtils.isPointInside(walkZone, target.x, target.y, true)) {
                getFirstVertexInsideWalkzone(o, target);
                // Overlaped obstacles are not supported
                break;
            }
        }
    }
    // they are, there’s no need for pathfinding, just walk there!
    if (inLineOfSight(source.x, source.y, target.x, target.y)) {
        EngineLogger.debug("PolygonalPathFinder: Direct path found");
        resultPath.getPath().add(source);
        resultPath.getPath().add(target);
        return resultPath.getPath();
    }
    // 3. Otherwise, add the start and end points of your path as new
    // temporary nodes to the graph.
    // AND Connect them to every other node that they can see on the graph.
    addStartEndNodes(source.x, source.y, target.x, target.y);
    // 5. Run your A* implementation on the graph to get your path. This
    // path is guaranteed to be as direct as possible!
    pathfinder.findPath(null, startNode, targetNode, resultPath);
    return resultPath.getPath();
}
Also used : Vector2(com.badlogic.gdx.math.Vector2) Polygon(com.badlogic.gdx.math.Polygon)

Example 3 with Polygon

use of com.badlogic.gdx.math.Polygon in project bladecoder-adventure-engine by bladecoder.

the class PolygonalNavGraph method inLineOfSight.

private boolean inLineOfSight(float p1X, float p1Y, float p2X, float p2Y) {
    tmp.set(p1X, p1Y);
    tmp2.set(p2X, p2Y);
    if (!PolygonUtils.inLineOfSight(tmp, tmp2, walkZone, false)) {
        return false;
    }
    for (Polygon o : obstacles) {
        if (!PolygonUtils.inLineOfSight(tmp, tmp2, o, true)) {
            return false;
        }
    }
    return true;
}
Also used : Polygon(com.badlogic.gdx.math.Polygon)

Example 4 with Polygon

use of com.badlogic.gdx.math.Polygon in project bladecoder-adventure-engine by bladecoder.

the class PolygonalNavGraph method write.

@Override
public void write(Json json) {
    PolygonUtils.ensureClockWise(walkZone.getVertices(), 0, walkZone.getVertices().length);
    walkZone.dirty();
    Polygon p = new Polygon(walkZone.getVertices());
    p.setPosition(walkZone.getX() / walkZone.getScaleX(), walkZone.getY() / walkZone.getScaleY());
    json.writeValue("walkZone", p);
}
Also used : Polygon(com.badlogic.gdx.math.Polygon)

Example 5 with Polygon

use of com.badlogic.gdx.math.Polygon in project bladecoder-adventure-engine by bladecoder.

the class EditActorDialog method inputsToModel.

@Override
protected void inputsToModel(boolean create) {
    String type = typePanel.getText();
    boolean typeChanged = false;
    BaseActor oldElement = e;
    String oldId = null;
    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);
        oldId = e.getId();
    }
    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) {
        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);
            }
        }
        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()));
    Vector2 p = Param.parseVector2(pos.getText());
    e.setPosition(p.x, p.y);
    if (e instanceof InteractiveActor) {
        InteractiveActor ia = (InteractiveActor) e;
        ia.setLayer(layer.getText());
        ia.setInteraction(Boolean.parseBoolean(interaction.getText()));
        Vector2 rp = Param.parseVector2(refPoint.getText());
        ia.setRefPoint(rp.x, rp.y);
        String key = ia.getDesc();
        if (key == null || key.isEmpty() || key.charAt(0) != I18N.PREFIX || !e.getId().equals(oldId))
            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.PARTICLE_RENDERER_STRING.equals(rendererType)) {
                ParticleRenderer r;
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof ParticleRenderer)) {
                    r = new ParticleRenderer();
                    sa.setRenderer(r);
                } else {
                    r = (ParticleRenderer) sa.getRenderer();
                }
                r.setParticleName(particleName.getText());
                r.setAtlasName(particleAtlas.getText());
            } else if (Project.TEXT_RENDERER_STRING.equals(rendererType)) {
                TextRenderer r;
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof TextRenderer)) {
                    r = new TextRenderer();
                    sa.setRenderer(r);
                } else {
                    r = (TextRenderer) sa.getRenderer();
                }
                key = text.getText();
                if (key == null || key.isEmpty() || key.charAt(0) != I18N.PREFIX || !e.getId().equals(oldId))
                    key = Ctx.project.getI18N().genKey(parent.getId(), e.getId(), "text");
                Ctx.project.getI18N().setTranslation(key, text.getText());
                if (text.getText() != null)
                    r.setText(key, text.getText());
                else
                    r.setText(null, null);
                r.setFontSize(Integer.parseInt(size.getText()));
                r.setFontName(font.getText());
                r.setAlign(AlignUtils.getAlign(textAlign.getText()));
                r.setBorderWidth(Integer.parseInt(borderWidth.getText()));
                r.setBorderColor(Param.parseColor(borderColor.getText()));
                r.setBorderStraight(Boolean.parseBoolean(borderStraight.getText()));
                r.setShadowOffsetX(Integer.parseInt(shadowOffsetX.getText()));
                r.setShadowOffsetY(Integer.parseInt(shadowOffsetY.getText()));
                r.setShadowColor(Param.parseColor(shadowColor.getText()));
                // dispose to force reload the text attributes
                sa.dispose();
            } else if (Project.SPINE_RENDERER_STRING.equals(rendererType)) {
                SpineRenderer r;
                if (sa.getRenderer() == null || !(sa.getRenderer() instanceof SpineRenderer)) {
                    r = new SpineRenderer();
                    sa.setRenderer(r);
                } else {
                    r = (SpineRenderer) sa.getRenderer();
                }
                r.setSkin(spineSkin.getText());
            }
            boolean bbfr = Boolean.parseBoolean(bboxFromRenderer.getText());
            if (bbfr != sa.isBboxFromRenderer())
                sa.setBboxFromRenderer(bbfr);
            sa.setFakeDepth(Boolean.parseBoolean(fakeDepth.getText()));
            sa.setScale(Float.parseFloat(scale.getText()));
            sa.setRot(Float.parseFloat(rot.getText()));
            sa.getRenderer().setOrgAlign(AlignUtils.getAlign(orgAlign.getText()));
            sa.setTint(Param.parseColor(tint.getText()));
            if (e instanceof CharacterActor) {
                CharacterActor ca = (CharacterActor) e;
                ca.setWalkingSpeed(Float.parseFloat(walkingSpeed.getText()));
                ca.setTextColor(Param.parseColor(textColor.getText()));
                ca.setTextStyle(textStyle.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();
}
Also used : AtlasRenderer(com.bladecoder.engine.model.AtlasRenderer) SceneLayer(com.bladecoder.engine.model.SceneLayer) InteractiveActor(com.bladecoder.engine.model.InteractiveActor) ParticleRenderer(com.bladecoder.engine.model.ParticleRenderer) SpineRenderer(com.bladecoder.engine.spine.SpineRenderer) CharacterActor(com.bladecoder.engine.model.CharacterActor) AnchorActor(com.bladecoder.engine.model.AnchorActor) ImageRenderer(com.bladecoder.engine.model.ImageRenderer) ObstacleActor(com.bladecoder.engine.model.ObstacleActor) Vector2(com.badlogic.gdx.math.Vector2) Verb(com.bladecoder.engine.model.Verb) Sprite3DRenderer(com.bladecoder.engine.model.Sprite3DRenderer) BaseActor(com.bladecoder.engine.model.BaseActor) SpriteActor(com.bladecoder.engine.model.SpriteActor) Polygon(com.badlogic.gdx.math.Polygon) TextRenderer(com.bladecoder.engine.model.TextRenderer)

Aggregations

Polygon (com.badlogic.gdx.math.Polygon)17 Vector2 (com.badlogic.gdx.math.Vector2)7 BaseActor (com.bladecoder.engine.model.BaseActor)7 InteractiveActor (com.bladecoder.engine.model.InteractiveActor)6 AnchorActor (com.bladecoder.engine.model.AnchorActor)5 Rectangle (com.badlogic.gdx.math.Rectangle)4 SpriteActor (com.bladecoder.engine.model.SpriteActor)4 ObstacleActor (com.bladecoder.engine.model.ObstacleActor)3 Scene (com.bladecoder.engine.model.Scene)3 BitmapFont (com.badlogic.gdx.graphics.g2d.BitmapFont)2 TextureRegion (com.badlogic.gdx.graphics.g2d.TextureRegion)2 MapObject (com.badlogic.gdx.maps.MapObject)2 EllipseMapObject (com.badlogic.gdx.maps.objects.EllipseMapObject)2 PolygonMapObject (com.badlogic.gdx.maps.objects.PolygonMapObject)2 RectangleMapObject (com.badlogic.gdx.maps.objects.RectangleMapObject)2 TiledMapTileMapObject (com.badlogic.gdx.maps.tiled.objects.TiledMapTileMapObject)2 Drawable (com.badlogic.gdx.scenes.scene2d.utils.Drawable)2 World (com.bladecoder.engine.model.World)2 MapLayer (com.badlogic.gdx.maps.MapLayer)1 PolylineMapObject (com.badlogic.gdx.maps.objects.PolylineMapObject)1