public createFixture ( |
||
shape | The shape. | |
userData | object | Application specific data |
return |
//Contributed by Matthew Bettcher /// <summary> /// Convert a path into a set of edges and attaches them to the specified body. /// Note: use only for static edges. /// </summary> /// <param name="path">The path.</param> /// <param name="body">The body.</param> /// <param name="subdivisions">The subdivisions.</param> public static void convertPathToEdges( Path path, Body body, int subdivisions ) { var verts = path.getVertices( subdivisions ); if( path.isClosed ) { var chain = new ChainShape( verts, true ); body.createFixture( chain ); } else { for( int i = 1; i < verts.Count; i++ ) { body.createFixture( new EdgeShape( verts[i], verts[i - 1] ) ); } } }
public static Fixture AttachRectangle( float width, float height, float density, Vector2 offset, Body body, object userData = null ) { var rectangleVertices = PolygonTools.createRectangle( width / 2, height / 2 ); rectangleVertices.translate( ref offset ); var rectangleShape = new PolygonShape( rectangleVertices, density ); return body.createFixture( rectangleShape, userData ); }
public static Fixture AttachPolygon( Vertices vertices, float density, Body body, object userData = null ) { if( vertices.Count <= 1 ) throw new ArgumentOutOfRangeException( nameof( vertices ), "Too few points to be a polygon" ); var polygon = new PolygonShape( vertices, density ); return body.createFixture( polygon, userData ); }
public static Fixture AttachCircle( float radius, float density, Body body, object userData = null ) { if( radius <= 0 ) throw new ArgumentOutOfRangeException( nameof( radius ), "Radius must be more than 0 meters" ); var circleShape = new CircleShape( radius, density ); return body.createFixture( circleShape, userData ); }
public BreakableBody( World world, IEnumerable<Shape> shapes, Vector2 position = new Vector2(), float rotation = 0 ) { _world = world; _world.contactManager.onPostSolve += onPostSolve; mainBody = new Body( _world, position, rotation, BodyType.Dynamic ); foreach( Shape part in shapes ) { Fixture fixture = mainBody.createFixture( part ); parts.Add( fixture ); } }
public static Fixture AttachEllipse( float xRadius, float yRadius, int edges, float density, Body body, object userData = null ) { if( xRadius <= 0 ) throw new ArgumentOutOfRangeException( nameof( xRadius ), "X-radius must be more than 0" ); if( yRadius <= 0 ) throw new ArgumentOutOfRangeException( nameof( yRadius ), "Y-radius must be more than 0" ); var ellipseVertices = PolygonTools.createEllipse( xRadius, yRadius, edges ); var polygonShape = new PolygonShape( ellipseVertices, density ); return body.createFixture( polygonShape, userData ); }
public BreakableBody(World world, IEnumerable <Shape> shapes, Vector2 position = new Vector2(), float rotation = 0) { _world = world; _world.contactManager.onPostSolve += onPostSolve; mainBody = new Body(_world, position, rotation, BodyType.Dynamic); foreach (Shape part in shapes) { Fixture fixture = mainBody.createFixture(part); parts.Add(fixture); } }
public BreakableBody( World world, IEnumerable<Vertices> vertices, float density, Vector2 position = new Vector2(), float rotation = 0 ) { _world = world; _world.contactManager.onPostSolve += onPostSolve; mainBody = new Body( _world, position, rotation, BodyType.Dynamic ); foreach( Vertices part in vertices ) { var polygonShape = new PolygonShape( part, density ); Fixture fixture = mainBody.createFixture( polygonShape ); parts.Add( fixture ); } }
/// <summary> /// Convert a closed path into a polygon. /// Convex decomposition is automatically performed. /// </summary> /// <param name="path">The path.</param> /// <param name="body">The body.</param> /// <param name="density">The density.</param> /// <param name="subdivisions">The subdivisions.</param> public static void convertPathToPolygon( Path path, Body body, float density, int subdivisions ) { if( !path.isClosed ) throw new Exception( "The path must be closed to convert to a polygon." ); var verts = path.getVertices( subdivisions ); var decomposedVerts = Triangulate.convexPartition( new Vertices( verts ), TriangulationAlgorithm.Bayazit ); foreach( Vertices item in decomposedVerts ) { body.createFixture( new PolygonShape( item, density ) ); } }
public BreakableBody(World world, IEnumerable <Vertices> vertices, float density, Vector2 position = new Vector2(), float rotation = 0) { _world = world; _world.contactManager.onPostSolve += onPostSolve; mainBody = new Body(_world, position, rotation, BodyType.Dynamic); foreach (Vertices part in vertices) { var polygonShape = new PolygonShape(part, density); Fixture fixture = mainBody.createFixture(polygonShape); parts.Add(fixture); } }
/// <summary> /// Duplicates the given Body along the given path for approximatly the given copies. /// </summary> /// <param name="world">The world.</param> /// <param name="path">The path.</param> /// <param name="shapes">The shapes.</param> /// <param name="type">The type.</param> /// <param name="copies">The copies.</param> /// <param name="userData"></param> /// <returns></returns> public static List<Body> evenlyDistributeShapesAlongPath( World world, Path path, IEnumerable<Shape> shapes, BodyType type, int copies, object userData = null ) { List<Vector3> centers = path.subdivideEvenly( copies ); List<Body> bodyList = new List<Body>(); for( int i = 0; i < centers.Count; i++ ) { Body b = new Body( world ); // copy the type from original body b.bodyType = type; b.position = new Vector2( centers[i].X, centers[i].Y ); b.rotation = centers[i].Z; b.userData = userData; foreach( Shape shape in shapes ) { b.createFixture( shape ); } bodyList.Add( b ); } return bodyList; }
public static List<Fixture> AttachCompoundPolygon( List<Vertices> list, float density, Body body, object userData = null ) { var res = new List<Fixture>( list.Count ); // Then we create several fixtures using the body foreach( var vertices in list ) { if( vertices.Count == 2 ) { var shape = new EdgeShape( vertices[0], vertices[1] ); res.Add( body.createFixture( shape, userData ) ); } else { var shape = new PolygonShape( vertices, density ); res.Add( body.createFixture( shape, userData ) ); } } return res; }
public static Fixture AttachLoopShape( Vertices vertices, Body body, object userData = null ) { var shape = new ChainShape( vertices, true ); return body.createFixture( shape, userData ); }
public static Fixture AttachEdge( Vector2 start, Vector2 end, Body body, object userData = null ) { var edgeShape = new EdgeShape( start, end ); return body.createFixture( edgeShape, userData ); }