public void EmitDebuggableConstraint(RevoluteJointManifold m, RJConstraint c, ComponentDataFromEntity <Position> positions, float dt)
 {
     if (debuggableConstraints != null)
     {
         debuggableConstraints.Add(new DebuggableConstraint(m, c, positions, dt));
     }
 }
        public DebuggableConstraint(RevoluteJointManifold m, TwoWayTwoDOFConstraint c, ComponentDataFromEntity <Position> positions, float dt)
        {
            this.m = m;

            constraint = c;
            x1         = positions[m.e1].pos;
            x2         = positions[m.e2].pos;
            M_inv      = c.M_inv;
            this.dt    = dt;
        }
    public TwoWayTwoDOFConstraint(RevoluteJointManifold m, Float6 M_inv, float dt)
    {
        e1 = m.e1;
        e2 = m.e2;
        id = m.id;

        float2 oneCrossR1 = Lin.Cross(1, m.r1);
        float2 oneCrossR2 = Lin.Cross(1, m.r2);

        this.M_inv = M_inv;

        constraint = new TwoDOFConstraint <Float6>(
            J1: new Float6(-1, 0, -oneCrossR1.x, 1, 0, oneCrossR2.x),
            J2: new Float6(0, -1, -oneCrossR1.y, 0, 1, oneCrossR2.y),
            M_inv: M_inv,
            bias: m.delta * m.beta / dt,
            softness: m.softness
            );

        lambdaAccum = float2.zero;
    }
 public TwoWayTwoDOFConstraint(RevoluteJointManifold m, ComponentDataFromEntity <Mass> masses, float dt) :
     this(m, new Float6(masses[m.e1].M_inv, masses[m.e2].M_inv), dt)
 {
 }