private List <Tuple <IPhysicalEntity, IPhysicalEntity> > ComputeCollisionPairs( out List <Vector2> collisionPositions, List <IPhysicalEntity> collisionGroup, float firstCollidingTime) { // make a minimal step forward. There is a collision in the next minimal time step - resolve that collision List <Vector2> positions = GetPositions(collisionGroup); MoveCollisionGroup(collisionGroup, firstCollidingTime); collisionPositions = GetPositions(collisionGroup); List <IPhysicalEntity> objectsInCollision = collisionGroup.Where(m_collisionChecker.Collides).ToList(); List <Tuple <IPhysicalEntity, IPhysicalEntity> > collidingCouples = CollisionChecker.CollidingCouples(objectsInCollision); SetPositions(collisionGroup, positions); return(collidingCouples); }
private void InitPhysics() { Physics = new Physics.Physics(); IMovementPhysics movementPhysics = new MovementPhysics(); ICollisionChecker collisionChecker = new CollisionChecker(Atlas); // TODO MICHAL: setter for physics implementation /* m_collisionResolver = new NaiveCollisionResolver(collisionChecker, movementPhysics); /*/ m_collisionResolver = new MomentumCollisionResolver(collisionChecker, movementPhysics); //*/ //Log.Instance.Debug("World.ToyWorldCore.ToyWorld: Loading Successful"); }