Example #1
0
		internal DistanceJoint(DistanceJointDef 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;
		}
Example #2
0
 internal DistanceJoint(DistanceJointDef 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;
 }
Example #3
0
 internal DistanceJoint(DistanceJointDef def)
     : base(def)
 {
     _localAnchor1 = def.localAnchorA;
     _localAnchor2 = def.localAnchorB;
     _length       = def.length;
     _frequencyHz  = def.frequencyHz;
     _dampingRatio = def.dampingRatio;
     _impulse      = 0.0f;
     _gamma        = 0.0f;
     _bias         = 0.0f;
 }
Example #4
0
		public Dominos()
		{
			Body b1;
			{
				EdgeShape shape = new EdgeShape();
				shape.Set(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
				shape.Density = 0;

				BodyDef bd = new BodyDef();
				b1 = m_world.CreateBody(bd);
				b1.CreateFixture(shape);
			}

			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(6.0f, 0.25f);

				BodyDef bd = new BodyDef();
				bd.Position.Set(-1.5f, 10.0f);
				Body ground = m_world.CreateBody(bd);
				shape.Density = 0;
				ground.CreateFixture(shape);
			}

			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(0.1f, 1.0f);

				FixtureDef fd = new FixtureDef();
				fd.shape = shape;
				fd.Density = 20.0f;
				fd.friction = 0.1f;

				for (int i = 0; i < 10; ++i)
				{
					BodyDef bd = new BodyDef();
					bd.type = BodyType._dynamicBody;
					bd.Position.Set(-6.0f + 1.0f * i, 11.25f);
					Body body = m_world.CreateBody(bd);
					body.CreateFixture(fd);
				}
			}

			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(7.0f, 0.25f, new Vec2(0, 0), 0.3f);
				shape.Density = 0;

				BodyDef bd = new BodyDef();
				bd.Position.Set(1.0f, 6.0f);
				Body ground = m_world.CreateBody(bd);
				ground.CreateFixture(shape);
			}

			Body b2;
			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(0.25f, 1.5f);
				shape.Density = 0;

				BodyDef bd = new BodyDef();
				bd.Position.Set(-7.0f, 4.0f);
				b2 = m_world.CreateBody(bd);
				b2.CreateFixture(shape);
			}

			Body b3;
			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(6.0f, 0.125f);
				shape.Density = 10;

				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;
				bd.Position.Set(-0.9f, 1.0f);
				bd.angle = -0.15f;

				b3 = m_world.CreateBody(bd);
				b3.CreateFixture(shape);
			}

			RevoluteJointDef jd = new RevoluteJointDef();
			Vec2 anchor = new Vec2();

			anchor.Set(-2.0f, 1.0f);
			jd.Initialize(b1, b3, anchor);
			jd.collideConnected = true;
			m_world.CreateJoint(jd);

			Body b4;
			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(0.25f, 0.25f);

				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;
				bd.Position.Set(-10.0f, 15.0f);
				b4 = m_world.CreateBody(bd);
				shape.Density = 10;
				shape.Density = 10;
				b4.CreateFixture(shape);
			}

			anchor.Set(-7.0f, 15.0f);
			jd.Initialize(b2, b4, anchor);
			m_world.CreateJoint(jd);

			Body b5;
			{
				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;
				bd.Position.Set(6.5f, 3.0f);
				b5 = m_world.CreateBody(bd);

				PolygonShape shape = new PolygonShape();
				FixtureDef fd = new FixtureDef();

				fd.shape = shape;
				fd.Density = 10.0f;
				fd.friction = 0.1f;

				shape.SetAsBox(1.0f, 0.1f, new Vec2(0.0f, -0.9f), 0.0f);
				b5.CreateFixture(fd);

				shape.SetAsBox(0.1f, 1.0f, new Vec2(-0.9f, 0.0f), 0.0f);
				b5.CreateFixture(fd);

				shape.SetAsBox(0.1f, 1.0f, new Vec2(0.9f, 0.0f), 0.0f);
				b5.CreateFixture(fd);
			}

			anchor.Set(6.0f, 2.0f);
			jd.Initialize(b1, b5, anchor);
			m_world.CreateJoint(jd);

			Body b6;
			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(1.0f, 0.1f);

				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;
				bd.Position.Set(6.5f, 4.1f);
				b6 = m_world.CreateBody(bd);
				shape.Density = 30;
				b6.CreateFixture(shape);
			}

			anchor.Set(7.5f, 4.0f);
			jd.Initialize(b5, b6, anchor);
			m_world.CreateJoint(jd);

			Body b7;
			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(0.1f, 1.0f);

				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;
				bd.Position.Set(7.4f, 1.0f);

				b7 = m_world.CreateBody(bd);
				shape.Density = 10;
				b7.CreateFixture(shape);
			}

			DistanceJointDef djd = new DistanceJointDef();
			djd.bodyA = b3;
			djd.bodyB = b7;
			djd.localAnchorA.Set(6.0f, 0.0f);
			djd.localAnchorB.Set(0.0f, -1.0f);
			Vec2 d = djd.bodyB.GetWorldPoint(djd.localAnchorB) - djd.bodyA.GetWorldPoint(djd.localAnchorA);
			djd.length = d.Length();
			m_world.CreateJoint(djd);

			{
				float radius = 0.2f;

				CircleShape shape = new CircleShape();
				shape.m_radius = radius;

				for (int i = 0; i < 4; ++i)
				{
					BodyDef bd = new BodyDef();
					bd.type = BodyType._dynamicBody;
					bd.Position.Set(5.9f + 2.0f * radius * i, 2.4f);
					Body body = m_world.CreateBody(bd);
					shape.Density = 10;
					body.CreateFixture(shape);
				}
			}
		}
Example #5
0
		public Web()
		{
			Body ground = null;
			{
				BodyDef bd = new BodyDef();
				ground = m_world.CreateBody(bd);

				EdgeShape shape = new EdgeShape();
				shape.Set(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
				shape.Density = 0;
				ground.CreateFixture(shape);
			}

			{
				PolygonShape shape = new PolygonShape();
				shape.SetAsBox(0.5f, 0.5f);
				shape.Density = 5;

				BodyDef bd = new BodyDef();
				bd.type = BodyType._dynamicBody;

				bd.Position.Set(-5.0f, 5.0f);
				m_bodies[0] = m_world.CreateBody(bd);
				m_bodies[0].CreateFixture(shape);
				bd.Position.Set(5.0f, 5.0f);
				m_bodies[1] = m_world.CreateBody(bd);
				m_bodies[1].CreateFixture(shape);

				bd.Position.Set(5.0f, 15.0f);
				m_bodies[2] = m_world.CreateBody(bd);
				m_bodies[2].CreateFixture(shape);

				bd.Position.Set(-5.0f, 15.0f);
				m_bodies[3] = m_world.CreateBody(bd);
				m_bodies[3].CreateFixture(shape);

				DistanceJointDef jd = new DistanceJointDef();
				Vec2 p1, p2, d;

				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);
			}
		}
Example #6
0
		public void CreateLeg(float s, Vec2 wheelAnchor)
		{
			Vec2 p1 = new Vec2(5.4f * s, -6.1f);
			Vec2 p2 = new Vec2(7.2f * s, -1.2f);
			Vec2 p3 = new Vec2(4.3f * s, -1.9f);
			Vec2 p4 = new Vec2(3.1f * s, 0.8f);
			Vec2 p5 = new Vec2(6.0f * s, 1.5f);
			Vec2 p6 = new Vec2(2.5f * s, 3.7f);

			FixtureDef fd1 = new FixtureDef();
			FixtureDef fd2 = new FixtureDef();
			fd1.Filter.GroupIndex = -1;
			fd2.Filter.GroupIndex = -1;
			fd1.Density = 1.0f;
			fd2.Density = 1.0f;

			PolygonShape poly1 = new PolygonShape();
			PolygonShape poly2 = new PolygonShape();

			if (s > 0.0f)
			{
				Vec2[] vertices = new Vec2[3];

				vertices[0] = p1;
				vertices[1] = p2;
				vertices[2] = p3;
				poly1.Set(vertices, 3);

				vertices[0] = new Vec2(0, 0);
				vertices[1] = p5 - p4;
				vertices[2] = p6 - p4;
				poly2.Set(vertices, 3);
			}
			else
			{
				Vec2[] vertices = new Vec2[3];

				vertices[0] = p1;
				vertices[1] = p3;
				vertices[2] = p2;
				poly1.Set(vertices, 3);

				vertices[0] = new Vec2(0, 0);
				vertices[1] = p6 - p4;
				vertices[2] = p5 - p4;
				poly2.Set(vertices, 3);
			}

			fd1.shape = poly1;
			fd2.shape = poly2;

			BodyDef bd1 = new BodyDef();
			BodyDef bd2 = new BodyDef();
			bd1.type = BodyType._dynamicBody;
			bd2.type = BodyType._dynamicBody;
			bd1.Position = m_offset;
			bd2.Position = p4 + m_offset;

			bd1.angularDamping = 10.0f;
			bd2.angularDamping = 10.0f;

			Body body1 = m_world.CreateBody(bd1);
			Body body2 = m_world.CreateBody(bd2);

			body1.CreateFixture(fd1);
			body2.CreateFixture(fd2);

			DistanceJointDef djd = new DistanceJointDef();

			// 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);

			RevoluteJointDef rjd = new RevoluteJointDef();

			rjd.Initialize(body2, m_chassis, p4 + m_offset);
			m_world.CreateJoint(rjd);
		}