void updateQTs() { QTbodies = GenerateQT(ActiveBodies, MAXBUCKET); QTmap = GenerateQT(MapBodies, 1); }
public static void ResolveAll(List <IRigidBody> bodies, List <IRigidBody> mapbodies, QuadTree <IRigidBody> QTbodies, QuadTree <IRigidBody> QTmap) { var collisionData = new ConcurrentBag <CollisionData>(); //foreach (var b in bodies) bodies.AsParallel().ForAll(b => { var potHits = QTbodies.Query(b.BoundingBox); //broad-phase potHits.Remove(b); //the body itself will be included in query results. potHits.AddRange(QTmap.Query(b.BoundingBox)); if (potHits.Count > 0) { var allCollData = TestAndGetAllCollisionData(b, potHits); //narrow-phase if (allCollData.Count > 0) { CollisionData aggrColData = AggrCollisionData(allCollData); collisionData.Add(aggrColData); } } }); foreach (var cd in collisionData) { ApplyCollisionData(cd); //apply all aggregated collision responses. } }