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();
        }
Beispiel #2
0
        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;
                }
            }
        }
Beispiel #3
0
        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);
        }