示例#1
0
        public void AddCollisionObject(CollisionObject collisionObject, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask)
        {
            //check that the object isn't already added
            if (!_collisionObjects.Contains(collisionObject))
            {
                _collisionObjects.Add(collisionObject);

                //calculate new AABB
                Matrix trans = collisionObject.WorldTransform;

                Vector3 minAabb;
                Vector3 maxAabb;
                collisionObject.CollisionShape.GetAabb(trans, out minAabb, out maxAabb);

                BroadphaseNativeTypes type = collisionObject.CollisionShape.ShapeType;
                collisionObject.Broadphase = Broadphase.CreateProxy(
                    minAabb,
                    maxAabb,
                    type,
                    collisionObject,
                    collisionFilterGroup,
                    collisionFilterMask
                    );
            }
        }
        public override void AddRigidBody(RigidBody body)
        {
            if (!body.IsStaticOrKinematicObject)
            {
                body.Gravity = _gravity;
            }

            if (body.CollisionShape != null)
            {
                bool isDynamic = !(body.IsStaticObject || body.IsKinematicObject);
                BroadphaseProxy.CollisionFilterGroups collisionFilterGroup = isDynamic ? BroadphaseProxy.CollisionFilterGroups.Default : BroadphaseProxy.CollisionFilterGroups.Static;
                BroadphaseProxy.CollisionFilterGroups collisionFilterMask  = isDynamic ? BroadphaseProxy.CollisionFilterGroups.All : (BroadphaseProxy.CollisionFilterGroups.All ^ BroadphaseProxy.CollisionFilterGroups.Static);

                AddCollisionObject(body, collisionFilterGroup, collisionFilterMask);
            }
        }
示例#3
0
        public ushort AddHandle(Vector3 aabbMin, Vector3 aabbMax, object owner, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask)
        {
            ushort[] min = new ushort[3], max = new ushort[3];
            Quantize(out min, aabbMin, 0);
            Quantize(out max, aabbMax, 1);

            ushort handle  = AllocateHandle();
            Handle oHandle = GetHandle(handle);

            oHandle.HandleID             = handle;
            oHandle.ClientData           = owner;
            oHandle.CollisionFilterGroup = collisionFilterGroup;
            oHandle.CollisionFilterMask  = collisionFilterMask;

            int limit = _numHandles * 2;

            // (Gluk    )
            //  ( Inside )
            for (int axis = 0; axis < 3; axis++)
            {
                _handles[0].MaxEdges[axis] += 2;

                _edges[axis][limit + 1].Position = _edges[axis][limit - 1].Position;
                _edges[axis][limit + 1].Handle   = _edges[axis][limit - 1].Handle;

                _edges[axis][limit - 1].Position = min[axis];
                _edges[axis][limit - 1].Handle   = handle;

                _edges[axis][limit].Position = max[axis];
                _edges[axis][limit].Handle   = handle;

                oHandle.MinEdges[axis] = (ushort)(limit - 1);
                oHandle.MaxEdges[axis] = (ushort)limit;
            }

            SortMinDown(0, oHandle.MinEdges[0], false);
            SortMaxDown(0, oHandle.MaxEdges[0], false);
            SortMinDown(1, oHandle.MinEdges[1], false);
            SortMaxDown(1, oHandle.MaxEdges[1], false);
            SortMinDown(2, oHandle.MinEdges[2], true);
            SortMaxDown(2, oHandle.MaxEdges[2], true);

            return(handle);
        }
示例#4
0
        public override BroadphaseProxy CreateProxy(Vector3 min, Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask)
        {
            ushort handleId = AddHandle(min, max, userData, collisionFilterGroup, collisionFilterMask);

            Handle handle = GetHandle(handleId);

            return(handle);
        }
示例#5
0
        public override BroadphaseProxy CreateProxy(Vector3 min, Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask)
        {
            if (_proxies.Count >= _maxProxies)
            {
                BulletDebug.Assert(false);
                return(null);                //should never happen, but don't let the game crash ;-)
            }
            BulletDebug.Assert(min.X <= max.X && min.Y <= max.Y && min.Z <= max.Z);

            SimpleBroadphaseProxy proxy = new SimpleBroadphaseProxy(min, max, shapeType, userData, collisionFilterGroup, collisionFilterMask);

            _proxies.Add(proxy);

            return(proxy);
        }
示例#6
0
 public abstract BroadphaseProxy CreateProxy(MonoXnaCompactMaths.Vector3 min, MonoXnaCompactMaths.Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask);
示例#7
0
 public abstract BroadphaseProxy CreateProxy(Microsoft.Xna.Framework.Vector3 min, Microsoft.Xna.Framework.Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask);