Beispiel #1
0
        static void DrawJoint(FSDebugView instance, Joint joint)
        {
            if (!joint.Enabled)
            {
                return;
            }

            var b1 = joint.BodyA;
            var b2 = joint.BodyB;

            FarseerPhysics.Common.Transform xf1;
            b1.GetTransform(out xf1);

            var x2 = System.Numerics.Vector2.Zero;

            if (b2 != null || !joint.IsFixedType())
            {
                FarseerPhysics.Common.Transform xf2;
                b2.GetTransform(out xf2);
                x2 = xf2.P;
            }

            var p1 = joint.WorldAnchorA;
            var p2 = joint.WorldAnchorB;
            var x1 = xf1.P;

            var color = new Color(0.5f, 0.8f, 0.8f);

            switch (joint.JointType)
            {
            case JointType.Distance:
            {
                instance.DrawSegment(p1, p2, color);
                break;
            }

            case JointType.Pulley:
            {
                var pulley = (PulleyJoint)joint;
                var s1     = b1.GetWorldPoint(pulley.LocalAnchorA);
                var s2     = b2.GetWorldPoint(pulley.LocalAnchorB);
                instance.DrawSegment(p1, p2, color);
                instance.DrawSegment(p1, s1, color);
                instance.DrawSegment(p2, s2, color);
                break;
            }

            case JointType.FixedMouse:
            {
                instance.DrawPoint(p1.ToXna(), 0.2f, new Color(0.0f, 1.0f, 0.0f));
                instance.DrawSegment(p1, p2, new Color(0.8f, 0.8f, 0.8f));
                break;
            }

            case JointType.Revolute:
            {
                instance.DrawSegment(x1, p1, color);
                instance.DrawSegment(p1, p2, color);
                instance.DrawSegment(x2, p2, color);

                instance.DrawSolidCircle(p2, 0.1f, System.Numerics.Vector2.Zero, Color.Red);
                instance.DrawSolidCircle(p1, 0.1f, System.Numerics.Vector2.Zero, Color.Blue);
                break;
            }

            case JointType.Gear:
            {
                instance.DrawSegment(x1, x2, color);
                break;
            }

            default:
            {
                instance.DrawSegment(x1, p1, color);
                instance.DrawSegment(p1, p2, color);
                instance.DrawSegment(x2, p2, color);
                break;
            }
            }
        }