internal b2DistanceJoint(b2DistanceJointDef def) : base(def) { m_localAnchorA = def.localAnchorA; m_localAnchorB = def.localAnchorB; m_length = def.length; m_frequencyHz = def.frequencyHz; m_dampingRatio = def.dampingRatio; m_impulse = 0.0f; m_gamma = 0.0f; m_bias = 0.0f; }
public Web() { b2Body ground = null; { b2BodyDef bd = new b2BodyDef(); ground = m_world.CreateBody(bd); b2EdgeShape shape = new b2EdgeShape(); shape.Set(new b2Vec2(-40.0f, 0.0f), new b2Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(0.5f, 0.5f); b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(-5.0f, 5.0f); m_bodies[0] = m_world.CreateBody(bd); m_bodies[0].CreateFixture(shape, 5.0f); bd.position.Set(5.0f, 5.0f); m_bodies[1] = m_world.CreateBody(bd); m_bodies[1].CreateFixture(shape, 5.0f); bd.position.Set(5.0f, 15.0f); m_bodies[2] = m_world.CreateBody(bd); m_bodies[2].CreateFixture(shape, 5.0f); bd.position.Set(-5.0f, 15.0f); m_bodies[3] = m_world.CreateBody(bd); m_bodies[3].CreateFixture(shape, 5.0f); b2DistanceJointDef jd = new b2DistanceJointDef(); b2Vec2 p1 = new b2Vec2(); b2Vec2 p2 = new b2Vec2(); b2Vec2 d = new b2Vec2(); jd.frequencyHz = 2.0f; jd.dampingRatio = 0.0f; jd.BodyA = ground; jd.BodyB = m_bodies[0]; jd.localAnchorA.Set(-10.0f, 0.0f); jd.localAnchorB.Set(-0.5f, -0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[0] = m_world.CreateJoint(jd); jd.BodyA = ground; jd.BodyB = m_bodies[1]; jd.localAnchorA.Set(10.0f, 0.0f); jd.localAnchorB.Set(0.5f, -0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[1] = m_world.CreateJoint(jd); jd.BodyA = ground; jd.BodyB = m_bodies[2]; jd.localAnchorA.Set(10.0f, 20.0f); jd.localAnchorB.Set(0.5f, 0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[2] = m_world.CreateJoint(jd); jd.BodyA = ground; jd.BodyB = m_bodies[3]; jd.localAnchorA.Set(-10.0f, 20.0f); jd.localAnchorB.Set(-0.5f, 0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[3] = m_world.CreateJoint(jd); jd.BodyA = m_bodies[0]; jd.BodyB = m_bodies[1]; jd.localAnchorA.Set(0.5f, 0.0f); jd.localAnchorB.Set(-0.5f, 0.0f); ; p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[4] = m_world.CreateJoint(jd); jd.BodyA = m_bodies[1]; jd.BodyB = m_bodies[2]; jd.localAnchorA.Set(0.0f, 0.5f); jd.localAnchorB.Set(0.0f, -0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[5] = m_world.CreateJoint(jd); jd.BodyA = m_bodies[2]; jd.BodyB = m_bodies[3]; jd.localAnchorA.Set(-0.5f, 0.0f); jd.localAnchorB.Set(0.5f, 0.0f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[6] = m_world.CreateJoint(jd); jd.BodyA = m_bodies[3]; jd.BodyB = m_bodies[0]; jd.localAnchorA.Set(0.0f, -0.5f); jd.localAnchorB.Set(0.0f, 0.5f); p1 = jd.BodyA.GetWorldPoint(jd.localAnchorA); p2 = jd.BodyB.GetWorldPoint(jd.localAnchorB); d = p2 - p1; jd.length = d.Length; m_joints[7] = m_world.CreateJoint(jd); } }
public Dominos() { b2Body b1; { b2EdgeShape shape = new b2EdgeShape(); shape.Set(new b2Vec2(-40.0f, 0.0f), new b2Vec2(40.0f, 0.0f)); b2BodyDef bd = new b2BodyDef(); b1 = m_world.CreateBody(bd); b1.CreateFixture(shape, 0.0f); } { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(6.0f, 0.25f); b2BodyDef bd = new b2BodyDef(); bd.position.Set(-1.5f, 10.0f); b2Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(0.1f, 1.0f); b2FixtureDef fd = new b2FixtureDef(); fd.shape = shape; fd.density = 20.0f; fd.friction = 0.1f; for (int i = 0; i < 10; ++i) { b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(-6.0f + 1.0f * i, 11.25f); b2Body body = m_world.CreateBody(bd); body.CreateFixture(fd); } } { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(7.0f, 0.25f, b2Vec2.Zero, 0.3f); b2BodyDef bd = new b2BodyDef(); bd.position.Set(1.0f, 6.0f); b2Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } b2Body b2; { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(0.25f, 1.5f); b2BodyDef bd = new b2BodyDef(); bd.position.Set(-7.0f, 4.0f); b2 = m_world.CreateBody(bd); b2.CreateFixture(shape, 0.0f); } b2Body b3; { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(6.0f, 0.125f); b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(-0.9f, 1.0f); bd.angle = -0.15f; b3 = m_world.CreateBody(bd); b3.CreateFixture(shape, 10.0f); } b2RevoluteJointDef jd = new b2RevoluteJointDef(); b2Vec2 anchor = new b2Vec2(); anchor.Set(-2.0f, 1.0f); jd.Initialize(b1, b3, anchor); jd.CollideConnected = true; m_world.CreateJoint(jd); b2Body b4; { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(0.25f, 0.25f); b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(-10.0f, 15.0f); b4 = m_world.CreateBody(bd); b4.CreateFixture(shape, 10.0f); } anchor.Set(-7.0f, 15.0f); jd.Initialize(b2, b4, anchor); m_world.CreateJoint(jd); b2Body b5; { b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(6.5f, 3.0f); b5 = m_world.CreateBody(bd); b2PolygonShape shape = new b2PolygonShape(); b2FixtureDef fd = new b2FixtureDef(); fd.shape = shape; fd.density = 10.0f; fd.friction = 0.1f; shape.SetAsBox(1.0f, 0.1f, new b2Vec2(0.0f, -0.9f), 0.0f); b5.CreateFixture(fd); shape.SetAsBox(0.1f, 1.0f, new b2Vec2(-0.9f, 0.0f), 0.0f); b5.CreateFixture(fd); shape.SetAsBox(0.1f, 1.0f, new b2Vec2(0.9f, 0.0f), 0.0f); b5.CreateFixture(fd); } anchor.Set(6.0f, 2.0f); jd.Initialize(b1, b5, anchor); m_world.CreateJoint(jd); b2Body b6; { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(1.0f, 0.1f); b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(6.5f, 4.1f); b6 = m_world.CreateBody(bd); b6.CreateFixture(shape, 30.0f); } anchor.Set(7.5f, 4.0f); jd.Initialize(b5, b6, anchor); m_world.CreateJoint(jd); b2Body b7; { b2PolygonShape shape = new b2PolygonShape(); shape.SetAsBox(0.1f, 1.0f); b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(7.4f, 1.0f); b7 = m_world.CreateBody(bd); b7.CreateFixture(shape, 10.0f); } b2DistanceJointDef djd = new b2DistanceJointDef(); djd.BodyA = b3; djd.BodyB = b7; djd.localAnchorA.Set(6.0f, 0.0f); djd.localAnchorB.Set(0.0f, -1.0f); b2Vec2 d = djd.BodyB.GetWorldPoint(djd.localAnchorB) - djd.BodyA.GetWorldPoint(djd.localAnchorA); djd.length = d.Length; m_world.CreateJoint(djd); { float radius = 0.2f; b2CircleShape shape = new b2CircleShape(); shape.Radius = radius; for (int i = 0; i < 4; ++i) { b2BodyDef bd = new b2BodyDef(); bd.type = b2BodyType.b2_dynamicBody; bd.position.Set(5.9f + 2.0f * radius * i, 2.4f); b2Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 10.0f); } } }
public void CreateLeg(float s, b2Vec2 wheelAnchor) { b2Vec2 p1 = new b2Vec2(5.4f * s, -6.1f); b2Vec2 p2 = new b2Vec2(7.2f * s, -1.2f); b2Vec2 p3 = new b2Vec2(4.3f * s, -1.9f); b2Vec2 p4 = new b2Vec2(3.1f * s, 0.8f); b2Vec2 p5 = new b2Vec2(6.0f * s, 1.5f); b2Vec2 p6 = new b2Vec2(2.5f * s, 3.7f); b2FixtureDef fd1 = new b2FixtureDef(); b2FixtureDef fd2 = new b2FixtureDef(); fd1.filter.groupIndex = -1; fd2.filter.groupIndex = -1; fd1.density = 1.0f; fd2.density = 1.0f; b2PolygonShape poly1 = new b2PolygonShape(); b2PolygonShape poly2 = new b2PolygonShape(); if (s > 0.0f) { b2Vec2[] vertices = new b2Vec2[3]; vertices[0] = p1; vertices[1] = p2; vertices[2] = p3; poly1.Set(vertices, 3); vertices[0] = b2Vec2.Zero; vertices[1] = p5 - p4; vertices[2] = p6 - p4; poly2.Set(vertices, 3); } else { b2Vec2[] vertices = new b2Vec2[3]; vertices[0] = p1; vertices[1] = p3; vertices[2] = p2; poly1.Set(vertices, 3); vertices[0] = b2Vec2.Zero; vertices[1] = p6 - p4; vertices[2] = p5 - p4; poly2.Set(vertices, 3); } fd1.shape = poly1; fd2.shape = poly2; b2BodyDef bd1 = new b2BodyDef(); b2BodyDef bd2 = new b2BodyDef(); bd1.type = b2BodyType.b2_dynamicBody; bd2.type = b2BodyType.b2_dynamicBody; bd1.position = m_offset; bd2.position = p4 + m_offset; bd1.angularDamping = 10.0f; bd2.angularDamping = 10.0f; b2Body body1 = m_world.CreateBody(bd1); b2Body body2 = m_world.CreateBody(bd2); body1.CreateFixture(fd1); body2.CreateFixture(fd2); b2DistanceJointDef djd = new b2DistanceJointDef(); // Using a soft distance constraint can reduce some jitter. // It also makes the structure seem a bit more fluid by // acting like a suspension system. djd.dampingRatio = 0.5f; djd.frequencyHz = 10.0f; djd.Initialize(body1, body2, p2 + m_offset, p5 + m_offset); m_world.CreateJoint(djd); djd.Initialize(body1, body2, p3 + m_offset, p4 + m_offset); m_world.CreateJoint(djd); djd.Initialize(body1, m_wheel, p3 + m_offset, wheelAnchor + m_offset); m_world.CreateJoint(djd); djd.Initialize(body2, m_wheel, p6 + m_offset, wheelAnchor + m_offset); m_world.CreateJoint(djd); b2RevoluteJointDef rjd = new b2RevoluteJointDef(); rjd.Initialize(body2, m_chassis, p4 + m_offset); m_world.CreateJoint(rjd); }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(b2DistanceJointDef obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }