public List <FBCollision <T> > GetAllCollisions(List <T> bodies, FBSpatialHash <T> bodiesHashed) { var allPossibleCollisions = GetAllPossibleCollisions(bodies, bodiesHashed); var firstCollisions = FilterEarliestCollisions(allPossibleCollisions); return(firstCollisions); }
protected List <T> GetPotentialCollidingBodies(T body, FBSpatialHash <T> bodiesHashed) { List <T> potentialBodies = new List <T>(); var sweptAABB = GetSweptAABB(body); var potentialCollisionBodies = bodiesHashed.GetRectangle(sweptAABB); foreach (var potentialBody in potentialCollisionBodies) { if (potentialBody != body) { potentialBodies.Add(potentialBody); } } return(potentialBodies); }
protected List <FBCollision <T> > GetAllPossibleCollisions(List <T> bodies, FBSpatialHash <T> bodiesHashed) { List <FBCollision <T> > collisions = new List <FBCollision <T> >(); var allPotentialCollisionPairs = GetPotentialCollisionPairs(bodies, bodiesHashed); foreach (var pair in allPotentialCollisionPairs) { if (pair.BodyA.Collider.WillCollideWith(pair.BodyA.MovementThisFrame, pair.BodyB.Collider, pair.BodyB.MovementThisFrame, out var bodyAMovementInfo, out var bodyBMovementInfo, true)) { var collision = new FBCollision <T>(); collision.BodyA = pair.BodyA; collision.BodyB = pair.BodyB; collision.AMovement = bodyAMovementInfo; collision.BMovement = bodyBMovementInfo; collisions.Add(collision); } } return(collisions); }
public void Initialize() { bodies = new List <T>(); bodiesHash = new FBSpatialHash <T>(100); }
public FBScene() { bodies = new List <T>(); bodiesHash = new FBSpatialHash <T>(100); collisionChecker = new FBCollisionChecker <T>(); }
protected List <FBPotentialCollisionPair <T> > GetPotentialCollisionPairs(List <T> bodies, FBSpatialHash <T> bodiesHashed) { var pairs = new List <FBPotentialCollisionPair <T> >(); foreach (var body in bodies) { var potentialCollidingBodies = GetPotentialCollidingBodies(body, bodiesHashed); foreach (var potentialCollidingBody in potentialCollidingBodies) { pairs.Add(new FBPotentialCollisionPair <T>() { BodyA = body, BodyB = potentialCollidingBody }); } } return(pairs); }