static void checkCollisionsSelf(GameEntityList& list) {
		for(GameEntityList::iterator i = list.begin(); i != list.end(); ++i) {
NEXT_I:
			GameEntityList::iterator j = i;
			for(++j; j != list.end(); ++j) {
NEXT_J:
				//if one occurs then complete the action for both
				if((*i)->didCollide(**j)){
					(*i)->onCollide(**j);
					(*j)->onCollide(**i);

					const bool deleteI = (*i)->toDelete(),
					           deleteJ = (*j)->toDelete();
					if(deleteJ) {
						delete *j;
						j = list.erase(j);
					}
					if(deleteI) {
						delete *i;
						i = list.erase(i);
						if(i == list.end()) return;
						goto NEXT_I;
					} else if(deleteJ) {
						if(j == list.end()) break;
						goto NEXT_J;
					}
				}
			}
		}
	}
	static void updateEntities(GameEntityList& list) {
		GameEntityList::iterator i = list.begin();
		while(i != list.end()) {
			(*i)->update();
			
			if((*i)->toDelete()) {
				delete *i;
				i = list.erase(i);
				continue;
			}

			++i;
		}
	}