void BuildStick(Vector3 position, int linkCount, out List <Bone> bones, out List <Entity> boneEntities) { //Set up a bone chain. bones = new List <Bone>(); boneEntities = new List <Entity>(); var previousBoneEntity = new Cylinder(position, 1, .2m); var previousBone = new Bone(previousBoneEntity.Position, previousBoneEntity.Orientation, previousBoneEntity.Radius, previousBoneEntity.Height); bones.Add(previousBone); boneEntities.Add(previousBoneEntity); for (int i = 1; i < linkCount; i++) { var boneEntity = new Cylinder(previousBone.Position + new Vector3(0, 1, 0), 1, .2m); var bone = new Bone(boneEntity.Position, boneEntity.Orientation, boneEntity.Radius, boneEntity.Height); bones.Add(bone); boneEntities.Add(boneEntity); //Make a relationship between the two bones and entities. CollisionRules.AddRule(previousBoneEntity, boneEntity, CollisionRule.NoBroadPhase); Vector3 anchor = (previousBoneEntity.Position + boneEntity.Position) / 2; //var dynamicsBallSocketJoint = new BallSocketJoint(previousBoneEntity, boneEntity, anchor); //var dynamicsAngularFriction = new NoRotationJoint(previousBoneEntity, boneEntity); //Space.Add(dynamicsBallSocketJoint); //Space.Add(dynamicsAngularFriction); var ballSocket = new IKBallSocketJoint(previousBone, bone, anchor); var angularJoint = new IKAngularJoint(previousBone, bone); previousBone = bone; previousBoneEntity = boneEntity; } }
public BEPUikBallSocketJoint(BEPUikBone connectionA, BEPUikBone connectionB, Vector3 anchor, BEPUikBallSocketJointDefinition definition, String name, SimObject instance) : base(connectionA, connectionB, name, instance) { joint = new IKBallSocketJoint(connectionA.IkBone, connectionB.IkBone, anchor.toBepuVec3()); setupJoint(definition); }