/// Creates a fixture and attach it to this body. Use this function if you need /// to set some fixture parameters, like friction. Otherwise you can create the /// fixture directly from a shape. /// If the Density is non-zero, this function automatically updates the mass of the body. /// Contacts are not created until the next time step. /// @param def the fixture definition. /// @warning This function is locked during callbacks. public Fixture CreateFixture(FixtureDef def){ Utilities.Assert(m_world.IsLocked() == false); if (m_world.IsLocked() == true) { return null; } Fixture fixture = new Fixture(); fixture.Create(this, def); if (m_flags.HasFlag(BodyFlags.e_activeFlag)) { BroadPhase broadPhase = m_world.m_contactManager.m_broadPhase; fixture.CreateProxies(broadPhase, m_xf); } m_fixtureList.Add(fixture); fixture.m_body = this; // Adjust mass properties if needed. if (fixture.m_Density > 0.0f) { ResetMassData(); } // Let the world know we have a new fixture. This will cause new contacts // to be created at the beginning of the next time step. m_world.m_flags |= WorldFlags.e_newFixture; return fixture; }