Ejemplo n.º 1
0
        public void TenBodyInitTest()
        {
            CollisionWorld world = new CollisionWorld(10, 0);

            Assert.IsTrue(world.NumBodies == 10);
            world.Dispose();
        }
Ejemplo n.º 2
0
        public void ZeroBodyInitTest()
        {
            CollisionWorld world = new CollisionWorld(0);

            Assert.IsTrue(world.NumBodies == 0);
            world.Dispose();
        }
Ejemplo n.º 3
0
        public unsafe void DisposeIndex(int index)
        {
            if (m_size == 1 && index == 0)
            {
                return;
            }
            switch (index)
            {
            case 0: CollisionWorld00.Dispose(); return;

            case 1: CollisionWorld01.Dispose(); return;

            case 2: CollisionWorld02.Dispose(); return;

            case 3: CollisionWorld03.Dispose(); return;

            case 4: CollisionWorld04.Dispose(); return;

            case 5: CollisionWorld05.Dispose(); return;

            case 6: CollisionWorld06.Dispose(); return;

            case 7: CollisionWorld07.Dispose(); return;

            case 8: CollisionWorld08.Dispose(); return;

            case 9: CollisionWorld09.Dispose(); return;

            case 10: CollisionWorld10.Dispose(); return;

            case 11: CollisionWorld11.Dispose(); return;

            case 12: CollisionWorld12.Dispose(); return;

            case 13: CollisionWorld13.Dispose(); return;

            case 14: CollisionWorld14.Dispose(); return;

            case 15: CollisionWorld15.Dispose(); return;

            default:
                throw new IndexOutOfRangeException();
            }
        }
Ejemplo n.º 4
0
        protected void Dispose(bool disposing)
        {
            if (debugType >= BDebug.DebugType.Debug)
            {
                Debug.Log("BDynamicsWorld Disposing physics.");
            }

            if (PhysicsWorldHelper != null)
            {
                PhysicsWorldHelper.m_ddWorld = null;
                PhysicsWorldHelper.m_world   = null;
            }
            if (m_world != null)
            {
                //remove/dispose constraints
                int i;
                if (_ddWorld != null)
                {
                    if (debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removing Constraints {0}", _ddWorld.NumConstraints);
                    }
                    for (i = _ddWorld.NumConstraints - 1; i >= 0; i--)
                    {
                        TypedConstraint constraint = _ddWorld.GetConstraint(i);
                        _ddWorld.RemoveConstraint(constraint);
                        if (constraint.Userobject is BTypedConstraint)
                        {
                            ((BTypedConstraint)constraint.Userobject).m_isInWorld = false;
                        }
                        if (debugType >= BDebug.DebugType.Debug)
                        {
                            Debug.LogFormat("Removed Constaint {0}", constraint.Userobject);
                        }
                        constraint.Dispose();
                    }
                }

                if (debugType >= BDebug.DebugType.Debug)
                {
                    Debug.LogFormat("Removing Collision Objects {0}", m_world.NumCollisionObjects);
                }
                //remove the rigidbodies from the dynamics world and delete them
                for (i = m_world.NumCollisionObjects - 1; i >= 0; i--)
                {
                    CollisionObject obj  = m_world.CollisionObjectArray[i];
                    RigidBody       body = obj as RigidBody;
                    if (body != null && body.MotionState != null)
                    {
                        Debug.Assert(body.NumConstraintRefs == 0, "Rigid body still had constraints");
                        body.MotionState.Dispose();
                    }
                    m_world.RemoveCollisionObject(obj);
                    if (obj.UserObject is BCollisionObject)
                    {
                        ((BCollisionObject)obj.UserObject).isInWorld = false;
                    }
                    if (debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removed CollisionObject {0}", obj.UserObject);
                    }
                    obj.Dispose();
                }

                MultiBodyDynamicsWorld _mbdWorld = m_world as MultiBodyDynamicsWorld;
                if (_mbdWorld != null)
                {
                    if (debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removing MultiBody Constraints {0}", _mbdWorld.NumMultiBodyConstraints);
                    }
                    for (i = _mbdWorld.NumMultiBodyConstraints - 1; i >= 0; i--)
                    {
                        MultiBodyConstraint constraint = _mbdWorld.GetMultiBodyConstraint(i);
                        _mbdWorld.RemoveMultiBodyConstraint(constraint);

                        /* if (constraint.Userobject is BTypedConstraint) ((BTypedConstraint)constraint.Userobject).m_isInWorld = false;
                         * if (debugType >= BDebug.DebugType.Debug) Debug.LogFormat("Removed Constaint {0}", constraint.Userobject);*/
                        constraint.Dispose();
                    }

                    if (debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removing Multibodies {0}", _mbdWorld.NumMultibodies);
                    }
                    //remove the rigidbodies from the dynamics world and delete them
                    for (i = _mbdWorld.NumMultibodies - 1; i >= 0; i--)
                    {
                        MultiBody mb = _mbdWorld.GetMultiBody(i);

                        _mbdWorld.RemoveMultiBody(mb);
                        if (mb.UserObject is BMultiBody bmb)
                        {
                            bmb.isInWorld = false;
                        }
                        if (debugType >= BDebug.DebugType.Debug)
                        {
                            Debug.LogFormat("Removed CollisionObject {0}", mb.UserObject);
                        }
                        mb.Dispose();
                    }
                }

                if (m_world.DebugDrawer != null)
                {
                    if (m_world.DebugDrawer is IDisposable)
                    {
                        IDisposable dis = (IDisposable)m_world.DebugDrawer;
                        dis.Dispose();
                    }
                }

                m_world.Dispose();
                Broadphase.Dispose();
                Dispatcher.Dispose();
                CollisionConf.Dispose();
                _ddWorld = null;
                m_world  = null;
            }

            if (Broadphase != null)
            {
                Broadphase.Dispose();
                Broadphase = null;
            }
            if (Dispatcher != null)
            {
                Dispatcher.Dispose();
                Dispatcher = null;
            }
            if (CollisionConf != null)
            {
                CollisionConf.Dispose();
                CollisionConf = null;
            }
            if (constraintSolver != null)
            {
                constraintSolver.Dispose();
                constraintSolver = null;
            }
            if (softBodyWorldInfo != null)
            {
                softBodyWorldInfo.Dispose();
                softBodyWorldInfo = null;
            }
            _isDisposed = true;
            singleton   = null;
        }
Ejemplo n.º 5
0
 protected override void UnloadContent()
 {
     _tiledMap.Dispose();
     _world.Dispose();
 }
Ejemplo n.º 6
0
        protected void Dispose(bool disposing)
        {
            if (debugType >= BDebug.DebugType.Debug)
            {
                Debug.Log("BDynamicsWorld Disposing physics.");
            }

            /* NU
             * if (lateUpdateHelper != null)
             * {
             *  lateUpdateHelper.m_ddWorld = null;
             *  lateUpdateHelper.m_world = null;
             * }
             */
            if (m_world != null)
            {
                //remove/dispose constraints
                int i;
                if (_ddWorld != null)
                {
                    if (debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removing Constraints {0}", _ddWorld.NumConstraints);
                    }
                    for (i = _ddWorld.NumConstraints - 1; i >= 0; i--)
                    {
                        TypedConstraint constraint = _ddWorld.GetConstraint(i);
                        _ddWorld.RemoveConstraint(constraint);
                        if (constraint.Userobject is BTypedConstraint)
                        {
                            ((BTypedConstraint)constraint.Userobject).m_isInWorld = false;
                        }
                        if (debugType >= BDebug.DebugType.Debug)
                        {
                            Debug.LogFormat("Removed Constaint {0}", constraint.Userobject);
                        }
                        constraint.Dispose();
                    }
                }

                /* gRally
                 * if (debugType >= BDebug.DebugType.Debug) Debug.LogFormat("Removing Collision Objects {0}", _ddWorld.NumCollisionObjects);
                 * //remove the rigidbodies from the dynamics world and delete them
                 * for (i = m_world.NumCollisionObjects - 1; i >= 0; i--)
                 * {
                 *  CollisionObject obj = m_world.CollisionObjectArray[i];
                 *  RigidBody body = obj as RigidBody;
                 *  if (body != null && body.MotionState != null)
                 *  {
                 *      Debug.Assert(body.NumConstraintRefs == 0, "Rigid body still had constraints");
                 *      body.MotionState.Dispose();
                 *  }
                 *  m_world.RemoveCollisionObject(obj);
                 *  if (obj.UserObject is BCollisionObject) ((BCollisionObject)obj.UserObject).isInWorld = false;
                 *  if (debugType >= BDebug.DebugType.Debug) Debug.LogFormat("Removed CollisionObject {0}", obj.UserObject);
                 *  obj.Dispose();
                 * }
                 *
                 */

                if (m_world.DebugDrawer != null)
                {
                    if (m_world.DebugDrawer is IDisposable)
                    {
                        IDisposable dis = (IDisposable)m_world.DebugDrawer;
                        dis.Dispose();
                    }
                }

                m_world.Dispose();
                Broadphase.Dispose();
                Dispatcher.Dispose();
                CollisionConf.Dispose();
                _ddWorld = null;
                m_world  = null;
            }

            if (Broadphase != null)
            {
                Broadphase.Dispose();
                Broadphase = null;
            }
            if (Dispatcher != null)
            {
                Dispatcher.Dispose();
                Dispatcher = null;
            }
            if (CollisionConf != null)
            {
                CollisionConf.Dispose();
                CollisionConf = null;
            }
            if (Solver != null)
            {
                Solver.Dispose();
                Solver = null;
            }
            if (softBodyWorldInfo != null)
            {
                softBodyWorldInfo.Dispose();
                softBodyWorldInfo = null;
            }
            _isDisposed = true;
            singleton   = null;
        }
Ejemplo n.º 7
0
 public void Dispose()
 {
     collisionWorld.Dispose();
     dispatcher.Dispose();
     collisionConfiguration.Dispose();
 }
Ejemplo n.º 8
0
        protected void Dispose(bool disposing)
        {
            BDebug.Log(debugType, "BDynamicsWorld Disposing physics.");

            if (m_world != null)
            {
                //remove/dispose constraints
                int i;
                if (_ddWorld != null)
                {
                    for (i = _ddWorld.NumConstraints - 1; i >= 0; i--)
                    {
                        TypedConstraint constraint = _ddWorld.GetConstraint(i);
                        _ddWorld.RemoveConstraint(constraint);
                        if (constraint.Userobject is BTypedConstraint)
                        {
                            ((BTypedConstraint)constraint.Userobject).isInWorld = false;
                        }
                        if ((debugType & BDebug.DebugType.Debug) == BDebug.DebugType.Debug)
                        {
                            Debug.LogFormat("Removed Constaint {0}", constraint.Userobject);
                        }
                        constraint.Dispose();
                    }
                }

                //remove the rigidbodies from the dynamics world and delete them
                for (i = m_world.NumCollisionObjects - 1; i >= 0; i--)
                {
                    CollisionObject obj  = m_world.CollisionObjectArray[i];
                    RigidBody       body = obj as RigidBody;
                    if (body != null && body.MotionState != null)
                    {
                        body.MotionState.Dispose();
                    }
                    m_world.RemoveCollisionObject(obj);
                    if (obj.UserObject is BCollisionObject)
                    {
                        ((BCollisionObject)obj.UserObject).isInWorld = false;
                    }
                    if ((debugType & BDebug.DebugType.Debug) == BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removed CollisionObject {0}", obj.UserObject);
                    }
                    obj.Dispose();
                }

                if (m_world.DebugDrawer != null)
                {
                    if (m_world.DebugDrawer is IDisposable)
                    {
                        IDisposable dis = (IDisposable)m_world.DebugDrawer;
                        dis.Dispose();
                    }
                }

                m_world.Dispose();
                Broadphase.Dispose();
                Dispatcher.Dispose();
                CollisionConf.Dispose();
                _ddWorld = null;
                m_world  = null;
            }

            if (Broadphase != null)
            {
                Broadphase.Dispose();
                Broadphase = null;
            }
            if (Dispatcher != null)
            {
                Dispatcher.Dispose();
                Dispatcher = null;
            }
            if (CollisionConf != null)
            {
                CollisionConf.Dispose();
                CollisionConf = null;
            }
            if (Solver != null)
            {
                Solver.Dispose();
                Solver = null;
            }
            if (softBodyWorldInfo != null)
            {
                softBodyWorldInfo.Dispose();
                softBodyWorldInfo = null;
            }
            _isDisposed = true;
            singleton   = null;
        }
Ejemplo n.º 9
0
    private void Dispose(bool disposing)
    {
        if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
        {
            Debug.Log("BDynamicsWorld Disposing physics.");
        }

        if (_world != null)
        {
            //remove/dispose constraints
            int i;
            if (DDWorld != null)
            {
                if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
                {
                    Debug.LogFormat("Removing Constraints {0}", DDWorld.NumConstraints);
                }

                for (i = DDWorld.NumConstraints - 1; i >= 0; i--)
                {
                    TypedConstraint constraint = DDWorld.GetConstraint(i);
                    DDWorld.RemoveConstraint(constraint);

                    if (constraint.Userobject is BTypedConstraint)
                    {
                        ((BTypedConstraint)constraint.Userobject).m_isInWorld = false;
                    }

                    if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
                    {
                        Debug.LogFormat("Removed Constaint {0}", constraint.Userobject);
                    }

                    constraint.Dispose();
                }
            }

            if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
            {
                Debug.LogFormat("Removing Collision Objects {0}", DDWorld.NumCollisionObjects);
            }

            //Remove the rigidbodies from the dynamics world and delete them
            for (i = _world.NumCollisionObjects - 1; i >= 0; i--)
            {
                CollisionObject obj  = _world.CollisionObjectArray[i];
                RigidBody       body = obj as RigidBody;

                if (body != null && body.MotionState != null)
                {
                    Debug.Assert(body.NumConstraintRefs == 0, "Rigid body still had constraints");
                    body.MotionState.Dispose();
                }

                _world.RemoveCollisionObject(obj);

                if (obj.UserObject is BCollisionObject)
                {
                    ((BCollisionObject)obj.UserObject).isInWorld = false;
                }

                if (physicWorldParameters.debugType >= BDebug.DebugType.Debug)
                {
                    Debug.LogFormat("Removed CollisionObject {0}", obj.UserObject);
                }

                obj.Dispose();
            }

            if (_world.DebugDrawer != null && _world.DebugDrawer is IDisposable)
            {
                ((IDisposable)_world.DebugDrawer).Dispose();
            }

            _world.Dispose();
            World = null;
        }

        if (broadphase != null)
        {
            broadphase.Dispose();
            broadphase = null;
        }

        if (dispatcher != null)
        {
            dispatcher.Dispose();
            dispatcher = null;
        }

        if (collisionConf != null)
        {
            collisionConf.Dispose();
            collisionConf = null;
        }

        if (constraintSolver != null)
        {
            constraintSolver.Dispose();
            constraintSolver = null;
        }

        if (ghostPairCallback != null)
        {
            ghostPairCallback.Dispose();
            ghostPairCallback = null;
        }

        isDisposed = true;
    }
Ejemplo n.º 10
0
        protected void Dispose(bool disposing)
        {
            if (lateUpdateHelper != null)
            {
                lateUpdateHelper.m_ddWorld = null;
                lateUpdateHelper.m_world   = null;
            }
            if (m_world != null)
            {
                //remove/dispose constraints
                int i;
                if (_ddWorld != null)
                {
                    for (i = _ddWorld.NumConstraints - 1; i >= 0; i--)
                    {
                        TypedConstraint constraint = _ddWorld.GetConstraint(i);
                        _ddWorld.RemoveConstraint(constraint);
                        if (constraint.Userobject is BTypedConstraint)
                        {
                            ((BTypedConstraint)constraint.Userobject).m_isInWorld = false;
                        }
                        constraint.Dispose();
                    }
                }

                //remove the rigidbodies from the dynamics world and delete them
                for (i = m_world.NumCollisionObjects - 1; i >= 0; i--)
                {
                    CollisionObject obj  = m_world.CollisionObjectArray[i];
                    RigidBody       body = obj as RigidBody;
                    if (body != null && body.MotionState != null)
                    {
                        Debug.Assert(body.NumConstraintRefs == 0, "Rigid body still had constraints");
                        body.MotionState.Dispose();
                    }
                    m_world.RemoveCollisionObject(obj);
                    if (obj.UserObject is BCollisionObject)
                    {
                        ((BCollisionObject)obj.UserObject).isInWorld = false;
                    }
                    obj.Dispose();
                }

                if (m_world.DebugDrawer != null)
                {
                    if (m_world.DebugDrawer is IDisposable)
                    {
                        IDisposable dis = (IDisposable)m_world.DebugDrawer;
                        dis.Dispose();
                    }
                }

                m_world.Dispose();
                Broadphase.Dispose();
                Dispatcher.Dispose();
                CollisionConf.Dispose();
                _ddWorld = null;
                m_world  = null;
            }

            if (Broadphase != null)
            {
                Broadphase.Dispose();
                Broadphase = null;
            }
            if (Dispatcher != null)
            {
                Dispatcher.Dispose();
                Dispatcher = null;
            }
            if (CollisionConf != null)
            {
                CollisionConf.Dispose();
                CollisionConf = null;
            }
            if (constraintSolver != null)
            {
                constraintSolver.Dispose();
                constraintSolver = null;
            }
            if (softBodyWorldInfo != null)
            {
                softBodyWorldInfo.Dispose();
                softBodyWorldInfo = null;
            }
            _isDisposed = true;
            singleton   = null;
        }