Mercurial > projects > openmelee
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); - } } }