public override void Run() { var conf = new DefaultCollisionConfiguration(); // Test CollisionConfiguration methods var pool = conf.CollisionAlgorithmPool; AddToDisposeQueue(pool); pool = conf.PersistentManifoldPool; AddToDisposeQueue(pool); pool = null; var simplexSolver = conf.SimplexSolver; //var simplexResult = simplexSolver.CachedBC; //AddToDisposeQueue(simplexResult); //simplexResult = null; AddToDisposeQueue(simplexSolver); simplexSolver = null; var createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.BoxShape); if (!(createFunc is BoxBoxCollisionAlgorithm.CreateFunc)) { Console.WriteLine("BoxBoxCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.SphereShape); if (!(createFunc is SphereSphereCollisionAlgorithm.CreateFunc)) { Console.WriteLine("SphereSphereCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.TriangleShape); if (!(createFunc is SphereTriangleCollisionAlgorithm.CreateFunc)) { Console.WriteLine("SphereTriangleCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TriangleShape, BroadphaseNativeType.SphereShape); if (!(createFunc is SphereTriangleCollisionAlgorithm.CreateFunc)) { Console.WriteLine("SphereTriangleCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.StaticPlaneShape); if (!(createFunc is ConvexPlaneCollisionAlgorithm.CreateFunc)) { Console.WriteLine("ConvexPlaneCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.StaticPlaneShape, BroadphaseNativeType.BoxShape); if (!(createFunc is ConvexPlaneCollisionAlgorithm.CreateFunc)) { Console.WriteLine("ConvexPlaneCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.CylinderShape); if (!(createFunc is ConvexConvexAlgorithm.CreateFunc)) { Console.WriteLine("ConvexConvexAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.TerrainShape); if (!(createFunc is ConvexConcaveCollisionAlgorithm.CreateFunc)) { Console.WriteLine("ConvexConcaveCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TerrainShape, BroadphaseNativeType.CylinderShape); if (!(createFunc is ConvexConcaveCollisionAlgorithm.SwappedCreateFunc)) { Console.WriteLine("ConvexConcaveCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.CompoundShape); if (!(createFunc is CompoundCompoundCollisionAlgorithm.CreateFunc)) { Console.WriteLine("CompoundCompoundCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.BoxShape); if (!(createFunc is CompoundCompoundCollisionAlgorithm.CreateFunc)) { Console.WriteLine("CompoundCompoundCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.CompoundShape); if (!(createFunc is CompoundCompoundCollisionAlgorithm.SwappedCreateFunc)) { Console.WriteLine("CompoundCompoundCollisionAlgorithm ERROR!"); } AddToDisposeQueue(createFunc); createFunc = null; conf = null; ForceGC(); TestWeakRefs(); ClearRefs(); }
public override void InitPhysics() { int i; shootBoxInitialSpeed = 4000; // collision configuration contains default setup for memory, collision setup CollisionConf = new DefaultCollisionConfiguration(); Dispatcher = new CollisionDispatcher(CollisionConf); Dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.BoxShape, CollisionConf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.ConvexShape, BroadphaseNativeType.ConvexShape)); Broadphase = new DbvtBroadphase(); // the default constraint solver. Solver = new SequentialImpulseConstraintSolver(); World = new DiscreteDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf); World.SolverInfo.SplitImpulse = 1; World.SolverInfo.NumIterations = 20; World.DispatchInfo.UseContinuous = ccdMode; World.Gravity = new Vector3(0, -10, 0); BoxShape ground = new BoxShape(200, 1, 200); // ground.InitializePolyhedralFeatures(); CollisionShapes.Add(ground); RigidBody body = LocalCreateRigidBody(0, Matrix.Identity, ground); body.UserObject = "Ground"; CollisionShape shape = new CylinderShape(CubeHalfExtents, CubeHalfExtents, CubeHalfExtents); CollisionShapes.Add(shape); int numObjects = 120; for (i = 0; i < numObjects; i++) { //stack them int colsize = 10; int row = (int)((i * CubeHalfExtents * 2) / (colsize * 2 * CubeHalfExtents)); int row2 = row; int col = (i) % (colsize) - colsize / 2; if (col > 3) { col = 11; row2 |= 1; } Matrix trans = Matrix.Translation(col * 2 * CubeHalfExtents + (row2 % 2) * CubeHalfExtents, row * 2 * CubeHalfExtents + CubeHalfExtents + ExtraHeight, 0); body = LocalCreateRigidBody(1, trans, shape); if (ccdMode) { body.CcdMotionThreshold = CubeHalfExtents; body.CcdSweptSphereRadius = 0.9f * CubeHalfExtents; } } }
public void CollisionAlgorithmTest() { Assert.NotNull(conf.CollisionAlgorithmPool); Assert.NotNull(conf.PersistentManifoldPool); Assert.NotNull(conf.SimplexSolver); // Test that the correct collision algorithms are returned in GetCollisionAlgorithmCreateFunc var createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.BoxShape); Assert.IsInstanceOf(typeof(BoxBoxCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.SphereShape); Assert.IsInstanceOf(typeof(SphereSphereCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.TriangleShape); Assert.IsInstanceOf(typeof(SphereTriangleCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TriangleShape, BroadphaseNativeType.SphereShape); Assert.IsInstanceOf(typeof(SphereTriangleCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.StaticPlaneShape); Assert.IsInstanceOf(typeof(ConvexPlaneCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.StaticPlaneShape, BroadphaseNativeType.BoxShape); Assert.IsInstanceOf(typeof(ConvexPlaneCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.CylinderShape); Assert.IsInstanceOf(typeof(ConvexConvexAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.TerrainShape); Assert.IsInstanceOf(typeof(ConvexConcaveCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TerrainShape, BroadphaseNativeType.CylinderShape); Assert.IsInstanceOf(typeof(ConvexConcaveCollisionAlgorithm.SwappedCreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.CompoundShape); Assert.IsInstanceOf(typeof(CompoundCompoundCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.BoxShape); Assert.IsInstanceOf(typeof(CompoundCompoundCollisionAlgorithm.CreateFunc), createFunc); createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.CompoundShape); Assert.IsInstanceOf(typeof(CompoundCompoundCollisionAlgorithm.SwappedCreateFunc), createFunc); }