Пример #1
0
		public TheoJansen()
		{
			_offset.Set(0.0f, 8.0f);
			_motorSpeed = 2.0f;
			_motorOn = true;
			Vec2 pivot = new Vec2(0.0f, 0.8f);

			{
				PolygonDef sd = new PolygonDef();
				sd.SetAsBox(50.0f, 10.0f);

				BodyDef bd = new BodyDef();
				bd.Position.Set(0.0f, -10.0f);
				Body ground = _world.CreateBody(bd);
				ground.CreateShape(sd);

				sd.SetAsBox(0.5f, 5.0f, new Vec2(-50.0f, 15.0f), 0.0f);
				ground.CreateShape(sd);

				sd.SetAsBox(0.5f, 5.0f, new Vec2(50.0f, 15.0f), 0.0f);
				ground.CreateShape(sd);
			}

			for (int i = 0; i < 40; ++i)
			{
				CircleDef sd = new CircleDef();
				sd.Density = 1.0f;
				sd.Radius = 0.25f;

				BodyDef bd = new BodyDef();
				bd.Position.Set(-40.0f + 2.0f * i, 0.5f);

				Body body = _world.CreateBody(bd);
				body.CreateShape(sd);
				body.SetMassFromShapes();
			}

			{
				PolygonDef sd = new PolygonDef();
				sd.Density = 1.0f;
				sd.SetAsBox(2.5f, 1.0f);
				sd.Filter.GroupIndex = -1;
				BodyDef bd = new BodyDef();
				bd.Position = pivot + _offset;
				_chassis = _world.CreateBody(bd);
				_chassis.CreateShape(sd);
				_chassis.SetMassFromShapes();
			}

			{
				CircleDef sd = new CircleDef();
				sd.Density = 1.0f;
				sd.Radius = 1.6f;
				sd.Filter.GroupIndex = -1;
				BodyDef bd = new BodyDef();
				bd.Position = pivot + _offset;
				_wheel = _world.CreateBody(bd);
				_wheel.CreateShape(sd);
				_wheel.SetMassFromShapes();
			}

			{
				RevoluteJointDef jd = new RevoluteJointDef();
				jd.Initialize(_wheel, _chassis, pivot + _offset);
				jd.CollideConnected = false;
				jd.MotorSpeed = _motorSpeed;
				jd.MaxMotorTorque = 400.0f;
				jd.EnableMotor = _motorOn;
				_motorJoint = (RevoluteJoint)_world.CreateJoint(jd);
			}

			Vec2 wheelAnchor;
			
			wheelAnchor = pivot + new Vec2(0.0f, -0.8f);

			CreateLeg(-1.0f, wheelAnchor);
			CreateLeg(1.0f, wheelAnchor);

			_wheel.SetXForm(_wheel.GetPosition(), 120.0f * Box2DX.Common.Settings.Pi / 180.0f);
			CreateLeg(-1.0f, wheelAnchor);
			CreateLeg(1.0f, wheelAnchor);

			_wheel.SetXForm(_wheel.GetPosition(), -120.0f * Box2DX.Common.Settings.Pi / 180.0f);
			CreateLeg(-1.0f, wheelAnchor);
			CreateLeg(1.0f, wheelAnchor);
		}