public override void Dispose() { // MainConsole.Instance.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); }
public override void Initialize(IMesher meshmerizer, IScene scene) { Scene = scene; mesher = meshmerizer; _taintOperations = new List<TaintCallbackEntry>(); _postTaintOperations = new Dictionary<string, TaintCallbackEntry>(); _postStepOperations = new List<TaintCallbackEntry>(); PhysObjects = new Dictionary<uint, BSPhysObject>(); Shapes = new BSShapeCollection(this); // some identifiers RegionName = scene.RegionInfo.RegionName; PhysicsSceneName = RegionName; // Allocate pinned memory to pass parameters. UnmanagedParams = new ConfigurationParameters[1]; // Set default values for physics parameters plus any overrides from the ini file GetInitialParameterValues(scene.Config); // Get the connection to the physics engine (could be native or one of many DLLs) PE = SelectUnderlyingBulletEngine(BulletEngineName); // Enable very detailed logging. // By creating an empty logger when not logging, the log message invocation code // can be left in and every call doesn't have to check for null. /*if (m_physicsLoggingEnabled) { PhysicsLogging = new Logging.LogWriter(m_physicsLoggingDir, m_physicsLoggingPrefix, m_physicsLoggingFileMinutes); PhysicsLogging.ErrorLogger = m_log; // for DEBUG. Let's the logger output error messages. } else { PhysicsLogging = new Logging.LogWriter(); }*/ // Allocate memory for returning of the updates and collisions from the physics engine m_collisionArray = new CollisionDesc[m_maxCollisionsPerFrame]; m_updateArray = new EntityProperties[m_maxUpdatesPerFrame]; // The bounding box for the simulated world. The origin is 0,0,0 unless we're // a child in a mega-region. // Bullet actually doesn't care about the extents of the simulated // area. It tracks active objects no matter where they are. Vector3 worldExtent = new Vector3(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeX, Constants.RegionHeight); // Vector3 worldExtent = regionExtent; World = PE.Initialize(worldExtent, Params, m_maxCollisionsPerFrame, ref m_collisionArray, m_maxUpdatesPerFrame, ref m_updateArray); Constraints = new BSConstraintCollection(World); TerrainManager = new BSTerrainManager(this); TerrainManager.CreateInitialGroundPlaneAndTerrain(); MainConsole.Instance.WarnFormat("{0} Linksets implemented with {1}", LogHeader, (BSLinkset.LinksetImplementation)BSParam.LinksetImplementation); InTaintTime = false; m_initialized = true; }
public override void Dispose() { // MainConsole.Instance.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); }
public override void Initialize(IMesher meshmerizer, IScene scene) { Scene = scene; mesher = meshmerizer; _taintOperations = new List <TaintCallbackEntry>(); _postTaintOperations = new Dictionary <string, TaintCallbackEntry>(); _postStepOperations = new List <TaintCallbackEntry>(); PhysObjects = new Dictionary <uint, BSPhysObject>(); Shapes = new BSShapeCollection(this); // some identifiers RegionName = scene.RegionInfo.RegionName; PhysicsSceneName = RegionName; // Allocate pinned memory to pass parameters. UnmanagedParams = new ConfigurationParameters[1]; // Set default values for physics parameters plus any overrides from the ini file GetInitialParameterValues(scene.Config); // Get the connection to the physics engine (could be native or one of many DLLs) PE = SelectUnderlyingBulletEngine(BulletEngineName); if (PE == null) { MainConsole.Instance.Error("[BSScene]: Unable to select underlyin bullet engine!"); return; } // Enable very detailed logging. // By creating an empty logger when not logging, the log message invocation code // can be left in and every call doesn't have to check for null. /*if (m_physicsLoggingEnabled) * { * PhysicsLogging = new Logging.LogWriter(m_physicsLoggingDir, m_physicsLoggingPrefix, m_physicsLoggingFileMinutes); * PhysicsLogging.ErrorLogger = m_log; // for DEBUG. Let's the logger output error messages. * } * else * { * PhysicsLogging = new Logging.LogWriter(); * }*/ // Allocate memory for returning of the updates and collisions from the physics engine m_collisionArray = new CollisionDesc[m_maxCollisionsPerFrame]; m_updateArray = new EntityProperties[m_maxUpdatesPerFrame]; // The bounding box for the simulated world. The origin is 0,0,0 unless we're // a child in a mega-region. // Bullet actually doesn't care about the extents of the simulated // area. It tracks active objects no matter where they are. Vector3 worldExtent = new Vector3(scene.RegionInfo.RegionSizeX, scene.RegionInfo.RegionSizeX, Constants.RegionHeight); // Vector3 worldExtent = regionExtent; World = PE.Initialize(worldExtent, Params, m_maxCollisionsPerFrame, ref m_collisionArray, m_maxUpdatesPerFrame, ref m_updateArray); Constraints = new BSConstraintCollection(World); TerrainManager = new BSTerrainManager(this); TerrainManager.CreateInitialGroundPlaneAndTerrain(); MainConsole.Instance.WarnFormat("{0} Linksets implemented with {1}", LogHeader, (BSLinkset.LinksetImplementation)BSParam.LinksetImplementation); InTaintTime = false; m_initialized = true; }