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 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);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.SphereShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.SphereShape, BroadphaseNativeType.TriangleShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TriangleShape, BroadphaseNativeType.SphereShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.StaticPlaneShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.StaticPlaneShape, BroadphaseNativeType.BoxShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.CylinderShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CylinderShape, BroadphaseNativeType.TerrainShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TerrainShape, BroadphaseNativeType.CylinderShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.CompoundShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.CompoundShape, BroadphaseNativeType.BoxShape);
            AddToDisposeQueue(createFunc);
            createFunc = conf.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.BoxShape, BroadphaseNativeType.CompoundShape);
            AddToDisposeQueue(createFunc);
            createFunc = null;
            conf = null;

            ForceGC();
            TestWeakRefs();
            ClearRefs();
        }
Exemple #3
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;
                }
            }
        }
        /// <summary>
        /// Creates the world
        /// </summary>
        void CreateWorld(string levelName)
        {
            Launch.Log("[PhysicsMain] Creating new world...");
            // have to make more of these every level because disposing the world apparently disposes of them too.
            broadphase = new DbvtBroadphase();
            solver = new SequentialImpulseConstraintSolver();
            dcc = new DefaultCollisionConfiguration();
            dispatcher = new CollisionDispatcher(dcc);
            // set up this stuff... not quite sure what it's for, but you need it if you want the CCD to work for the karts
            dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.ConvexHullShape, BroadphaseNativeType.ConvexHullShape,
                dcc.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.TriangleMeshShape, BroadphaseNativeType.TriangleMeshShape));
            dispatcher.RegisterCollisionCreateFunc(BroadphaseNativeType.ConvexHullShape, BroadphaseNativeType.ConvexHullShape,
                dcc.GetCollisionAlgorithmCreateFunc(BroadphaseNativeType.ConvexHullShape, BroadphaseNativeType.ConvexHullShape));

            world = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, dcc);
            // and then turn on CCD
            world.DispatchInfo.UseContinuous = true;

            world.Gravity = new Vector3(0, Settings.Default.Gravity, 0);

            ManifoldPoint.ContactAddedCallback = ContactAdded;
        }