OSDN Git Service

fixed issue 1222, chain and loops weren't respected by debug renderer
authorMario Zechner <contact@badlogicgames.com>
Sat, 26 Jan 2013 12:36:40 +0000 (13:36 +0100)
committerMario Zechner <contact@badlogicgames.com>
Sat, 26 Jan 2013 12:36:40 +0000 (13:36 +0100)
backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/emu/com/badlogic/gdx/physics/box2d/Box2DDebugRenderer.java
backends/gdx-backends-gwt/src/com/badlogic/gdx/backends/gwt/emu/com/badlogic/gdx/physics/box2d/ChainShape.java
gdx/src/com/badlogic/gdx/physics/box2d/Box2DDebugRenderer.java
gdx/src/com/badlogic/gdx/physics/box2d/ChainShape.java
tests/gdx-tests-lwjgl/src/com/badlogic/gdx/tests/lwjgl/LwjglDebugStarter.java

index 36c9c31..43d3042 100644 (file)
@@ -161,7 +161,7 @@ public class Box2DDebugRenderer {
                        vertices[2].set(upper.x, upper.y);\r
                        vertices[3].set(lower.x, upper.y);\r
 \r
-                       drawSolidPolygon(vertices, 4, AABB_COLOR);\r
+                       drawSolidPolygon(vertices, 4, AABB_COLOR, true);\r
                } else if (fixture.getType() == Type.Polygon) {\r
                        PolygonShape shape = (PolygonShape)fixture.getShape();\r
                        int vertexCount = shape.getVertexCount();\r
@@ -184,7 +184,7 @@ public class Box2DDebugRenderer {
                        vertices[2].set(upper.x, upper.y);\r
                        vertices[3].set(lower.x, upper.y);\r
 \r
-                       drawSolidPolygon(vertices, 4, AABB_COLOR);\r
+                       drawSolidPolygon(vertices, 4, AABB_COLOR, true);\r
                }\r
        }\r
 \r
@@ -205,7 +205,7 @@ public class Box2DDebugRenderer {
                        edge.getVertex2(vertices[1]);\r
                        transform.mul(vertices[0]);\r
                        transform.mul(vertices[1]);\r
-                       drawSolidPolygon(vertices, 2, color);\r
+                       drawSolidPolygon(vertices, 2, color, true);\r
                }\r
 \r
                if (fixture.getType() == Type.Polygon) {\r
@@ -215,7 +215,7 @@ public class Box2DDebugRenderer {
                                chain.getVertex(i, vertices[i]);\r
                                transform.mul(vertices[i]);\r
                        }\r
-                       drawSolidPolygon(vertices, vertexCount, color);\r
+                       drawSolidPolygon(vertices, vertexCount, color, true);\r
                }\r
 \r
                if (fixture.getType() == Type.Chain) {\r
@@ -225,7 +225,7 @@ public class Box2DDebugRenderer {
                                chain.getVertex(i, vertices[i]);\r
                                transform.mul(vertices[i]);\r
                        }\r
-                       drawSolidPolygon(vertices, vertexCount, color);\r
+                       drawSolidPolygon(vertices, vertexCount, color, chain.isLooped());\r
                }\r
        }\r
 \r
@@ -251,7 +251,7 @@ public class Box2DDebugRenderer {
                renderer.line(center.x, center.y, 0, center.x + axis.x * radius, center.y + axis.y * radius, 0);\r
        }\r
 \r
-       private void drawSolidPolygon (Vector2[] vertices, int vertexCount, Color color) {\r
+       private void drawSolidPolygon (Vector2[] vertices, int vertexCount, Color color, boolean closed) {\r
                renderer.setColor(color.r, color.g, color.b, color.a);\r
                for (int i = 0; i < vertexCount; i++) {\r
                        Vector2 v = vertices[i];\r
@@ -263,7 +263,7 @@ public class Box2DDebugRenderer {
                        renderer.line(lv.x, lv.y, v.x, v.y);\r
                        lv.set(v);\r
                }\r
-               renderer.line(f.x, f.y, lv.x, lv.y);\r
+               if(closed) renderer.line(f.x, f.y, lv.x, lv.y);\r
        }\r
 \r
        private void drawJoint (Joint joint) {\r
index a6745d3..706886e 100644 (file)
@@ -18,10 +18,12 @@ package com.badlogic.gdx.physics.box2d;
 \r
 import org.jbox2d.common.Vec2;\r
 \r
+import com.badlogic.gdx.graphics.Color;\r
 import com.badlogic.gdx.math.Vector2;\r
 \r
 public class ChainShape extends Shape {\r
        org.jbox2d.collision.shapes.ChainShape shape;\r
+       boolean isLooped = false;\r
 \r
        public ChainShape () {\r
                super(new org.jbox2d.collision.shapes.ChainShape());\r
@@ -46,6 +48,7 @@ public class ChainShape extends Shape {
                        v[i] = new Vec2(vertices[i].x, vertices[i].y);\r
                }\r
                shape.createLoop(v, v.length);\r
+               isLooped = true;\r
        }\r
 \r
        /** Create a chain with isolated end vertices.\r
@@ -56,6 +59,7 @@ public class ChainShape extends Shape {
                        v[i] = new Vec2(vertices[i].x, vertices[i].y);\r
                }\r
                shape.createChain(v, v.length);\r
+               isLooped = false;\r
        }\r
 \r
        /** Establish connectivity to a vertex that precedes the first vertex. Don't call this for loops. */\r
@@ -105,4 +109,8 @@ public class ChainShape extends Shape {
        public int getChildCount () {\r
                return shape.getChildCount();\r
        }\r
+\r
+       public boolean isLooped () {\r
+               return isLooped;\r
+       }\r
 }\r
index 44330c1..1b34856 100644 (file)
@@ -159,7 +159,7 @@ public class Box2DDebugRenderer {
                        vertices[2].set(upper.x, upper.y);\r
                        vertices[3].set(lower.x, upper.y);\r
 \r
-                       drawSolidPolygon(vertices, 4, AABB_COLOR);\r
+                       drawSolidPolygon(vertices, 4, AABB_COLOR, true);\r
                } else if (fixture.getType() == Type.Polygon) {\r
                        PolygonShape shape = (PolygonShape)fixture.getShape();\r
                        int vertexCount = shape.getVertexCount();\r
@@ -182,7 +182,7 @@ public class Box2DDebugRenderer {
                        vertices[2].set(upper.x, upper.y);\r
                        vertices[3].set(lower.x, upper.y);\r
 \r
-                       drawSolidPolygon(vertices, 4, AABB_COLOR);\r
+                       drawSolidPolygon(vertices, 4, AABB_COLOR, true);\r
                }\r
        }\r
 \r
@@ -203,7 +203,7 @@ public class Box2DDebugRenderer {
                        edge.getVertex2(vertices[1]);\r
                        transform.mul(vertices[0]);\r
                        transform.mul(vertices[1]);\r
-                       drawSolidPolygon(vertices, 2, color);\r
+                       drawSolidPolygon(vertices, 2, color, true);\r
                }\r
 \r
                if (fixture.getType() == Type.Polygon) {\r
@@ -213,7 +213,7 @@ public class Box2DDebugRenderer {
                                chain.getVertex(i, vertices[i]);\r
                                transform.mul(vertices[i]);\r
                        }\r
-                       drawSolidPolygon(vertices, vertexCount, color);\r
+                       drawSolidPolygon(vertices, vertexCount, color, true);\r
                }\r
 \r
                if (fixture.getType() == Type.Chain) {\r
@@ -223,7 +223,7 @@ public class Box2DDebugRenderer {
                                chain.getVertex(i, vertices[i]);\r
                                transform.mul(vertices[i]);\r
                        }\r
-                       drawSolidPolygon(vertices, vertexCount, color);\r
+                       drawSolidPolygon(vertices, vertexCount, color, false);\r
                }\r
        }\r
 \r
@@ -249,7 +249,7 @@ public class Box2DDebugRenderer {
                renderer.line(center.x, center.y, 0, center.x + axis.x * radius, center.y + axis.y * radius, 0);\r
        }\r
 \r
-       private void drawSolidPolygon (Vector2[] vertices, int vertexCount, Color color) {\r
+       private void drawSolidPolygon (Vector2[] vertices, int vertexCount, Color color, boolean closed) {\r
                renderer.setColor(color.r, color.g, color.b, color.a);\r
                for (int i = 0; i < vertexCount; i++) {\r
                        Vector2 v = vertices[i];\r
@@ -261,7 +261,7 @@ public class Box2DDebugRenderer {
                        renderer.line(lv.x, lv.y, v.x, v.y);\r
                        lv.set(v);\r
                }\r
-               renderer.line(f.x, f.y, lv.x, lv.y);\r
+               if(closed) renderer.line(f.x, f.y, lv.x, lv.y);\r
        }\r
 \r
        private void drawJoint (Joint joint) {\r
index f1706a4..1306dcd 100644 (file)
@@ -23,6 +23,7 @@ public class ChainShape extends Shape {
        /*JNI\r
 #include <Box2D/Box2D.h>\r
         */\r
+       boolean isLooped = false;\r
        \r
        public ChainShape () {\r
                addr = newChainShape();\r
@@ -50,6 +51,7 @@ public class ChainShape extends Shape {
                        verts[i + 1] = vertices[j].y;\r
                }\r
                jniCreateLoop(addr, verts, verts.length / 2);\r
+               isLooped = true;\r
        }\r
 \r
        private native void jniCreateLoop (long addr, float[] verts, int numVertices); /*\r
@@ -70,6 +72,7 @@ public class ChainShape extends Shape {
                        verts[i + 1] = vertices[j].y;\r
                }\r
                jniCreateChain(addr, verts, verts.length / 2);\r
+               isLooped = false;\r
        }\r
 \r
        private native void jniCreateChain (long addr, float[] verts, int numVertices); /*\r
@@ -138,6 +141,10 @@ public class ChainShape extends Shape {
                verts[0] = v.x;\r
                verts[1] = v.y;\r
        */\r
+       \r
+       public boolean isLooped() {\r
+               return isLooped;\r
+       }\r
 \r
 // /// Implement b2Shape. Vertices are cloned using b2Alloc.\r
 // b2Shape* Clone(b2BlockAllocator* allocator) const;\r
index ea9f88c..94febad 100644 (file)
@@ -40,4 +40,6 @@ public class LwjglDebugStarter {
                config.useGL20 = test.needsGL20();\r
                new LwjglApplication(test, config);\r
        }\r
+       \r
+       \r
 }\r