public PinJoint CreatePinJoint(PhysicsSimulator physicsSimulator, Body body1, Vector2 anchor1, Body body2, Vector2 anchor2) { PinJoint pinJoint = CreatePinJoint(body1, anchor1, body2, anchor2); physicsSimulator.Add(pinJoint); return(pinJoint); }
public void PinJointProperties() { var anchorA = new Vect(1, 1); var anchorB = new Vect(0.5, 0.5); var constraint = new PinJoint(bodyA, bodyB, anchorA, anchorB); constraint.Distance = 13; Assert.IsTrue(PinJoint.IsPinJoint(constraint), "#0"); Assert.AreEqual(13, constraint.Distance, "#1"); }
private void DrawPinJoints(SpriteBatch spriteBatch) { for (int i = 0; i < _physicsSimulator.JointList.Count; i++) { if (_physicsSimulator.JointList[i] is PinJoint) { PinJoint pinJoint = (PinJoint)_physicsSimulator.JointList[i]; _pinJointRectangleBrush.Draw(spriteBatch, pinJoint.WorldAnchor1); _pinJointRectangleBrush.Draw(spriteBatch, pinJoint.WorldAnchor2); _pinJointLineBrush.Draw(spriteBatch, pinJoint.WorldAnchor1, pinJoint.WorldAnchor2); } } }
public void ConstraintProperties() { var anchorA = new Vect(1, 1); var anchorB = new Vect(0.5, 0.5); var constraint = new PinJoint(bodyA, bodyB, anchorA, anchorB); Assert.IsNull(constraint.Space, "#1"); space.AddConstraint(constraint); Assert.AreSame(space, constraint.Space, "#1.2"); Assert.AreSame(bodyA, constraint.BodyA, "#2"); Assert.AreSame(bodyB, constraint.BodyB, "#3"); Assert.AreEqual(anchorA, constraint.AnchorA, "#2.1"); Assert.AreEqual(anchorB, constraint.AnchorB, "#3.1"); constraint.MaxForce = 1.2; Assert.AreEqual(1.2, constraint.MaxForce, "#4"); constraint.ErrorBias = 10.0; Assert.AreEqual(10.0, constraint.ErrorBias, "#5"); constraint.CollideBodies = false; Assert.IsFalse(constraint.CollideBodies, "#6"); constraint.CollideBodies = true; Assert.IsTrue(constraint.CollideBodies, "#7"); var sb = new StringBuilder(); constraint.PreSolve = (c, s) => sb.Append("PreSolve"); constraint.PostSolve = (c, s) => sb.Append("PostSolve"); space.Step(0.2); constraint.PreSolve = null; constraint.PostSolve = null; space.Step(0.2); string solve = sb.ToString(); Assert.AreEqual("PreSolvePostSolve", solve, "#8"); }
public void ManagedToNativeRoundtripAndObjectData() { var constraint = new PinJoint(bodyA, bodyB, Vect.Zero, Vect.Zero); var objData = new object(); constraint.Data = objData; cpConstraint handle = constraint.Handle; var constraintFromHandle = Constraint.FromHandle(handle); Assert.AreSame(constraint, constraintFromHandle, "#1"); Assert.AreSame(objData, constraintFromHandle.Data, "#2"); constraint.Dispose(); }
public PinJoint CreatePinJoint(Body body1, Vector2 anchor1, Body body2, Vector2 anchor2) { PinJoint pinJoint = new PinJoint(body1, anchor1, body2, anchor2); return(pinJoint); }
public void Load(GraphicsDevice graphicsDevice, PhysicsSimulator physicsSimulator) { const int offset = 2; //Body const int bodyYRadius = 34; const int bodyXRadius = 18; _bodyBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, bodyXRadius, bodyYRadius, 6); _bodyBody.Position = _position; _bodyGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _bodyBody, bodyXRadius, bodyYRadius, 14, 0); _bodyBrush = new EllipseBrush(bodyXRadius, bodyYRadius, Color.White, Color.Black); _bodyBrush.Load(graphicsDevice); //Head const int headYRadius = 14; const int headXRadius = 10; _headBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, headXRadius, headYRadius, 2); _headBody.Position = _position - new Vector2(0, bodyYRadius + headYRadius + offset); _headGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _headBody, headXRadius, headYRadius, 10); _headBrush = new EllipseBrush(headXRadius, headYRadius, Color.White, Color.Black); _headBrush.Load(graphicsDevice); //Left upper arm const int leftUpperArmYRadius = 10; const int leftUpperArmXRadius = 6; _leftUpperArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftUpperArmXRadius, leftUpperArmYRadius, 1); _leftUpperArmBody.Position = _bodyBody.Position - new Vector2(bodyXRadius + leftUpperArmXRadius + offset, bodyYRadius / 2f); _leftUpperArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftUpperArmBody, leftUpperArmXRadius, leftUpperArmYRadius, 8, 0); _leftUpperArmBrush = new EllipseBrush(leftUpperArmXRadius, leftUpperArmYRadius, Color.White, Color.Black); _leftUpperArmBrush.Load(graphicsDevice); //Right upper arm const int rightUpperArmYRadius = 10; const int rightUpperArmXRadius = 6; _rightUpperArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightUpperArmXRadius, rightUpperArmYRadius, 1); _rightUpperArmBody.Position = _bodyBody.Position + new Vector2(bodyXRadius + rightUpperArmXRadius + offset, -bodyYRadius / 2f); _rightUpperArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightUpperArmBody, rightUpperArmXRadius, rightUpperArmYRadius, 8, 0); _rightUpperArmBrush = new EllipseBrush(rightUpperArmXRadius, rightUpperArmYRadius, Color.White, Color.Black); _rightUpperArmBrush.Load(graphicsDevice); //Left arm const int leftArmYRadius = 12; const int leftArmXRadius = 6; _leftArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftArmXRadius, leftArmYRadius, 1); _leftArmBody.Position = _leftUpperArmBody.Position + new Vector2(0, leftArmYRadius + leftArmYRadius); _leftArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftArmBody, leftArmXRadius, leftArmYRadius, 8, 0); _leftArmBrush = new EllipseBrush(leftArmXRadius, leftArmYRadius, Color.White, Color.Black); _leftArmBrush.Load(graphicsDevice); //Right arm const int rightArmYRadius = 12; const int rightArmXRadius = 6; _rightArmBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightArmXRadius, rightArmYRadius, 1); _rightArmBody.Position = _rightUpperArmBody.Position + new Vector2(0, rightArmYRadius + rightArmYRadius); _rightArmGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightArmBody, rightArmXRadius, rightArmYRadius, 8, 0); _rightArmBrush = new EllipseBrush(rightArmXRadius, rightArmYRadius, Color.White, Color.Black); _rightArmBrush.Load(graphicsDevice); //Left thigh const int leftThighYRadius = 12; const int leftThighXRadius = 6; _leftThighBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftThighXRadius, leftThighYRadius, 2); _leftThighBody.Position = _bodyBody.Position + new Vector2(bodyXRadius, bodyYRadius + leftThighYRadius); _leftThighGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftThighBody, leftThighXRadius, leftThighYRadius, 8, 0); _leftThighBrush = new EllipseBrush(leftThighXRadius, leftThighYRadius, Color.White, Color.Black); _leftThighBrush.Load(graphicsDevice); //right thigh const int rightThighYRadius = 12; const int rightThighXRadius = 6; _rightThighBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightThighXRadius, rightThighYRadius, 2); _rightThighBody.Position = _bodyBody.Position + new Vector2(-bodyXRadius, bodyYRadius + rightThighYRadius); _rightThighGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightThighBody, rightThighXRadius, rightThighYRadius, 8, 0); _rightThighBrush = new EllipseBrush(rightThighXRadius, rightThighYRadius, Color.White, Color.Black); _rightThighBrush.Load(graphicsDevice); //Left calf const int leftCalfYRadius = 12; const int leftCalfXRadius = 6; _leftCalfBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, leftCalfXRadius, leftCalfYRadius, 2); _leftCalfBody.Position = _leftThighBody.Position + new Vector2(0, leftThighYRadius + leftCalfYRadius); _leftCalfGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _leftCalfBody, leftCalfXRadius, leftCalfYRadius, 8, 0); _leftCalfBrush = new EllipseBrush(leftCalfXRadius, leftCalfYRadius, Color.White, Color.Black); _leftCalfBrush.Load(graphicsDevice); //Right calf const int rightCalfYRadius = 12; const int rightCalfXRadius = 6; _rightCalfBody = BodyFactory.Instance.CreateEllipseBody(physicsSimulator, rightCalfXRadius, rightCalfYRadius, 2); _rightCalfBody.Position = _rightThighBody.Position + new Vector2(0, rightThighYRadius + rightCalfYRadius); _rightCalfGeom = GeomFactory.Instance.CreateEllipseGeom(physicsSimulator, _rightCalfBody, rightCalfXRadius, rightCalfYRadius, 8, 0); _rightCalfBrush = new EllipseBrush(rightCalfXRadius, rightCalfYRadius, Color.White, Color.Black); _rightCalfBrush.Load(graphicsDevice); //Create joints //Head -> body JointFactory.Instance.CreatePinJoint(physicsSimulator, _headBody, new Vector2(0, headYRadius), _bodyBody, new Vector2(0, -bodyYRadius)); //Left upper arm -> body PinJoint p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftUpperArmBody, new Vector2(0, -leftUpperArmYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2)); p.TargetDistance = 3; //Right upper arm -> body p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightUpperArmBody, new Vector2(0, -rightUpperArmYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, -bodyYRadius + bodyXRadius / 2)); p.TargetDistance = 3; //Left arm -> left upper arm JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftArmBody, new Vector2(0, -leftArmYRadius), _leftUpperArmBody, new Vector2(0, leftUpperArmYRadius)); //Right arm -> right upper arm JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightArmBody, new Vector2(0, -rightArmYRadius), _rightUpperArmBody, new Vector2(0, rightUpperArmYRadius)); //Left thigh -> body p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftThighBody, new Vector2(0, -leftThighYRadius), _bodyBody, new Vector2(bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2)); p.TargetDistance = 3; //Right thigh -> body p = JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightThighBody, new Vector2(0, -rightThighYRadius), _bodyBody, new Vector2(-bodyXRadius / 2f, bodyYRadius - bodyXRadius / 2)); p.TargetDistance = 3; //Left calf -> left thigh JointFactory.Instance.CreatePinJoint(physicsSimulator, _leftCalfBody, new Vector2(0, -leftCalfYRadius), _leftThighBody, new Vector2(0, leftThighYRadius)); //Right calf -> right thigh JointFactory.Instance.CreatePinJoint(physicsSimulator, _rightCalfBody, new Vector2(0, -rightCalfYRadius), _rightThighBody, new Vector2(0, rightThighYRadius)); }