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; } }
GameEntityList::iterator deleteSoftEntity(GameEntityList::iterator b) { delete *b; std::cerr<<"Soft entities alive: "<<wSoftEntities.size() - 1<<'\n'; return wSoftEntities.erase(b); }
GameEntityList::iterator deleteEntity(GameEntityList::iterator g){ //Removes a entities to the scene delete *g; return wEntities.erase(g); }
GameEntityList::iterator deleteWall(GameEntityList::iterator w){ //Removes a wall to the scene delete *w; return wWalls.erase(w); }