Ejemplo n.º 1
0
	static void checkCollisions(GameEntityList& listA, GameEntityList& listB) {
		assert(&listA != &listB);
		for(GameEntityList::iterator i = listA.begin(); i != listA.end(); ++i) {
NEXT_I:
			for(GameEntityList::iterator j = listB.begin(); j != listB.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 = listB.erase(j);
					}
					if(deleteI) {
						delete *i;
						i = listA.erase(i);
						if(i == listA.end()) return;
						goto NEXT_I;
					} else if(deleteJ) {
						if(j == listB.end()) break;
						goto NEXT_J;
					}
				}
			}
		}
	}
Ejemplo n.º 2
0
	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;
		}
	}