Beispiel #1
0
        /// 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);
                }
            }
        }
Beispiel #2
0
        /// 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);
                }
            }
        }