/* update - This method should be called once per frame. It goes through all of the sprites, including the player, and calls their update method such that they may update themselves. */ void SpriteManager::update() { // UPDATE THE PLAYER SPRITE ANIMATION FRAME/STATE/ROTATION if (player != nullptr) player->updateSprite(); // NOW UPDATE THE REST OF THE SPRITES ANIMATION FRAMES/STATES/ROTATIONS list<Bot*>::iterator botIterator = bots.begin(); list<Bot*> markedBots; while (botIterator != bots.end()) { Bot *bot = (*botIterator); bot->think(); bot->updateSprite(); if (bot->isMarkedForRemoval()) markedBots.push_back(bot); botIterator++; } // NOW REMOVE ALL THE MARKED BOTS FROM THE SPRITE MANAGER list<Bot*>::iterator markedBotsIterator = markedBots.begin(); while (markedBotsIterator != markedBots.end()) { Bot *bot = (*markedBotsIterator); bots.remove(bot); markedBotsIterator++; } // AND UPDATE THE SPAWNING POOLS vector<BotSpawningPool*>::iterator spawningPoolIterator = spawningPools.begin(); while (spawningPoolIterator != spawningPools.end()) { BotSpawningPool *pool = (*spawningPoolIterator); pool->update(); // AND ONTO THE NEXT SPAWNING POOL spawningPoolIterator++; } }