createFixture() public method

Creates a fixture and attach it to this body. If the density is non-zero, this function automatically updates the mass of the body. Contacts are not created until the next time step. Warning: This function is locked during callbacks.
public createFixture ( Shape shape, object userData = null ) : Fixture
shape FarseerPhysics.Collision.Shapes.Shape The shape.
userData object Application specific data
return Fixture
Exemplo n.º 1
0
		//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] ) );
				}
			}
		}
Exemplo n.º 2
0
		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 );
		}
Exemplo n.º 3
0
		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 );
		}
Exemplo n.º 4
0
		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 );
		}
Exemplo n.º 5
0
		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 );
			}
		}
Exemplo n.º 6
0
		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 );
		}
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
		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 );
			}
		}
Exemplo n.º 9
0
		/// <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 ) );
			}
		}
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
		/// <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;
		}
Exemplo n.º 12
0
		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;
		}
Exemplo n.º 13
0
		public static Fixture AttachLoopShape( Vertices vertices, Body body, object userData = null )
		{
			var shape = new ChainShape( vertices, true );
			return body.createFixture( shape, userData );
		}
Exemplo n.º 14
0
		public static Fixture AttachEdge( Vector2 start, Vector2 end, Body body, object userData = null )
		{
			var edgeShape = new EdgeShape( start, end );
			return body.createFixture( edgeShape, userData );
		}