public Confined() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); // Floor shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); // Left wall shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(-10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Right wall shape.SetAsEdge(new Vec2(10.0f, 0.0f), new Vec2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Roof shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } m_world.Gravity = new Vec2(0.0f, 0.0f); }
private void CreateGroundAndWalls() { var grounDef = new BodyDef(); grounDef.type = BodyType.Static; var groundFix = new FixtureDef(); groundFix.restitution = 1.0f; groundFix.friction = 0.0f; groundFix.density = 0.0f; var groundShape = new PolygonShape(); groundShape.SetAsEdge(new Vector2(0, 8), new Vector2(4.8f, 8.0f)); var groundBody = world.CreateBody(grounDef); groundFix.shape = groundShape; groundBody.CreateFixture(groundFix); groundShape.SetAsEdge(new Vector2(0, 0), new Vector2(0f, 8.0f)); var leftBody = world.CreateBody(grounDef); groundFix.shape = groundShape; leftBody.CreateFixture(groundFix); groundShape.SetAsEdge(new Vector2(4.8f, 0), new Vector2(4.8f, 8.0f)); var rightBody = world.CreateBody(grounDef); groundFix.shape = groundShape; rightBody.CreateFixture(groundFix); groundShape.SetAsEdge(new Vector2(0, 0), new Vector2(4.8f, 0)); var topBody = world.CreateBody(grounDef); groundFix.shape = groundShape; topBody.CreateFixture(groundFix); }
public Confined() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); // Floor shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); // Left wall shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(-10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Right wall shape.SetAsEdge(new Vec2(10.0f, 0.0f), new Vec2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Roof shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } m_world.Gravity = new Vec2(0.0f, 0.0f); }
VerticalStack() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0f); shape.SetAsEdge(new Vector2(20.0f, 0.0f), new Vector2(20.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } double[] xs = new double[5] { 0.0f, -10.0f, -5.0f, 5.0f, 10.0f }; for (int j = 0; j < (int)StackOptions.e_columnCount; ++j) { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.5f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; fd.friction = 0.3f; for (int i = 0; i < (int)StackOptions.e_rowCount; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; int n = j * e_rowCount + i; Debug.Assert(n < e_rowCount * e_columnCount); _indices[n] = n; bd.userData = _indices[n]; double x = 0.0f; //double x = Rand.RandomFloat-0.02f, 0.02f); //double x = i % 2 == 0 ? -0.025f : 0.025f; bd.position = new Vector2(xs[j] + x, 0.752f + 1.54f * i); Body body = _world.CreateBody(bd); _bodies[n] = body; body.CreateFixture(fd); } } _bullet = null; }
public Confined() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); // Floor shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); // Left wall shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(-10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Right wall shape.SetAsEdge(new Vector2(10.0f, 0.0f), new Vector2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Roof shape.SetAsEdge(new Vector2(-10.0f, 20.0f), new Vector2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } float radius = 0.5f; CircleShape shape2 = new CircleShape(); shape2._p = Vector2.Zero; shape2._radius = radius; FixtureDef fd = new FixtureDef(); fd.shape = shape2; fd.density = 1.0f; fd.friction = 0.1f; for (int j = 0; j < e_columnCount; ++j) { for (int i = 0; i < e_rowCount; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius); Body body = _world.CreateBody(bd); body.CreateFixture(fd); } } _world.Gravity = new Vector2(0.0f, 0.0f); }
VerticalStack() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); shape.SetAsEdge(new Vector2(20.0f, 0.0f), new Vector2(20.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } float[] xs = new float[5] {0.0f, -10.0f, -5.0f, 5.0f, 10.0f}; for (int j = 0; j < (int)StackOptions.e_columnCount; ++j) { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.5f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; fd.friction = 0.3f; for (int i = 0; i < (int)StackOptions.e_rowCount; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; int n = j * e_rowCount + i; Debug.Assert(n < e_rowCount * e_columnCount); _indices[n] = n; bd.userData = _indices[n]; float x = 0.0f; //float x = Rand.RandomFloat-0.02f, 0.02f); //float x = i % 2 == 0 ? -0.025f : 0.025f; bd.position = new Vector2(xs[j] + x, 0.752f + 1.54f * i); Body body = _world.CreateBody(bd); _bodies[n] = body; body.CreateFixture(fd); } } _bullet = null; }
public Confined() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); // Floor shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); // Left wall shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(-10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Right wall shape.SetAsEdge(new Vector2(10.0f, 0.0f), new Vector2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); // Roof shape.SetAsEdge(new Vector2(-10.0f, 20.0f), new Vector2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } float radius = 0.5f; CircleShape shape2 = new CircleShape(); shape2._p = Vector2.Zero; shape2._radius = radius; FixtureDef fd = new FixtureDef(); fd.shape = shape2; fd.density = 1.0f; fd.friction = 0.1f; for (int j = 0; j < e_columnCount; ++j) { for (int i = 0; i < e_rowCount; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f + (2.1f * j + 1.0f + 0.01f * i) * radius, (2.0f * i + 1.0f) * radius); Body body = _world.CreateBody(bd); body.CreateFixture(fd); } } _world.Gravity = new Vector2(0.0f, 0.0f); }
private void AddGround() { //Window dimensions int windowWidth = Window.ClientBounds.Width; int windowHeight = Window.ClientBounds.Height; //Ground body definition BodyDef bd = new BodyDef(); Body ground = physicsWorld.CreateBody(bd); //Add line fixture to ground body PolygonShape bottomBounds = new PolygonShape(); bottomBounds.SetAsEdge(new Vector2(0.0f, windowHeight - 25), new Vector2(windowWidth, windowHeight - 25)); PolygonShape topBounds = new PolygonShape(); topBounds.SetAsEdge(new Vector2(0.0f, 0.0f), new Vector2(windowWidth, 0.0f)); PolygonShape leftBounds = new PolygonShape(); leftBounds.SetAsEdge(new Vector2(25.0f, 0.0f), new Vector2(25.0f, windowHeight)); PolygonShape rightBounds = new PolygonShape(); rightBounds.SetAsEdge(new Vector2(windowWidth - 25, 0.0f), new Vector2(windowWidth - 25, windowHeight)); ground.CreateFixture(bottomBounds, 10.0f); ground.CreateFixture(topBounds, 10.0f); ground.CreateFixture(leftBounds, 10.0f); ground.CreateFixture(rightBounds, 10.0f); }
public ShapeEditing() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } BodyDef bodydef = new BodyDef(); bodydef.type = BodyType.Dynamic; bodydef.position = new Vector2(0.0, 10.0); _body = _world.CreateBody(bodydef); PolygonShape shape2 = new PolygonShape(); shape2.SetAsBox(4.0f, 4.0f, new Vector2(0.0f, 0.0f), 0.0f); //NoNeed _fixture1 = _body.CreateFixture(shape2, 10.0); _fixture2 = null; }
public SphereStack() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape._radius = 1.0f; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 4.0f + 3.0f * i); _bodies[i] = _world.CreateBody(bd); _bodies[i].CreateFixture(shape, 1.0f); //_bodies[i].SetLinearVelocity(new Vector2(0.0f, -100.0f)); } } }
public Breakable() { // Ground body { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Breakable dynamic body { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 40.0f); bd.angle = 0.25f * Settings.b2_pi; _body1 = _world.CreateBody(bd); _shape1 = new PolygonShape(); _shape1.SetAsBox(0.5f, 0.5f, new Vector2(-0.5f, 0.0f), 0.0f); _piece1 = _body1.CreateFixture(_shape1, 1.0f); _shape2 = new PolygonShape(); _shape2.SetAsBox(0.5f, 0.5f, new Vector2(0.5f, 0.0f), 0.0f); _piece2 = _body1.CreateFixture(_shape2, 1.0f); } _break = false; _broke = false; }
public SphereStack() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); for (int i = 0; i < e_count; ++i) { shape.Radius = Rand.RandomFloat(0.5f, 0.5f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 4.0f + 3.0f * i); m_bodies[i] = m_world.CreateBody(bd); m_bodies[i].CreateFixture(shape, 1.0f); } } }
public LineJoint() { Body ground = null; { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 2.0f); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 7.0f); Body body = _world.CreateBody(bd); body.CreateFixture(shape, 1.0f); LineJointDef jd = new LineJointDef(); Vector2 axis = new Vector2(2.0f, 1.0f); axis.Normalize(); jd.Initialize(ground, body, new Vector2(0.0f, 8.5f), axis); jd.motorSpeed = 0.0f; jd.maxMotorForce = 100.0f; jd.enableMotor = true; jd.lowerTranslation = -4.0f; jd.upperTranslation = 4.0f; jd.enableLimit = true; _world.CreateJoint(jd); } }
public Breakable() { // Ground body { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Breakable dynamic body { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 40.0f); bd.angle = 0.25f * Settings.b2_pi; _body1 = _world.CreateBody(bd); _shape1 = new PolygonShape(); _shape1.SetAsBox(0.5f, 0.5f, new Vector2(-0.5f, 0.0f), 0.0f); _piece1 = _body1.CreateFixture(_shape1, 1.0f); _shape2 = new PolygonShape(); _shape2.SetAsBox(0.5f, 0.5f, new Vector2(0.5f, 0.0f), 0.0f); _piece2 = _body1.CreateFixture(_shape2, 1.0f); } _break = false; _broke = false; }
public SphereStack() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } { CircleShape shape = new CircleShape(); shape._radius = 1.0f; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0, 4.0 + 3.0 * i); _bodies[i] = _world.CreateBody(bd); _bodies[i].CreateFixture(shape, 1.0); //_bodies[i].SetLinearVelocity(new Vector2(0.0, -100.0)); } } }
public SphereStack() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); for (int i = 0; i < e_count; ++i) { shape.Radius = Rand.RandomFloat(0.5f, 0.5f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 4.0f + 3.0f * i); m_bodies[i] = m_world.CreateBody(bd); m_bodies[i].CreateFixture(shape, 1.0f); } } }
public LineJoint() { Body ground = null; { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 2.0f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 7.0f); Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 1.0f); LineJointDef jd = new LineJointDef(); Vec2 axis = new Vec2(2.0f, 1.0f); axis.Normalize(); jd.Initialize(ground, body, new Vec2(0.0f, 8.5f), axis); jd.MotorSpeed = 0.0f; jd.MaxMotorForce = 100.0f; jd.EnableMotor = true; jd.LowerTranslation = -4.0f; jd.UpperTranslation = 4.0f; jd.EnableLimit = true; m_world.CreateJoint(jd); } }
public LineJoint() { Body ground = null; { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); ground.CreateFixture(shape, 0.0); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5, 2.0); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0, 7.0); Body body = _world.CreateBody(bd); body.CreateFixture(shape, 1.0); LineJointDef jd = new LineJointDef(); Vector2 axis = new Vector2(2.0, 1.0); axis.Normalize(); jd.Initialize(ground, body, new Vector2(0.0, 8.5), axis); jd.motorSpeed = 0.0; jd.maxMotorForce = 100.0; jd.enableMotor = true; jd.lowerTranslation = -4.0; jd.upperTranslation = 4.0; jd.enableLimit = true; _world.CreateJoint(jd); } }
VaryingRestitution() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape._radius = 1.0f; FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; float[] restitution = new float[7] {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f}; for (int i = 0; i < 7; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f + 3.0f * i, 20.0f); Body body = _world.CreateBody(bd); fd.restitution = restitution[i]; body.CreateFixture(fd); } } }
public VaryingRestitution() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 1.0f; FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Density = 1.0f; float[] restitution = {0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f}; for (int i = 0; i < 7; ++i) { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f); Body body = m_world.CreateBody(bd); fd.Restitution = restitution[i]; fd.UserData = i; body.CreateFixture(fd); } } }
public VaryingRestitution() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 1.0f; FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Density = 1.0f; float[] restitution = { 0.0f, 0.1f, 0.3f, 0.5f, 0.75f, 0.9f, 1.0f }; for (int i = 0; i < 7; ++i) { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f); Body body = m_world.CreateBody(bd); fd.Restitution = restitution[i]; fd.UserData = i; body.CreateFixture(fd); } } }
public Revolute() { System.Collections.Generic.List <JointDef> joints = new System.Collections.Generic.List <JointDef>(); Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 0.5f; BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; RevoluteJointDef rjd = new RevoluteJointDef(); bd.Position = new Vec2(0.0f, 20.0f); Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 5.0f); float w = 100.0f; body.AngularVelocity = w; body.LinearVelocity = new Vec2(-8.0f * w, 0.0f); rjd.Initialize(ground, body, new Vec2(0.0f, 12.0f)); rjd.MotorSpeed = 1.0f * (float)Math.PI; rjd.MaxMotorTorque = 10000.0f; rjd.EnableMotor = false; rjd.LowerAngle = -0.25f * (float)Math.PI; rjd.UpperAngle = 0.5f * (float)Math.PI; rjd.EnableLimit = true; rjd.CollideConnected = true; m_joint = (RevoluteJoint)m_world.CreateJoint(rjd); joints.Add(rjd); } using (System.IO.FileStream fs = new System.IO.FileStream("out.xml", System.IO.FileMode.Create)) { var serializer = Box2CS.Serialize.WorldSerializer.SerializeWorld(m_world, new Box2CS.Serialize.WorldXmlSerializer()); foreach (var j in joints) { serializer.AddJoint(j); } serializer.Serialize(fs); } }
// Polygon versus 2-sided edge. /// <summary> /// Collides the poly and edge using the specified manifold /// </summary> /// <param name="manifold">The manifold</param> /// <param name="polygon">The polygon</param> /// <param name="transformA">The transform</param> /// <param name="edge">The edge</param> /// <param name="transformB">The transform</param> public static void CollidePolyAndEdge(ref Manifold manifold, PolygonShape polygon, XForm transformA, EdgeShape edge, XForm transformB) { PolygonShape polygonB = new PolygonShape(); polygonB.SetAsEdge(edge.Vertex1, edge.Vertex2); CollidePolygons(ref manifold, polygon, transformA, polygonB, transformB); }
public ConfinedBullet() { { BodyDef bd = new BodyDef(); { Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); { shape.SetAsEdge(new Vec2(-10.0f, 0.0f), new Vec2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } ground = m_world.CreateBody(bd); shape = new PolygonShape(); { shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(10.0f, 20.0f)); ground.CreateFixture(shape, 0.0f); } ground = m_world.CreateBody(bd); shape = new PolygonShape(); { shape.SetAsEdge(new Vec2(-10.0f, 20.0f), new Vec2(-10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } ground = m_world.CreateBody(bd); shape = new PolygonShape(); { shape.SetAsEdge(new Vec2(10.0f, 20.0f), new Vec2(10.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } } bd = new BodyDef(); { bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0, 10.0f); { PolygonShape bottom = new PolygonShape(1.5f, 0.15f); PolygonShape left = new PolygonShape(0.15f, 2.7f, new Vec2(-1.45f, 2.35f), 0.2f); PolygonShape right = new PolygonShape(0.15f, 2.7f, new Vec2(1.45f, 2.35f), -0.2f); var body = m_world.CreateBody(bd); body.IsBullet = true; body.CreateFixture(new FixtureDef(bottom, 1.0f, 10, 0.1f)); body.CreateFixture(new FixtureDef(left, 1.0f, 10, 0.1f)); body.CreateFixture(new FixtureDef(right, 1.0f, 10, 0.1f)); } } } }
public Revolute() { System.Collections.Generic.List<JointDef> joints = new System.Collections.Generic.List<JointDef>(); Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 0.5f; BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; RevoluteJointDef rjd = new RevoluteJointDef(); bd.Position = new Vec2(0.0f, 20.0f); Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 5.0f); float w = 100.0f; body.AngularVelocity = w; body.LinearVelocity = new Vec2(-8.0f * w, 0.0f); rjd.Initialize(ground, body, new Vec2(0.0f, 12.0f)); rjd.MotorSpeed = 1.0f * (float)Math.PI; rjd.MaxMotorTorque = 10000.0f; rjd.EnableMotor = false; rjd.LowerAngle = -0.25f * (float)Math.PI; rjd.UpperAngle = 0.5f * (float)Math.PI; rjd.EnableLimit = true; rjd.CollideConnected = true; m_joint = (RevoluteJoint)m_world.CreateJoint(rjd); joints.Add(rjd); } using (System.IO.FileStream fs = new System.IO.FileStream("out.xml", System.IO.FileMode.Create)) { var serializer = Box2CS.Serialize.WorldSerializer.SerializeWorld(m_world, new Box2CS.Serialize.WorldXmlSerializer()); foreach (var j in joints) serializer.AddJoint(j); serializer.Serialize(fs); } }
private void LoadGround() { BodyDef bd = new BodyDef(); bd.type = BodyType.Static; bd.position = Vector2.Zero; ground = world.CreateBody(bd); Vector2[] vertices = new Vector2[4]; vertices[0] = new Vector2(0, 0); vertices[1] = new Vector2(Width * TileWidth, 0); vertices[2] = new Vector2(Width * TileWidth, Height * TileHeight); vertices[3] = new Vector2(0, Height * TileHeight); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(vertices[0], vertices[1]); ground.CreateFixture(shape, 1); shape.SetAsEdge(vertices[1], vertices[2]); ground.CreateFixture(shape, 1); shape.SetAsEdge(vertices[2], vertices[3]); ground.CreateFixture(shape, 1); shape.SetAsEdge(vertices[3], vertices[0]); ground.CreateFixture(shape, 1); }
public SensorTest() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } #if false { FixtureDef sd; sd.SetAsBox(10.0f, 2.0f, new Vector2(0.0f, 20.0f), 0.0f); sd.isSensor = true; _sensor = ground.CreateFixture(&sd); } #else { CircleShape shape = new CircleShape(); shape._radius = 5.0; shape._p = new Vector2(0.0, 10.0); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.isSensor = true; _sensor = ground.CreateFixture(fd); } #endif } { CircleShape shape = new CircleShape(); shape._radius = 1.0; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0 + 3.0 * i, 20.0); bd.userData = i; _touching[i] = false; _bodies[i] = _world.CreateBody(bd); _bodies[i].CreateFixture(shape, 1.0); } } }
public SensorTest() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } #if false { FixtureDef sd; sd.SetAsBox(10.0f, 2.0f, new Vector2(0.0f, 20.0f), 0.0f); sd.isSensor = true; _sensor = ground.CreateFixture(&sd); } #else { CircleShape shape = new CircleShape(); shape._radius = 5.0f; shape._p = new Vector2(0.0f, 10.0f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.isSensor = true; _sensor = ground.CreateFixture(fd); } #endif } { CircleShape shape = new CircleShape(); shape._radius = 1.0f; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f + 3.0f * i, 20.0f); bd.userData = i; _touching[i] = false; _bodies[i] = _world.CreateBody(bd); _bodies[i].CreateFixture(shape, 1.0f); } } }
public ContinuousTest() { { BodyDef bd = new BodyDef(); bd.position = new Vector2(0.0f, 0.0f); Body body = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f)); body.CreateFixture(shape, 1.0f); shape.SetAsBox(0.2f, 1.0f, new Vector2(0.5f, 1.0f), 0.0f); body.CreateFixture(shape, 1.0f); } #if true { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 20.0f); //bd.angle = 0.1f; PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.1f); _body = _world.CreateBody(bd); _body.CreateFixture(shape, 1.0f); Launch(); } #else { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 0.5f); Body body = _world.CreateBody(bd); CircleShape shape = new CircleShape(); shape._p = new Vector2Zero(); shape._radius = 0.5f; body.CreateFixture(shape, 1.0f); //bd.bullet = true; bd.position = new Vector2(0.0f, 10.0f); body = _world.CreateBody(bd); body.CreateFixture(shape, 1.0f); body.SetLinearVelocity(new Vector2(0.0f, -100.0f)); } #endif }
public ContinuousTest() { { BodyDef bd = new BodyDef(); bd.position = new Vector2(0.0f, 0.0f); Body body = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-10.0f, 0.0f), new Vector2(10.0f, 0.0f)); body.CreateFixture(shape, 1.0f); shape.SetAsBox(0.2f, 1.0f, new Vector2(0.5f, 1.0f), 0.0f); body.CreateFixture(shape, 1.0f); } #if true { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 20.0f); //bd.angle = 0.1f; PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.1f); _body = _world.CreateBody(bd); _body.CreateFixture(shape, 1.0f); Launch(); } #else { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 0.5f); Body body = _world.CreateBody(bd); CircleShape shape = new CircleShape(); shape._p = new Vector2Zero(); shape._radius = 0.5f; body.CreateFixture(shape, 1.0f); //bd.bullet = true; bd.position = new Vector2(0.0f, 10.0f); body = _world.CreateBody(bd); body.CreateFixture(shape, 1.0f); body.SetLinearVelocity(new Vector2(0.0f, -100.0f)); } #endif }
public PolyCollision() { { _polygonA.SetAsEdge(new Vector2(20.0, 0.0), new Vector2(20.0, 20.0)); _transformA.Set(new Vector2(0.0, 0.0), 0.0); } { _polygonB.SetAsBox(0.25f, 0.25f); _positionB = new Vector2(19.345284f, 1.5632932f); _angleB = 1.9160721f; _transformB.Set(_positionB, _angleB); } }
public Prismatic() { Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.5f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f, 10.0f); bd.Angle = 0.5f * (float)Math.PI; bd.AllowSleep = false; Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 5.0f); PrismaticJointDef pjd = new PrismaticJointDef(); // Bouncy limit Vec2 axis = new Vec2(2.0f, 1.0f); axis.Normalize(); pjd.Initialize(ground, body, new Vec2(0.0f, 0.0f), axis); // Non-bouncy limit //pjd.Initialize(ground, body, new Vec2(-10.0f, 10.0f), new Vec2(1.0f, 0.0f)); pjd.MotorSpeed = 10.0f; pjd.MaxMotorForce = 10000.0f; pjd.EnableMotor = true; pjd.LowerTranslation = 0.0f; pjd.UpperTranslation = 20.0f; pjd.EnableLimit = false; m_joint = (PrismaticJoint)m_world.CreateJoint(pjd); } }
public Prismatic() { Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.5f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f, 10.0f); bd.Angle = 0.5f * (float)Math.PI; bd.AllowSleep = false; Body body = m_world.CreateBody(bd); body.CreateFixture(shape, 5.0f); PrismaticJointDef pjd = new PrismaticJointDef(); // Bouncy limit Vec2 axis = new Vec2(2.0f, 1.0f); axis.Normalize(); pjd.Initialize(ground, body, new Vec2(0.0f, 0.0f), axis); // Non-bouncy limit //pjd.Initialize(ground, body, new Vec2(-10.0f, 10.0f), new Vec2(1.0f, 0.0f)); pjd.MotorSpeed = 10.0f; pjd.MaxMotorForce = 10000.0f; pjd.EnableMotor = true; pjd.LowerTranslation = 0.0f; pjd.UpperTranslation = 20.0f; pjd.EnableLimit = false; m_joint = (PrismaticJoint)m_world.CreateJoint(pjd); } }
public OneSidedPlatform() { // Ground { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-20.0f, 0.0f), new Vector2(20.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Platform { BodyDef bd = new BodyDef(); bd.position = new Vector2(0.0f, 10.0f); Body body = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(3.0f, 0.5f); _platform = body.CreateFixture(shape, 0.0f); _bottom = 10.0f - 0.5f; _top = 10.0f + 0.5f; } // Actor { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 12.0f); Body body = _world.CreateBody(bd); _radius = 0.5f; CircleShape shape = new CircleShape(); shape._radius = _radius; _character = body.CreateFixture(shape, 20.0f); body.SetLinearVelocity(new Vector2(0.0f, -50.0f)); _state = State.e_unknown; } }
public SensorTest() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 5.0f; shape.Position = new Vec2(0.0f, 10.0f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.IsSensor = true; m_sensor = ground.CreateFixture(fd); } } { CircleShape shape = new CircleShape(); for (int i = 0; i < e_count; ++i) { shape.Radius = Rand.RandomFloat(0.85f, 1.0f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f); bd.UserData = i; m_touching[i] = false; m_bodies[i] = m_world.CreateBody(bd); m_bodies[i].CreateFixture(shape, 1.0f); } } }
public Prismatic() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0f, 0.5f); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f, 10.0f); bd.angle = 0.5f * (float)Settings.b2_pi; Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0f); PrismaticJointDef pjd = new PrismaticJointDef(); // Bouncy limit Vector2 axis = new Vector2(2, 1); axis.Normalize(); pjd.Initialize(ground, body, new Vector2(0.0f, 0.0f), axis); // Non-bouncy limit //pjd.Initialize(ground, body, new Vector2(-10.0f, 10.0f), new Vector2(1.0f, 0.0f)); pjd.motorSpeed = 10.0f; pjd.maxMotorForce = 1000.0f; pjd.enableMotor = true; pjd.lowerTranslation = 0.0f; pjd.upperTranslation = 20.0f; pjd.enableLimit = true; _joint = (PrismaticJoint)_world.CreateJoint(pjd); } }
public SensorTest() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape.Radius = 5.0f; shape.Position = new Vec2(0.0f, 10.0f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.IsSensor = true; m_sensor = ground.CreateFixture(fd); } } { CircleShape shape = new CircleShape(); for (int i = 0; i < e_count; ++i) { shape.Radius = Rand.RandomFloat(0.85f, 1.0f); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f + 3.0f * i, 20.0f); bd.UserData = i; m_touching[i] = false; m_bodies[i] = m_world.CreateBody(bd); m_bodies[i].CreateFixture(shape, 1.0f); } } }
public OneSidedPlatform() { // Ground { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-20.0f, 0.0f), new Vector2(20.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Platform { BodyDef bd = new BodyDef(); bd.position = new Vector2(0.0f, 10.0f); Body body = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(3.0f, 0.5f); _platform = body.CreateFixture(shape, 0.0f); _bottom = 10.0f - 0.5f; _top = 10.0f + 0.5f; } // Actor { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.0f, 12.0f); Body body = _world.CreateBody(bd); _radius = 0.5f; CircleShape shape = new CircleShape(); shape._radius = _radius; _character = body.CreateFixture(shape, 1.0f); body.SetLinearVelocity(new Vector2(0.0f, -50.0f)); _state = State.e_unknown; } }
public Prismatic() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.0, 0.5); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0, 10.0); bd.angle = 0.5 * Alt.Box2D.Settings.b2_pi; Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0); PrismaticJointDef pjd = new PrismaticJointDef(); // Bouncy limit Vector2 axis = new Vector2(2, 1); axis.Normalize(); pjd.Initialize(ground, body, new Vector2(0.0, 0.0), axis); // Non-bouncy limit //pjd.Initialize(ground, body, new Vector2(-10.0, 10.0), new Vector2(1.0, 0.0)); pjd.motorSpeed = 10.0; pjd.maxMotorForce = 1000.0; pjd.enableMotor = true; pjd.lowerTranslation = 0.0; pjd.upperTranslation = 20.0; pjd.enableLimit = true; _joint = (PrismaticJoint)_world.CreateJoint(pjd); } }
public Pulleys() { Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { float a = 2.0f; float b = 4.0f; float y = 16.0f; float L = 12.0f; PolygonShape shape = new PolygonShape(); shape.SetAsBox(a, b); BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-10.0f, y); Body body1 = m_world.CreateBody(bd); body1.CreateFixture(shape, 5.0f); bd.Position = new Vec2(10.0f, y); Body body2 = m_world.CreateBody(bd); body2.CreateFixture(shape, 5.0f); PulleyJointDef pulleyDef = new PulleyJointDef(); Vec2 anchor1 = new Vec2(-10.0f, y + b); Vec2 anchor2 = new Vec2(10.0f, y + b); Vec2 groundAnchor1 = new Vec2(-10.0f, y + b + L); Vec2 groundAnchor2 = new Vec2(10.0f, y + b + L); pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f); m_joint1 = (PulleyJoint)m_world.CreateJoint(pulleyDef); } }
public Chain() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.6f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; fd.friction = 0.2f; RevoluteJointDef jd = new RevoluteJointDef(); jd.collideConnected = false; float y = 25.0f; Body prevBody = ground; for (int i = 0; i < 30; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.5f + i, y); Body body = _world.CreateBody(bd); body.CreateFixture(fd); Vector2 anchor = new Vector2((float)i, y); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); prevBody = body; } } }
public Chain() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.6f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; fd.friction = 0.2f; RevoluteJointDef jd = new RevoluteJointDef(); jd.collideConnected = false; float y = 25.0f; Body prevBody = ground; for (int i = 0; i < 30; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(0.5f + i, y); Body body = _world.CreateBody(bd); body.CreateFixture(fd); Vector2 anchor = new Vector2((float)i, y); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); prevBody = body; } } }
Pulleys() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { float a = 2.0f; float b = 4.0f; float y = 16.0f; float L = 12.0f; PolygonShape shape = new PolygonShape(); shape.SetAsBox(a, b); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0f, y); Body body1 = _world.CreateBody(bd); body1.CreateFixture(shape, 5.0f); bd.position = new Vector2(10.0f, y); Body body2 = _world.CreateBody(bd); body2.CreateFixture(shape, 5.0f); PulleyJointDef pulleyDef = new PulleyJointDef(); Vector2 anchor1 = new Vector2(-10.0f, y + b); Vector2 anchor2 = new Vector2(10.0f, y + b); Vector2 groundAnchor1 = new Vector2(-10.0f, y + b + L); Vector2 groundAnchor2 = new Vector2(10.0f, y + b + L); pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f); _joint1 = (PulleyJoint)_world.CreateJoint(pulleyDef); } }
Pulleys() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } { double a = 2.0; double b = 4.0; double y = 16.0; double L = 12.0; PolygonShape shape = new PolygonShape(); shape.SetAsBox(a, b); BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-10.0, y); Body body1 = _world.CreateBody(bd); body1.CreateFixture(shape, 5.0); bd.position = new Vector2(10.0, y); Body body2 = _world.CreateBody(bd); body2.CreateFixture(shape, 5.0); PulleyJointDef pulleyDef = new PulleyJointDef(); Vector2 anchor1 = new Vector2(-10.0, y + b); Vector2 anchor2 = new Vector2(10.0, y + b); Vector2 groundAnchor1 = new Vector2(-10.0, y + b + L); Vector2 groundAnchor2 = new Vector2(10.0, y + b + L); pulleyDef.Initialize(body1, body2, groundAnchor1, groundAnchor2, anchor1, anchor2, 2.0f); _joint1 = (PulleyJoint)_world.CreateJoint(pulleyDef); } }
public Revolute() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape._radius = 0.5f; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; RevoluteJointDef rjd = new RevoluteJointDef(); bd.position = new Vector2(0.0f, 20.0f); Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0f); float w = 100.0f; body.SetAngularVelocity(w); body.SetLinearVelocity(new Vector2(-8.0f * w, 0.0f)); rjd.Initialize(ground, body, new Vector2(0.0f, 12.0f)); rjd.motorSpeed = 1.0f * (float)Settings.b2_pi; rjd.maxMotorTorque = 10000.0f; rjd.enableMotor = false; rjd.lowerAngle = -0.25f * (float)Settings.b2_pi; rjd.upperAngle = 0.5f * (float)Settings.b2_pi; rjd.enableLimit = true; rjd.collideConnected = true; _joint = (RevoluteJoint)_world.CreateJoint(rjd); } }
public Revolute() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { CircleShape shape = new CircleShape(); shape._radius = 0.5f; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; RevoluteJointDef rjd = new RevoluteJointDef(); bd.position = new Vector2(0.0f, 20.0f); Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0f); float w = 100.0f; body.SetAngularVelocity(w); body.SetLinearVelocity(new Vector2(-8.0f * w, 0.0f)); rjd.Initialize(ground, body, new Vector2(0.0f, 12.0f)); rjd.motorSpeed = 1.0f * (float)Settings.b2_pi; rjd.maxMotorTorque = 10000.0f; rjd.enableMotor = false; rjd.lowerAngle = -0.25f * (float)Settings.b2_pi; rjd.upperAngle = 0.5f * (float)Settings.b2_pi; rjd.enableLimit = true; rjd.collideConnected = true; _joint = (RevoluteJoint)_world.CreateJoint(rjd); } }
public OneSidedPlatform() { // Ground { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Platform { BodyDef bd = new BodyDef(); bd.Position = new Vec2(0.0f, 10.0f); Body body = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(3.0f, 0.5f); m_platform = body.CreateFixture(shape, 0.0f); m_top = 10.0f + 0.5f; } // Actor { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 12.0f); Body body = m_world.CreateBody(bd); m_radius = 0.5f; CircleShape shape = new CircleShape(); shape.Radius = m_radius; m_character = body.CreateFixture(shape, 20.0f); body.LinearVelocity = new Vec2(0.0f, -50.0f); } }
public OneSidedPlatform() { // Ground { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } // Platform { BodyDef bd = new BodyDef(); bd.Position = new Vec2(0.0f, 10.0f); Body body = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(3.0f, 0.5f); m_platform = body.CreateFixture(shape, 0.0f); m_top = 10.0f + 0.5f; } // Actor { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 12.0f); Body body = m_world.CreateBody(bd); m_radius = 0.5f; CircleShape shape = new CircleShape(); shape.Radius = m_radius; m_character = body.CreateFixture(shape, 20.0f); body.LinearVelocity = new Vec2(0.0f, -50.0f); } }
public Pyramid() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0, 0.0), new Vector2(40.0, 0.0)); ground.CreateFixture(shape, 0.0); } { double a = 0.5; PolygonShape shape = new PolygonShape(); shape.SetAsBox(a, a); Vector2 x = new Vector2(-7.0, 0.75); Vector2 y; Vector2 deltaX = new Vector2(0.5625, 1.25); Vector2 deltaY = new Vector2(1.125, 0.0); for (int i = 0; i < e_count; ++i) { y = x; for (int j = i; j < e_count; ++j) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = y; Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0); y += deltaY; } x += deltaX; } } }
public Pyramid() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { float a = 0.5f; PolygonShape shape = new PolygonShape(); shape.SetAsBox(a, a); Vector2 x = new Vector2(-7.0f, 0.75f); Vector2 y; Vector2 deltaX = new Vector2(0.5625f, 1.25f); Vector2 deltaY = new Vector2(1.125f, 0.0f); for (int i = 0; i < e_count; ++i) { y = x; for (int j = i; j < e_count; ++j) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = y; Body body = _world.CreateBody(bd); body.CreateFixture(shape, 5.0f); y += deltaY; } x += deltaX; } } }
public ShapeEditing() { { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } BodyDef bodydef = new BodyDef(); bodydef.type = BodyType.Dynamic; bodydef.position = new Vector2(0.0f, 10.0f); _body = _world.CreateBody(bodydef); PolygonShape shape2 = new PolygonShape(); shape2.SetAsBox(4.0f, 4.0f, new Vector2(0.0f, 0.0f), 0.0f); _fixture1 = _body.CreateFixture(shape2, 10.0f); _fixture2 = null; }
public ShapeEditing() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 10.0f); m_body = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(4.0f, 4.0f, new Vec2(0.0f, 0.0f), 0.0f); m_fixture1 = m_body.CreateFixture(shape, 10.0f); m_fixture2 = null; } }
public ShapeEditing() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 10.0f); m_body = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(4.0f, 4.0f, new Vec2(0.0f, 0.0f), 0.0f); m_fixture1 = m_body.CreateFixture(shape, 10.0f); m_fixture2 = null; } }
public CollisionFiltering() { // Ground body { PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); FixtureDef sd = new FixtureDef(); sd.shape = shape; sd.friction = 0.3f; BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); ground.CreateFixture(sd); } // Small triangle Vector2[] vertices = new Vector2[3]; vertices[0] = new Vector2(-1.0f, 0.0f); vertices[1] = new Vector2(1.0f, 0.0f); vertices[2] = new Vector2(0.0f, 2.0f); PolygonShape polygon = new PolygonShape(); polygon.Set(vertices, 3); FixtureDef triangleShapeDef = new FixtureDef(); triangleShapeDef.shape = polygon; triangleShapeDef.density = 1.0f; triangleShapeDef.filter.groupIndex = k_smallGroup; triangleShapeDef.filter.categoryBits = k_triangleCategory; triangleShapeDef.filter.maskBits = k_triangleMask; BodyDef triangleBodyDef = new BodyDef(); triangleBodyDef.type = BodyType.Dynamic; triangleBodyDef.position = new Vector2(-5.0f, 2.0f); Body body1 = _world.CreateBody(triangleBodyDef); body1.CreateFixture(triangleShapeDef); // Large triangle (recycle definitions) vertices[0] *= 2.0f; vertices[1] *= 2.0f; vertices[2] *= 2.0f; polygon.Set(vertices, 3); triangleShapeDef.filter.groupIndex = k_largeGroup; triangleBodyDef.position = new Vector2(-5.0f, 6.0f); triangleBodyDef.fixedRotation = true; // look at me! Body body2 = _world.CreateBody(triangleBodyDef); body2.CreateFixture(triangleShapeDef); { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-5.0f, 10.0f); Body body = _world.CreateBody(bd); PolygonShape p = new PolygonShape(); p.SetAsBox(0.5f, 1.0f); body.CreateFixture(p, 1.0f); PrismaticJointDef jd = new PrismaticJointDef(); jd.bodyA = body2; jd.bodyB = body; jd.enableLimit = true; jd.localAnchorA = new Vector2(0.0f, 4.0f); jd.localAnchorB = Vector2.Zero; jd.localAxis1 = new Vector2(0.0f, 1.0f); jd.lowerTranslation = -1.0f; jd.upperTranslation = 1.0f; _world.CreateJoint(jd); } // Small box polygon.SetAsBox(1.0f, 0.5f); FixtureDef boxShapeDef = new FixtureDef(); boxShapeDef.shape = polygon; boxShapeDef.density = 1.0f; boxShapeDef.restitution = 0.1f; boxShapeDef.filter.groupIndex = k_smallGroup; boxShapeDef.filter.categoryBits = k_boxCategory; boxShapeDef.filter.maskBits = k_boxMask; BodyDef boxBodyDef = new BodyDef(); boxBodyDef.type = BodyType.Dynamic; boxBodyDef.position = new Vector2(0.0f, 2.0f); Body body3 = _world.CreateBody(boxBodyDef); body3.CreateFixture(boxShapeDef); // Large box (recycle definitions) polygon.SetAsBox(2.0f, 1.0f); boxShapeDef.filter.groupIndex = k_largeGroup; boxBodyDef.position = new Vector2(0.0f, 6.0f); Body body4 = _world.CreateBody(boxBodyDef); body4.CreateFixture(boxShapeDef); // Small circle CircleShape circle = new CircleShape(); circle._radius = 1.0f; FixtureDef circleShapeDef = new FixtureDef(); circleShapeDef.shape = circle; circleShapeDef.density = 1.0f; circleShapeDef.filter.groupIndex = k_smallGroup; circleShapeDef.filter.categoryBits = k_circleCategory; circleShapeDef.filter.maskBits = k_circleMask; BodyDef circleBodyDef = new BodyDef(); circleBodyDef.type = BodyType.Dynamic; circleBodyDef.position = new Vector2(5.0f, 2.0f); Body body5 = _world.CreateBody(circleBodyDef); body5.CreateFixture(circleShapeDef); // Large circle circle._radius *= 2.0f; circleShapeDef.filter.groupIndex = k_largeGroup; circleBodyDef.position = new Vector2(5.0f, 6.0f); Body body6 = _world.CreateBody(circleBodyDef); body6.CreateFixture(circleShapeDef); }
public RayCast() { // Ground body { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { Vec2[] vertices = new Vec2[3]; vertices[0] = new Vec2(-0.5f, 0.0f); vertices[1] = new Vec2(0.5f, 0.0f); vertices[2] = new Vec2(0.0f, 1.5f); m_polygons[0] = new PolygonShape(); m_polygons[0].Vertices = vertices; } { Vec2[] vertices = new Vec2[3]; vertices[0] = new Vec2(-0.1f, 0.0f); vertices[1] = new Vec2(0.1f, 0.0f); vertices[2] = new Vec2(0.0f, 1.5f); m_polygons[1] = new PolygonShape(); m_polygons[1].Vertices = vertices; } { float w = 1.0f; float b = w / (2.0f + (float)Math.Sqrt(2.0f)); float s = (float)Math.Sqrt(2.0f) * b; Vec2[] vertices = new Vec2[8]; vertices[0] = new Vec2(0.5f * s, 0.0f); vertices[1] = new Vec2(0.5f * w, b); vertices[2] = new Vec2(0.5f * w, b + s); vertices[3] = new Vec2(0.5f * s, w); vertices[4] = new Vec2(-0.5f * s, w); vertices[5] = new Vec2(-0.5f * w, b + s); vertices[6] = new Vec2(-0.5f * w, b); vertices[7] = new Vec2(-0.5f * s, 0.0f); m_polygons[2] = new PolygonShape(); m_polygons[2].Vertices = vertices; } { m_polygons[3] = new PolygonShape(); m_polygons[3].SetAsBox(0.5f, 0.5f); } { m_circle = new CircleShape(); m_circle.Radius = 0.5f; } m_bodyIndex = 0; m_angle = 0.0f; m_mode = Mode.e_closest; }
public RayCast() { // Ground body { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { var vertices = new Vector2[3]; vertices[0] = new Vector2(-0.5f, 0.0f); vertices[1] = new Vector2(0.5f, 0.0f); vertices[2] = new Vector2(0.0f, 1.5f); _polygons[0] = new PolygonShape(); _polygons[0].Set(vertices, 3); } { var vertices2 = new Vector2[3]; vertices2[0] = new Vector2(-0.1f, 0.0f); vertices2[1] = new Vector2(0.1f, 0.0f); vertices2[2] = new Vector2(0.0f, 1.5f); _polygons[1] = new PolygonShape(); _polygons[1].Set(vertices2, 3); } { float w = 1.0f; float b = w / (2.0f + (float)Math.Sqrt(2.0)); float s = (float)Math.Sqrt(2.0) * b; var vertices3 = new Vector2[8]; vertices3[0] = new Vector2(0.5f * s, 0.0f); vertices3[1] = new Vector2(0.5f * w, b); vertices3[2] = new Vector2(0.5f * w, b + s); vertices3[3] = new Vector2(0.5f * s, w); vertices3[4] = new Vector2(-0.5f * s, w); vertices3[5] = new Vector2(-0.5f * w, b + s); vertices3[6] = new Vector2(-0.5f * w, b); vertices3[7] = new Vector2(-0.5f * s, 0.0f); _polygons[2] = new PolygonShape(); _polygons[2].Set(vertices3, 8); } { _polygons[3] = new PolygonShape(); _polygons[3].SetAsBox(0.5f, 0.5f); } { _circle = new CircleShape(); _circle._radius = 0.5f; } _bodyIndex = 0; _angle = 0.0f; _mode = RayCastMode.Closest; }
public VaryingFriction() { { BodyDef bd = new BodyDef(); Body ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(13.0f, 0.25f); BodyDef bd = new BodyDef(); bd.Position = new Vec2(-4.0f, 22.0f); bd.Angle = -0.25f; Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.25f, 1.0f); BodyDef bd = new BodyDef(); bd.Position = new Vec2(10.5f, 19.0f); Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(13.0f, 0.25f); BodyDef bd = new BodyDef(); bd.Position = new Vec2(4.0f, 14.0f); bd.Angle = 0.25f; Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.25f, 1.0f); BodyDef bd = new BodyDef(); bd.Position = new Vec2(-10.5f, 11.0f); Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(13.0f, 0.25f); BodyDef bd = new BodyDef(); bd.Position = new Vec2(-4.0f, 6.0f); bd.Angle = -0.25f; Body ground = m_world.CreateBody(bd); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.5f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Density = 25.0f; float[] friction = {0.75f, 0.5f, 0.35f, 0.1f, 0.0f}; for (int i = 0; i < 5; ++i) { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-15.0f + 4.0f * i, 28.0f); Body body = m_world.CreateBody(bd); fd.Friction = friction[i]; body.CreateFixture(fd); } } }
TheoJansen() { _offset = new Vector2(0.0f, 8.0f); _motorSpeed = 2.0f; _motorOn = true; Vector2 pivot = new Vector2(0.0f, 0.8f); // Ground { BodyDef bd = new BodyDef(); Body ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(50.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); shape.SetAsEdge(new Vector2(-50.0f, 0.0f), new Vector2(-50.0f, 10.0f)); ground.CreateFixture(shape, 0.0f); shape.SetAsEdge(new Vector2(50.0f, 0.0f), new Vector2(50.0f, 10.0f)); ground.CreateFixture(shape, 0.0f); } // Balls for (int i = 0; i < 40; ++i) { CircleShape shape = new CircleShape(); shape._radius = 0.25f; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-40.0f + 2.0f * i, 0.5f); Body body = _world.CreateBody(bd); body.CreateFixture(shape, 1.0f); } // Chassis { PolygonShape shape = new PolygonShape(); shape.SetAsBox(2.5f, 1.0f); FixtureDef sd = new FixtureDef(); sd.density = 1.0f; sd.shape = shape; sd.filter.groupIndex = -1; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = pivot + _offset; _chassis = _world.CreateBody(bd); _chassis.CreateFixture(sd); } { CircleShape shape = new CircleShape(); shape._radius = 1.6f; FixtureDef sd = new FixtureDef(); sd.density = 1.0f; sd.shape = shape; sd.filter.groupIndex = -1; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = pivot + _offset; _wheel = _world.CreateBody(bd); _wheel.CreateFixture(sd); } { 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); } Vector2 wheelAnchor; wheelAnchor = pivot + new Vector2(0.0f, -0.8f); CreateLeg(-1.0f, wheelAnchor); CreateLeg(1.0f, wheelAnchor); _wheel.SetTransform(_wheel.GetPosition(), 120.0f * (float)Settings.b2_pi / 180.0f); CreateLeg(-1.0f, wheelAnchor); CreateLeg(1.0f, wheelAnchor); _wheel.SetTransform(_wheel.GetPosition(), -120.0f * (float)Settings.b2_pi / 180.0f); CreateLeg(-1.0f, wheelAnchor); CreateLeg(1.0f, wheelAnchor); }
public Cantilever() { Body ground = null; { BodyDef bd = new BodyDef(); ground = _world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vector2(-40.0f, 0.0f), new Vector2(40.0f, 0.0f)); ground.CreateFixture(shape, 0.0f); } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; WeldJointDef jd = new WeldJointDef(); Body prevBody = ground; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-14.5f + 1.0f * i, 5.0f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); Vector2 anchor = new Vector2(-15.0f + 1.0f * i, 5.0f); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); prevBody = body; } } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; WeldJointDef jd = new WeldJointDef(); Body prevBody = ground; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-14.5f + 1.0f * i, 15.0f); bd.inertiaScale = 10.0f; Body body = _world.CreateBody(bd); body.CreateFixture(fd); Vector2 anchor = new Vector2(-15.0f + 1.0f * i, 15.0f); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); prevBody = body; } } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; WeldJointDef jd = new WeldJointDef(); Body prevBody = ground; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-4.5f + 1.0f * i, 5.0f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); if (i > 0) { Vector2 anchor = new Vector2(-5.0f + 1.0f * i, 5.0f); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); } prevBody = body; } } { PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 0.125f); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 20.0f; WeldJointDef jd = new WeldJointDef(); Body prevBody = ground; for (int i = 0; i < e_count; ++i) { BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(5.5f + 1.0f * i, 10.0f); bd.inertiaScale = 10.0f; Body body = _world.CreateBody(bd); body.CreateFixture(fd); if (i > 0) { Vector2 anchor = new Vector2(5.0f + 1.0f * i, 10.0f); jd.Initialize(prevBody, body, anchor); _world.CreateJoint(jd); } prevBody = body; } } for (int i = 0; i < 2; ++i) { Vector2[] vertices = new Vector2[3]; vertices[0] = new Vector2(-0.5f, 0.0f); vertices[1] = new Vector2(0.5f, 0.0f); vertices[2] = new Vector2(0.0f, 1.5f); PolygonShape shape = new PolygonShape(); shape.Set(vertices, 3); FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-8.0f + 8.0f * i, 12.0f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); } for (int i = 0; i < 2; ++i) { CircleShape shape = new CircleShape(); shape._radius = 0.5f; FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; BodyDef bd = new BodyDef(); bd.type = BodyType.Dynamic; bd.position = new Vector2(-6.0f + 6.0f * i, 10.0f); Body body = _world.CreateBody(bd); body.CreateFixture(fd); } }
public BodyTypes() { Body ground = null; { BodyDef bd = new BodyDef(); ground = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsEdge(new Vec2(-20.0f, 0.0f), new Vec2(20.0f, 0.0f)); FixtureDef fd = new FixtureDef(); fd.Shape = shape; ground.CreateFixture(fd); } // Define attachment { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 3.0f); m_attachment = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 2.0f); m_attachment.CreateFixture(shape, 2.0f); } // Define platform { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(-4.0f, 5.0f); m_platform = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.5f, 4.0f, new Vec2(4.0f, 0.0f), 0.5f * (float)Math.PI); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Friction = 0.6f; fd.Density = 2.0f; m_platform.CreateFixture(fd); RevoluteJointDef rjd = new RevoluteJointDef(); rjd.Initialize(m_attachment, m_platform, new Vec2(0.0f, 5.0f)); rjd.MaxMotorTorque = 50.0f; rjd.EnableMotor = true; m_world.CreateJoint(rjd); PrismaticJointDef pjd = new PrismaticJointDef(); pjd.Initialize(ground, m_platform, new Vec2(0.0f, 5.0f), new Vec2(1.0f, 0.0f)); pjd.MaxMotorForce = 1000.0f; pjd.EnableMotor = true; pjd.LowerTranslation = -10.0f; pjd.UpperTranslation = 10.0f; pjd.EnableLimit = true; m_world.CreateJoint(pjd); m_speed = 3.0f; } // Create a payload { BodyDef bd = new BodyDef(); bd.BodyType = BodyType.Dynamic; bd.Position = new Vec2(0.0f, 8.0f); m_payload = m_world.CreateBody(bd); PolygonShape shape = new PolygonShape(); shape.SetAsBox(0.75f, 0.75f); FixtureDef fd = new FixtureDef(); fd.Shape = shape; fd.Friction = 0.6f; fd.Density = 2.0f; m_payload.CreateFixture(fd); } }