/// Call this to draw shapes and other debug draw data. public void DrawDebugData() { if (DebugDraw == null) { return; } DebugDrawFlags flags = DebugDraw.Flags; if ((flags & DebugDrawFlags.Shape) == DebugDrawFlags.Shape) { for (Body b = _bodyList; b != null; b = b.GetNext()) { Transform xf; b.GetTransform(out xf); for (Fixture f = b.GetFixtureList(); f != null; f = f.GetNext()) { if (b.IsActive() == false) { DrawShape(f, xf, new Color(0.5f, 0.5f, 0.3f)); } else if (b.GetType() == BodyType.Static) { DrawShape(f, xf, new Color(0.5f, 0.9f, 0.5f)); } else if (b.GetType() == BodyType.Kinematic) { DrawShape(f, xf, new Color(0.5f, 0.5f, 0.9f)); } else if (b.IsAwake() == false) { DrawShape(f, xf, new Color(0.6f, 0.6f, 0.6f)); } else { DrawShape(f, xf, new Color(0.9f, 0.7f, 0.7f)); } } } } if ((flags & DebugDrawFlags.Joint) == DebugDrawFlags.Joint) { for (Joint j = _jointList; j != null; j = j.GetNext()) { DrawJoint(j); } } if ((flags & DebugDrawFlags.Pair) == DebugDrawFlags.Pair) { Color color = new Color(0.3f, 0.9f, 0.9f); for (Contact c = _contactManager._contactList; c != null; c = c.GetNext()) { /* * Fixture fixtureA = c.GetFixtureA(); * Fixture fixtureB = c.GetFixtureB(); * * AABB aabbA; * AABB aabbB; * fixtureA.GetAABB(out aabbA); * fixtureB.GetAABB(out aabbB); * * Vector2 cA = aabbA.GetCenter(); * Vector2 cB = aabbB.GetCenter(); * * DebugDraw.DrawSegment(cA, cB, color); */ } } if ((flags & DebugDrawFlags.AABB) == DebugDrawFlags.AABB) { Color color = new Color(0.9f, 0.3f, 0.9f); BroadPhase bp = _contactManager._broadPhase; for (Body b = _bodyList; b != null; b = b.GetNext()) { if (b.IsActive() == false) { continue; } for (Fixture f = b.GetFixtureList(); f != null; f = f.GetNext()) { for (int i = 0; i < f._proxyCount; ++i) { FixtureProxy proxy = f._proxies[i]; AABB aabb; bp.GetFatAABB(proxy.proxyId, out aabb); FixedArray8 <Vector2> vs = new FixedArray8 <Vector2>(); vs[0] = new Vector2(aabb.lowerBound.x, aabb.lowerBound.y); vs[1] = new Vector2(aabb.upperBound.x, aabb.lowerBound.y); vs[2] = new Vector2(aabb.upperBound.x, aabb.upperBound.y); vs[3] = new Vector2(aabb.lowerBound.x, aabb.upperBound.y); DebugDraw.DrawPolygon(ref vs, 4, color); } } } } if ((flags & DebugDrawFlags.CenterOfMass) == DebugDrawFlags.CenterOfMass) { for (Body b = _bodyList; b != null; b = b.GetNext()) { Transform xf; b.GetTransform(out xf); xf.Position = b.GetWorldCenter(); DebugDraw.DrawTransform(ref xf); } } }
/// Call this to draw shapes and other debug draw data. public void DrawDebugData() { if (m_debugDraw == null) { return; } Draw.DrawFlags flags = m_debugDraw.GetFlags(); if (flags.HasFlag(Draw.DrawFlags.e_shapeBit)) { foreach (Body b in m_bodyList) { Transform xf = b.GetTransform(); foreach (Fixture f in b.GetFixtureList()) { if (b.IsActive() == false) { DrawShape(f, xf, Color.FromArgb(128, 128, 75)); } else if (b.GetBodyType() == BodyType._staticBody) { DrawShape(f, xf, Color.FromArgb(128, 225, 128)); } else if (b.GetBodyType() == BodyType._kinematicBody) { DrawShape(f, xf, Color.FromArgb(128, 128, 225)); } else if (b.IsAwake() == false) { DrawShape(f, xf, Color.FromArgb(150, 150, 150)); } else { DrawShape(f, xf, Color.FromArgb(225, 175, 175)); } } } } if (flags.HasFlag(Draw.DrawFlags.e_jointBit)) { foreach (Joint j in m_jointList) { DrawJoint(j); } } if (flags.HasFlag(Draw.DrawFlags.e_pairBit)) { Color color = Color.FromArgb(75, 225, 225); foreach (Contact c in m_contactManager.m_contactList) { //Fixture fixtureA = c.FixtureA; //Fixture fixtureB = c.FixtureB; //Vec2 cA = fixtureA.GetAABB().GetCenter(); //Vec2 cB = fixtureB.GetAABB().GetCenter(); //m_debugDraw.DrawSegment(cA, cB, color); } } if (flags.HasFlag(Draw.DrawFlags.e_aabbBit)) { Color color = Color.FromArgb(225, 75, 225); BroadPhase bp = m_contactManager.m_broadPhase; foreach (Body b in m_bodyList) { if (b.IsActive() == false) { continue; } foreach (Fixture f in b.GetFixtureList()) { for (int i = 0; i < f.m_proxies.Count(); ++i) { FixtureProxy proxy = f.m_proxies[i]; AABB aabb = bp.GetFatAABB(proxy.proxyId); Vec2[] vs = new Vec2[4]; vs[0].Set(aabb.lowerBound.X, aabb.lowerBound.Y); vs[1].Set(aabb.upperBound.X, aabb.lowerBound.Y); vs[2].Set(aabb.upperBound.X, aabb.upperBound.Y); vs[3].Set(aabb.lowerBound.X, aabb.upperBound.Y); m_debugDraw.DrawPolygon(vs, 4, color); } } } } if (flags.HasFlag(Draw.DrawFlags.e_centerOfMassBit)) { foreach (Body b in m_bodyList) { Transform xf = b.GetTransform(); xf.p = b.GetWorldCenter(); m_debugDraw.DrawTransform(xf); } } }