public boolean CollisionCheck() {
		// Also does points
		float pointsScored = 0;
		final LinkedList<Rectangle> ToRemove = new LinkedList<Rectangle>();
		synchronized (U.list_of_rectangles_sync) {
			for (final Rectangle R : U.list_of_rectangles_sync) {
				final float sep_x = (R.x + R.shape_size2) - U.player.x;
				final float sep_y = (R.y + R.shape_size2) - U.player.y;
				final double sep = Math.hypot(sep_x, sep_y);
				pointsScored += 1f / sep;
				if (sep < (R.shape_size2 + 4.)) {
					for (int i = 0; i < U.NDebris; ++i) {
						synchronized (U.list_of_debris_sync) {
							U.list_of_debris_sync.add(new Debris(R));
						}
					}
					ToRemove.add(R);
					--U.Lives;
					if (U.Lives <= 0) {
						U.Lives = 0;
					} else {
						U.player.Damage();
					}
				}
			}
			pointsScored *= U.Level;
			if (U.currentMode == GameMode.GameOn) {
				B.PlayingScore.AddValue(pointsScored);
			}
			if (ToRemove.size() > 0) {
				synchronized (U.list_of_debris_sync) {
					U.list_of_rectangles_sync.removeAll(ToRemove);
				}
				if (U.Lives == 0) return true; //disable this line to CHEAT
			}
		}
		return false;
	}