void decompose() { // Unsubsribe from the PostSolve delegate _world.contactManager.onPostSolve -= onPostSolve; for (int i = 0; i < parts.Count; i++) { var oldFixture = parts[i]; var shape = oldFixture.shape.clone(); object userData = oldFixture.userData; mainBody.destroyFixture(oldFixture); var body = BodyFactory.CreateBody(_world, mainBody.position, mainBody.rotation, BodyType.Dynamic, mainBody.userData); var newFixture = body.createFixture(shape); newFixture.userData = userData; parts[i] = newFixture; body.angularVelocity = _angularVelocitiesCache[i]; body.linearVelocity = _velocitiesCache[i]; } _world.removeBody(mainBody); _world.removeBreakableBody(this); }