public void AppendAngularJoint(AngularJoint.Specs specs, Cluster body0, Body body1)
		{
            StoreAngularJointControlRef(specs);
			btSoftBody_appendAngularJoint4(_native, specs._native, body0._native, body1._native);
		}
 private void StoreAngularJointControlRef(AngularJoint.Specs specs)
 {
     if (specs.Control != null && specs.Control != AngularJoint.IControl.Default)
     {
         _aJointControls.Add(specs.Control);
     }
 }
        public void AppendAngularJoint(AngularJoint.Specs specs, SoftBody body)
		{
            StoreAngularJointControlRef(specs);
			btSoftBody_appendAngularJoint3(_native, specs._native, body._native);
		}
 public virtual float Speed(AngularJoint angularJoint, float current)
 {
     return current;
 }
 public virtual void Prepare(AngularJoint angularJoint)
 {
 }
 public override float Speed(AngularJoint joint, float current)
 {
     return _motorControl.Speed(joint, current);
 }
 public override void Prepare(AngularJoint joint)
 {
     joint.Refs[0] = new Vector3((float)Math.Cos(Angle * sign), 0, (float)Math.Sin(Angle * sign));
 }
 public override float Speed(AngularJoint joint, float current)
 {
     return current + Math.Min(maxTorque, Math.Max(-maxTorque, goal - current));
 }