Beispiel #1
0
        private void DrawJoint(Canvas canvas, WeldJointInfo joint)
        {
            float screenScale        = this.GetScreenScale(canvas);
            float anchorDist         = this.GetAnchorDist(joint.ParentBody, joint.OtherBody, joint.LocalAnchorA, joint.LocalAnchorB);
            float screenAnchorDist   = screenScale * anchorDist;
            float angularCircleRadA  = joint.ParentBody.BoundRadius * 0.25f;
            float angularCircleRadB  = joint.OtherBody.BoundRadius * 0.25f;
            bool  displaySecondAngle = screenAnchorDist >= 2.0f * MathF.Max(
                screenScale * angularCircleRadA + angularCircleRadB,
                2.0f * this.minAngleConstraintRadius);

            this.DrawLocalPosConstraint(canvas, joint.ParentBody, joint.OtherBody, joint.LocalAnchorA, joint.LocalAnchorB);

            this.DrawLocalAnchor(canvas, joint.ParentBody, joint.LocalAnchorA);
            this.DrawLocalAnchor(canvas, joint.OtherBody, joint.LocalAnchorB);

            this.DrawLocalAngleConstraint(canvas,
                                          joint.ParentBody,
                                          joint.LocalAnchorA,
                                          joint.OtherBody.GameObj.Transform.Angle - joint.RefAngle,
                                          joint.ParentBody.GameObj.Transform.Angle,
                                          angularCircleRadA);
            if (displaySecondAngle)
            {
                this.DrawLocalAngleConstraint(canvas,
                                              joint.OtherBody,
                                              joint.LocalAnchorB,
                                              joint.ParentBody.GameObj.Transform.Angle + joint.RefAngle,
                                              joint.OtherBody.GameObj.Transform.Angle,
                                              angularCircleRadB);
            }
        }
Beispiel #2
0
        private void DrawJoint(Canvas canvas, WeldJointInfo joint)
        {
            float angularCircleRadA = joint.ParentBody.BoundRadius * 0.25f;
            float angularCircleRadB = joint.OtherBody.BoundRadius * 0.25f;

            float anchorDist            = this.GetAnchorDist(joint.ParentBody, joint.OtherBody, joint.LocalAnchorA, joint.LocalAnchorB);
            bool  displaySecondCollider = anchorDist >= angularCircleRadA + angularCircleRadB;

            this.DrawLocalPosConstraint(canvas, joint.ParentBody, joint.OtherBody, joint.LocalAnchorA, joint.LocalAnchorB);

            this.DrawLocalAnchor(canvas, joint.ParentBody, joint.LocalAnchorA);
            this.DrawLocalAnchor(canvas, joint.OtherBody, joint.LocalAnchorB);

            this.DrawLocalAngleConstraint(canvas,
                                          joint.ParentBody,
                                          joint.LocalAnchorA,
                                          joint.OtherBody.GameObj.Transform.Angle - joint.RefAngle,
                                          joint.ParentBody.GameObj.Transform.Angle,
                                          angularCircleRadA);
            if (displaySecondCollider)
            {
                this.DrawLocalAngleConstraint(canvas,
                                              joint.OtherBody,
                                              joint.LocalAnchorB,
                                              joint.ParentBody.GameObj.Transform.Angle + joint.RefAngle,
                                              joint.OtherBody.GameObj.Transform.Angle,
                                              angularCircleRadB);
            }
        }