Android Open Source - gameengine Shape Drawer






From Project

Back to project page gameengine.

License

The source code is released under:

Apache License

If you think the Android project gameengine listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.garrapeta.gameengine;
/*from  w  w w .  j a va2s .  co m*/
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Path;

import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.ChainShape;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.EdgeShape;
import com.badlogic.gdx.physics.box2d.PolygonShape;
import com.badlogic.gdx.physics.box2d.Shape;

public class ShapeDrawer {

    // -------------------------------------------------- Static vars

    static final Paint sPaint = new Paint();

    // -------------------------------------------------- Constantes

    private final static int DEFAULT_CIRCLE_STROKE_COLOR = Color.argb(0xFF, 0xFF, 0, 0);
    private final static int DEFAULT_CIRCLE_FILL_COLOR = Color.argb(0x40, 0xFF, 0, 0);
    private final static int DEFAULT_CIRCLE_LINE_COLOR = Color.GRAY;

    private final static int DEFAULT_EDGE_STROKE_COLOR = Color.YELLOW;
    private final static int DEFAULT_EDGE_FILL_COLOR = Color.TRANSPARENT;
    private final static int DEFAULT_EDGE_LINE_COLOR = Color.TRANSPARENT;

    private final static int DEFAULT_POLYGON_STROKE_COLOR = Color.argb(0xFF, 0, 0, 0xFF);
    private final static int DEFAULT_POLYGON_FILL_COLOR = Color.argb(0x40, 0, 0, 0xFF);
    private final static int DEFAULT_POLYGON_LINE_COLOR = Color.GRAY;

    private final static int DEFAULT_CHAIN_STROKE_COLOR = Color.GREEN;
    private final static int DEFAULT_CHAIN_FILL_COLOR = Color.TRANSPARENT;
    private final static int DEFAULT_CHAIN_LINE_COLOR = Color.GRAY;

    public static void draw(Canvas canvas, Viewport viewport, Shape shape) {
        int strokeColor;
        int fillColor;
        int lineColor;

        switch (shape.getType()) {
        case Circle:
            strokeColor = DEFAULT_CIRCLE_STROKE_COLOR;
            fillColor = DEFAULT_CIRCLE_FILL_COLOR;
            lineColor = DEFAULT_CIRCLE_LINE_COLOR;
            break;

        case Polygon:
            strokeColor = DEFAULT_POLYGON_STROKE_COLOR;
            fillColor = DEFAULT_POLYGON_FILL_COLOR;
            lineColor = DEFAULT_POLYGON_LINE_COLOR;
            break;

        case Edge:
            strokeColor = DEFAULT_EDGE_STROKE_COLOR;
            fillColor = DEFAULT_EDGE_FILL_COLOR;
            lineColor = DEFAULT_EDGE_LINE_COLOR;
            break;

        case Chain:
            strokeColor = DEFAULT_CHAIN_STROKE_COLOR;
            fillColor = DEFAULT_CHAIN_FILL_COLOR;
            lineColor = DEFAULT_CHAIN_LINE_COLOR;
            break;

        default:
            throw new IllegalArgumentException("Can not get default color for shape: " + shape);
        }

        draw(canvas, sPaint, viewport, shape, strokeColor, fillColor, lineColor);
    }

    public static void draw(Canvas canvas, Paint paint, Viewport viewport, Shape shape, int strokeColor, int fillColor, int lineColor) {
        switch (shape.getType()) {
        case Circle:
            drawCircleShape(canvas, viewport, paint, (CircleShape) shape, strokeColor, fillColor, lineColor);
            break;
        case Polygon:
            drawPolygonShape(canvas, viewport, paint, (PolygonShape) shape, strokeColor, fillColor, lineColor);
            break;
        case Edge:
            drawEdgeShape(canvas, paint, viewport, (EdgeShape) shape, strokeColor, fillColor, lineColor);
            break;
        case Chain:
            drawChainShape(canvas, paint, viewport, (ChainShape) shape, strokeColor, fillColor, lineColor);
            break;
        default:
            throw new IllegalArgumentException("Can not draw shape: " + shape);
        }
    }

    private static void drawCircleShape(Canvas canvas, Viewport viewport, Paint paint, CircleShape circleShape, int strokeColor, int fillColor, int lineColor) {
        float screenRadius = viewport.worldUnitsToPixels(circleShape.getRadius());
        Vector2 worldPosition = circleShape.getPosition();
        float screenPositionX = viewport.worldUnitsToPixels(worldPosition.x);
        float screenPositionY = viewport.worldUnitsToPixels(worldPosition.y);
        // circulo
        drawCircle(canvas, paint, screenPositionX, screenPositionY, screenRadius, strokeColor, fillColor);

        // linea
        if (lineColor != Color.TRANSPARENT) {
            paint.setStyle(Style.STROKE);
            paint.setColor(lineColor);
            canvas.drawLine(screenPositionX, screenPositionY, screenPositionX + screenRadius, screenPositionY, paint);
        }

    }

    private static void drawCircle(Canvas canvas, Paint paint, float screenPositionX, float screenPositionY, float screenRadius, int strokeColor, int fillColor) {

        // circulo
        if (fillColor != Color.TRANSPARENT) {
            paint.setStyle(Style.FILL);
            paint.setColor(fillColor);

            canvas.drawCircle(screenPositionX, screenPositionY, screenRadius, paint);
        }

        // circunferencia
        if (strokeColor != Color.TRANSPARENT) {
            paint.setStyle(Style.STROKE);
            paint.setColor(strokeColor);

            canvas.drawCircle(screenPositionX, screenPositionY, screenRadius, paint);
        }

    }

    private static void drawPolygonShape(Canvas canvas, Viewport viewport, Paint paint, PolygonShape polygon, int strokeColor, int fillColor, int lineColor) {
        int count = polygon.getVertexCount();

        Vector2[] aux = new Vector2[count];
        for (int i = 0; i < count; i++) {
            Vector2 vertex = new Vector2();
            polygon.getVertex(i, vertex);
            aux[i] = vertex;
        }
        drawPath(canvas, paint, viewport, aux, strokeColor, fillColor, lineColor);
    }

    private static void drawChainShape(Canvas canvas, Paint paint, Viewport viewport, ChainShape chain, int strokeColor, int fillColor, int lineColor) {
        int count = chain.getVertexCount();

        Vector2[] aux = new Vector2[count];
        for (int i = 0; i < count; i++) {
            Vector2 vertex = new Vector2();
            chain.getVertex(i, vertex);
            aux[i] = vertex;
        }
        drawPath(canvas, paint, viewport, aux, strokeColor, fillColor, lineColor);
    }

    private static void drawEdgeShape(Canvas canvas, Paint paint, Viewport viewport, EdgeShape shape, int strokeColor, int fillColor, int lineColor) {
        Vector2[] aux = new Vector2[2];
        Vector2 v1 = new Vector2();
        shape.getVertex1(v1);
        aux[0] = v1;

        Vector2 v2 = new Vector2();
        shape.getVertex2(v2);
        aux[1] = v2;

        drawPath(canvas, paint, viewport, aux, strokeColor, fillColor, lineColor);
    }

    private static void drawPath(Canvas canvas, Paint paint, Viewport viewport, Vector2[] vertexes, int strokeColor, int fillColor, int lineColor) {

        int count = vertexes.length;
        Path path = new Path();

        for (int i = 0; i < count; i++) {
            Vector2 aux = new Vector2(viewport.worldUnitsToPixels(vertexes[i].x), -viewport.worldUnitsToPixels(vertexes[i].y));
            if (path.isEmpty()) {
                path.moveTo(aux.x, aux.y);
            }
            path.lineTo(aux.x, aux.y);
        }

        if (fillColor != Color.TRANSPARENT) {
            paint.setStyle(Style.FILL);
            paint.setColor(fillColor);
            canvas.drawPath(path, paint);
        }

        if (strokeColor != Color.TRANSPARENT) {
            paint.setStyle(Style.STROKE);
            paint.setColor(strokeColor);
            canvas.drawPath(path, paint);
        }

        // linea
        if (lineColor != Color.TRANSPARENT) {
            canvas.save();
            canvas.clipPath(path);
            paint.setStyle(Style.STROKE);
            paint.setColor(lineColor);
            canvas.drawLine(0, 0, Math.max(canvas.getWidth(), canvas.getHeight()), 0, paint);
            canvas.restore();
        }

    }

}




Java Source Code List

com.badlogic.gdx.math.MathUtils.java
com.badlogic.gdx.math.Matrix3.java
com.badlogic.gdx.math.Matrix4.java
com.badlogic.gdx.math.Quaternion.java
com.badlogic.gdx.math.Vector2.java
com.badlogic.gdx.math.Vector3.java
com.badlogic.gdx.physics.box2d.BodyDef.java
com.badlogic.gdx.physics.box2d.Body.java
com.badlogic.gdx.physics.box2d.ChainShape.java
com.badlogic.gdx.physics.box2d.CircleShape.java
com.badlogic.gdx.physics.box2d.ContactFilter.java
com.badlogic.gdx.physics.box2d.ContactImpulse.java
com.badlogic.gdx.physics.box2d.ContactListener.java
com.badlogic.gdx.physics.box2d.Contact.java
com.badlogic.gdx.physics.box2d.DestructionListener.java
com.badlogic.gdx.physics.box2d.EdgeShape.java
com.badlogic.gdx.physics.box2d.Filter.java
com.badlogic.gdx.physics.box2d.FixtureDef.java
com.badlogic.gdx.physics.box2d.Fixture.java
com.badlogic.gdx.physics.box2d.JointDef.java
com.badlogic.gdx.physics.box2d.JointEdge.java
com.badlogic.gdx.physics.box2d.Joint.java
com.badlogic.gdx.physics.box2d.Manifold.java
com.badlogic.gdx.physics.box2d.MassData.java
com.badlogic.gdx.physics.box2d.PolygonShape.java
com.badlogic.gdx.physics.box2d.QueryCallback.java
com.badlogic.gdx.physics.box2d.RayCastCallback.java
com.badlogic.gdx.physics.box2d.Shape.java
com.badlogic.gdx.physics.box2d.Transform.java
com.badlogic.gdx.physics.box2d.WorldManifold.java
com.badlogic.gdx.physics.box2d.World.java
com.badlogic.gdx.physics.box2d.joints.DistanceJointDef.java
com.badlogic.gdx.physics.box2d.joints.DistanceJoint.java
com.badlogic.gdx.physics.box2d.joints.FrictionJointDef.java
com.badlogic.gdx.physics.box2d.joints.FrictionJoint.java
com.badlogic.gdx.physics.box2d.joints.GearJointDef.java
com.badlogic.gdx.physics.box2d.joints.GearJoint.java
com.badlogic.gdx.physics.box2d.joints.MouseJointDef.java
com.badlogic.gdx.physics.box2d.joints.MouseJoint.java
com.badlogic.gdx.physics.box2d.joints.PrismaticJointDef.java
com.badlogic.gdx.physics.box2d.joints.PrismaticJoint.java
com.badlogic.gdx.physics.box2d.joints.PulleyJointDef.java
com.badlogic.gdx.physics.box2d.joints.PulleyJoint.java
com.badlogic.gdx.physics.box2d.joints.RevoluteJointDef.java
com.badlogic.gdx.physics.box2d.joints.RevoluteJoint.java
com.badlogic.gdx.physics.box2d.joints.RopeJointDef.java
com.badlogic.gdx.physics.box2d.joints.RopeJoint.java
com.badlogic.gdx.physics.box2d.joints.WeldJointDef.java
com.badlogic.gdx.physics.box2d.joints.WeldJoint.java
com.badlogic.gdx.physics.box2d.joints.WheelJointDef.java
com.badlogic.gdx.physics.box2d.joints.WheelJoint.java
com.badlogic.gdx.utils.Array.java
com.badlogic.gdx.utils.ComparableTimSort.java
com.badlogic.gdx.utils.Disposable.java
com.badlogic.gdx.utils.GdxRuntimeException.java
com.badlogic.gdx.utils.LongArray.java
com.badlogic.gdx.utils.LongMap.java
com.badlogic.gdx.utils.NumberUtils.java
com.badlogic.gdx.utils.Pool.java
com.badlogic.gdx.utils.Sort.java
com.badlogic.gdx.utils.StringBuilder.java
com.badlogic.gdx.utils.TimSort.java
com.garrapeta.MathUtils.java
com.garrapeta.gameengine.Actor.java
com.garrapeta.gameengine.AsyncGameMessage.java
com.garrapeta.gameengine.BitmapManager.java
com.garrapeta.gameengine.Box2DActor.java
com.garrapeta.gameengine.Box2DWorld.java
com.garrapeta.gameengine.GameMessage.java
com.garrapeta.gameengine.GameView.java
com.garrapeta.gameengine.GameWorld.java
com.garrapeta.gameengine.ShapeDrawer.java
com.garrapeta.gameengine.SyncGameMessage.java
com.garrapeta.gameengine.Viewport.java
com.garrapeta.gameengine.actor.Box2DAtomicActor.java
com.garrapeta.gameengine.actor.Box2DCircleActor.java
com.garrapeta.gameengine.actor.Box2DEdgeActor.java
com.garrapeta.gameengine.actor.Box2DLoopActor.java
com.garrapeta.gameengine.actor.Box2DOpenChainActor.java
com.garrapeta.gameengine.actor.Box2DPolygonActor.java
com.garrapeta.gameengine.actor.IAtomicActor.java
com.garrapeta.gameengine.actor.SimpleActor.java
com.garrapeta.gameengine.module.LevelActionsModule.java
com.garrapeta.gameengine.module.LoadedLevelActionsModule.java
com.garrapeta.gameengine.module.SoundModule.java
com.garrapeta.gameengine.module.VibrationModule.java
com.garrapeta.gameengine.utils.IOUtils.java
com.garrapeta.gameengine.utils.LogX.java
com.garrapeta.gameengine.utils.PhysicsUtils.java
com.garrapeta.gameengine.utils.Pool.java