diff render.d @ 7:2217fd1fe384

added angular and linear velocity limit
author zzzzrrr <mason.green@gmail.com>
date Sat, 21 Mar 2009 19:34:20 -0400
parents eb6059f7035a
children 2ecd16840900
line wrap: on
line diff
--- a/render.d	Sat Mar 21 16:42:08 2009 -0400
+++ b/render.d	Sat Mar 21 19:34:20 2009 -0400
@@ -37,6 +37,9 @@
 
 import openmelee.melee;
 
+// Water stuffs
+const MAX_CIRCLE_RES = 32;
+
 /// Color for drawing. Each value has the range [0,1].
 struct Color {
     static Color opCall(float r, float g, float b)
@@ -355,13 +358,6 @@
                 gl.Flush();
             }
         }
-
-        // Draw water
-        bzFluidParticle[] particles = world.particles;
-        gl.Color3f(0, 0, 1);
-        foreach (p; particles) {
-            gl.drawCircle(vec2.from(p.position), WATER_RADIUS, true);
-        }
     }
 
     // Draw joints
@@ -526,12 +522,20 @@
 		}
     }
 
+    // Draw the world bounds
+    bzBroadPhase bp = world.broadPhase;
+    bzVec2 worldLower = bp.m_worldAABB.lowerBound;
+    bzVec2 worldUpper = bp.m_worldAABB.upperBound;
+    Color color = Color(0.3f, 0.9f, 0.9f);        
+    vec2 vs[4];
+    vs[0] = vec2(worldLower.x, worldLower.y);
+    vs[1] = vec2(worldUpper.x, worldLower.y);
+    vs[2] = vec2(worldUpper.x, worldUpper.y);
+    vs[3] = vec2(worldLower.x, worldUpper.y);
+    drawPolygon(gl, vs, color);
+    
     // Draw axis aligned bounding boxes (bzAABB)
     if (settings.drawAABBs) {
-        bzBroadPhase bp = world.broadPhase;
-        bzVec2 worldLower = bp.m_worldAABB.lowerBound;
-        bzVec2 worldUpper = bp.m_worldAABB.upperBound;
-        Color color;
         bzVec2 invQ;
         invQ.set(1.0f / bp.m_quantizationFactor.x, 1.0f / bp.m_quantizationFactor.y);
         color = Color(1.0f, 1.0f, 1.0f);
@@ -548,7 +552,6 @@
             b.upperBound.x = worldLower.x + invQ.x * bp.m_bounds[0][p.upperBounds[0]].value;
             b.upperBound.y = worldLower.y + invQ.y * bp.m_bounds[1][p.upperBounds[1]].value;
 
-            vec2 vs[4];
             vs[0] = vec2(b.lowerBound.x, b.lowerBound.y);
             vs[1] = vec2(b.upperBound.x, b.lowerBound.y);
             vs[2] = vec2(b.upperBound.x, b.upperBound.y);
@@ -556,102 +559,6 @@
 
             drawPolygon(gl, vs, color);
         }
-        
-        vec2 vs[4];
-        vs[0] = vec2(worldLower.x, worldLower.y);
-        vs[1] = vec2(worldUpper.x, worldLower.y);
-        vs[2] = vec2(worldUpper.x, worldUpper.y);
-        vs[3] = vec2(worldLower.x, worldUpper.y);
-
-        color = Color(0.3f, 0.9f, 0.9f);
-        drawPolygon(gl, vs, color);
-    }
-
-    // Draw contact points
-    if (settings.drawContactPoints) {
-        const k_axisScale = 0.3f;
-        const k_forceScale = 0.01f;
-
-
-        for (int i = 0; i < pointCount; ++i) {
-            ContactPoint point = points[i];
-            Color color;
-
-            if (point.state == ContactState.e_contactAdded) {
-                // Add
-                color = Color(0.3f, 0.95f, 0.3f);
-                vec2 p = vec2.from(point.position);
-                gl.drawPoint(p, 10.0f, color);
-            }else if (point.state == ContactState.e_contactPersisted) {
-                // Persist
-                color = Color(0.3f, 0.3f, 0.95f);
-                vec2 p = vec2.from(point.position);
-                gl.drawPoint(p, 5.0f, color);
-            }else {
-                // Remove
-                color = Color(0.95f, 0.3f, 0.3f);
-                vec2 p = vec2.from(point.position);
-                gl.drawPoint(p, 10.0f, color);
-            }
-
-            if (settings.drawContactNormals == 1) {
-                vec2 p1 = vec2.from(point.position);
-                vec2 p2 = p1 + k_axisScale * vec2.from(point.normal);
-                color = Color(0.4f, 0.9f, 0.4f);
-                gl.drawSegment(p1, p2, color);
-            }else if (settings.drawContactForces) { /*
-                       vec2 p1 = vec2.from(point.position);
-                       vec2 p2 = p1 + k_forceScale * vec2.from(point.normalForce * point.normal);
-                       color = Color(0.9f, 0.9f, 0.3f);
-                       gl.drawSegment(p1, p2, color);*/
-            }
-
-            if (settings.drawFrictionForces) { /*
-                      vec2 tangent = vec2.from(bzCross(point.normal, 1.0f));
-                      vec2 p1 = point.position;
-                      vec2 p2 = p1 + k_forceScale * vec2.from(point.tangentForce) * tangent;
-                      color = Color(0.9f, 0.9f, 0.3f);
-                      gl.drawSegment(p1, p2, color); */
-            }
-        }
-    }
-
-    if (settings.drawOBBs) {
-        Color color = Color(0.5f, 0.3f, 0.5f);
-
-        for (bzBody b = world.bodyList; b; b = b.next) {
-            bzXForm xf = b.xf;
-            for (bzShape s = b.shapeList; s; s = s.next) {
-                if (s.type != bzShapeType.POLYGON) {
-                    continue;
-                }
-
-                bzPolygon poly = cast(bzPolygon)s;
-                bzOBB obb = poly.obb;
-                bzVec2 h = obb.extents;
-                bzVec2 vs[4];
-                vs[0].set(-h.x, -h.y);
-                vs[1].set(h.x, -h.y);
-                vs[2].set(h.x, h.y);
-                vs[3].set(-h.x, h.y);
-
-                vec2[4] v;
-                for (int i = 0; i < 4; ++i) {
-                    vs[i] = obb.center + bzMul(obb.R, vs[i]);
-                    v[i] = vec2.from(bzMul(xf, vs[i]));
-                }
-
-                drawPolygon(gl, v, color);
-            }
-        }
-    }
-
-    if (settings.drawCOMs) {
-        for (bzBody b = world.bodyList; b; b = b.next) {
-            bzXForm xf = b.xf;
-            xf.position = b.worldCenter;
-            drawXForm(gl, xf);
-        }
     }
 }