public CollisionData(Collider collider, CollisionContact contact)
 {
     Collider = collider;
     Contact = contact;
 }
        public void Move(Collider collider)
        {
            var cells = colliderMap[collider.Entity.Id];
            foreach (var cell in cells)
            {
                if (!collider.Bounds.IntersectsWith(cell.Bounds))
                {
                    RemoveCollider(collider);
                }
            }

            AddCollider(collider);
        }
 /// <summary>
 /// Adds a collider to the grid.
 /// </summary>
 /// <param name="collider">The collider.</param>
 public void AddCollider(Collider collider)
 {
     var cells = CalculateCells(collider);
     colliderMap.Add(collider.Entity.Id, cells);
     foreach (var cell in cells)
     {
         cell.Colliders.Add(collider);
     }
 }
        private HashSet<Cell> CalculateCells(Collider collider)
        {
            var bounds = collider.Bounds;

            var startX = (int)(bounds.X - bounds.Center().X) / cellSize;
            var startY = (int)(bounds.Y - bounds.Center().Y) / cellSize;
            var endX = (int)(bounds.X + bounds.Center().X) / cellSize;
            var endY = (int)(bounds.Y + bounds.Center().Y) / cellSize;

            var result = new HashSet<Cell>();

            if (startX < 0 || endX >= cols || startY < 0 || endY >= rows)
            {
                // TODO: Resize the grid when the collider is out of the grid...
                Console.WriteLine("OUT OF BOUNDS");
                return result;
            }

            for (var iY = startY; iY <= endY; iY++)
                for (var iX = startX; iX <= endX; iX++)
                    result.Add(cells[iX, iY]);

            return result;
        }
 /// <summary>
 /// Removes a collider from the grid.
 /// </summary>
 /// <param name="collider">The collider.</param>
 public void RemoveCollider(Collider collider)
 {
     var cells = colliderMap[collider.Entity.Id];
     foreach (var cell in cells)
     {
         cell.Colliders.Remove(collider);
     }
 }
        public HashSet<Collider> Query(Collider collider)
        {
            var id = collider.Entity.Id;
            var colliders = new HashSet<Collider>();

            foreach (var entry in colliderMap[id])
            {
                foreach (var _collider in entry.Colliders)
                {
                    colliders.Add(_collider);
                }
            }
            return colliders;
        }