public override void Dispose() { // m_log.DebugFormat("{0}: Dispose()", LogHeader); // make sure no stepping happens while we're deleting stuff m_initialized = false; foreach (KeyValuePair <uint, BSPhysObject> kvp in PhysObjects) { kvp.Value.Destroy(); } PhysObjects.Clear(); // Now that the prims are all cleaned up, there should be no constraints left if (Constraints != null) { Constraints.Dispose(); Constraints = null; } if (Shapes != null) { Shapes.Dispose(); Shapes = null; } if (TerrainManager != null) { TerrainManager.ReleaseGroundPlaneAndTerrain(); TerrainManager.Dispose(); TerrainManager = null; } // Anything left in the unmanaged code should be cleaned out PE.Shutdown(World); // Not logging any more PhysicsLogging.Close(); }