@Override
	protected void process(Set<ICollidable> collidables)
	{
		//Remove finished objects
		Iterator<ICollidable> it_remover = collidables.iterator();
		
		while(it_remover.hasNext())
		{
			if(it_remover.next().isFinished())
			{
				it_remover.remove();
			}
		}
		
		for(ICollidable collidable : collidables)
		{
			//The collisions for the collidable
			Set<Direction> collisions = new HashSet<Direction>();
			
			//Clear old data for collidables colliding with the collidable
			collidingCollidables.get(collidable).clear();
			
			for(ICollidable otherCollidable : collidables)
			{
				//Don't compare if it's the same collidable. It does not collide with itself.
				if(collidable == otherCollidable)
				{
					continue;
				}
				
				Set<Direction> collisionsFound = getCollision(collidable, otherCollidable);
//				Log.debug("Collision retrieved: " + collision);
				
				if(!collisionsFound.isEmpty())
				{
					collisions.addAll(collisionsFound);
					//Add this collidable to the set of collidables colliding with the target collidable
					collidingCollidables.get(collidable).add(otherCollidable);
				}
			}
			
			
			collidable.onCollision(collisions);
			
			//overwrite old set of collisions with latest data
			collidableCollisions.put(collidable, collisions);
		}
	}