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); } }
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); }
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); }
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); }
public abstract BroadphaseProxy CreateProxy(MonoXnaCompactMaths.Vector3 min, MonoXnaCompactMaths.Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask);
public abstract BroadphaseProxy CreateProxy(Microsoft.Xna.Framework.Vector3 min, Microsoft.Xna.Framework.Vector3 max, BroadphaseNativeTypes shapeType, object userData, BroadphaseProxy.CollisionFilterGroups collisionFilterGroup, BroadphaseProxy.CollisionFilterGroups collisionFilterMask);