Example #1
0
    /// 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 b2Fixture CreateFixture(b2FixtureDef def)
    {
        Debug.Assert(m_world.IsLocked() == false);
        if (m_world.IsLocked() == true)
        {
            return(null);
        }

        b2Fixture fixture = new b2Fixture();

        fixture.Create(this, def);

        if ((m_flags & BodyFlags.e_activeFlag) != 0)
        {
            b2BroadPhase broadPhase = m_world.m_contactManager.m_broadPhase;
            fixture.CreateProxies(broadPhase, m_xf);
        }

        fixture.m_next = m_fixtureList;
        m_fixtureList  = fixture;
        ++m_fixtureCount;

        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 |= b2World.WorldFlags.e_newFixture;

        return(fixture);
    }