void InGameState::update(){ if(game->getGSM()->getOverlayGameState()!=lastOverlayState){ map<int,GUIScreenOverlay*>::iterator find=overlayWorkers.find(lastOverlayState); if(find!=overlayWorkers.end())(*find).second->onEnd(); lastOverlayState=game->getGSM()->getOverlayGameState(); find=overlayWorkers.find(lastOverlayState); if(find!=overlayWorkers.end())(*find).second->onStart(); } if(!game->getGSM()->isGameInProgress()){ int overlayState= game->getGSM()->getOverlayGameState(); map<int,GUIScreenOverlay*>::iterator find=overlayWorkers.find(overlayState); if(find!=overlayWorkers.end())(*find).second->update(game); return; } if(!mainPlayer->wizard->startGameTutorial){ game->getGSM()->overlayGameState=TUTSYSSCREENOVERLAYNUM; tutSys->currentTutorial="StartGame"; mainPlayer->wizard->startGameTutorial=true; } /** sort the bots to make rendering more realistic **/ //Using insertion sort to keep bots in y order. Is poor in high inversion counts. Degrades to 30 FPS at ~608 bodies with test sim. //Without sort 650 bodies? depends on the situation. Should be good enough to use. InsertionSort(game->getGSM()->getSpriteManager()->getBotList()); if(gridMapCount--<=0){gridMap.evaluateGrid(game);gridMapCount=120;} //GAME OVER HANDLING HERE int deadPlayer; if((deadPlayer = updatePlayer()) >= 0){ BattleReportGUI *brg = new BattleReportGUI(); if(deadPlayer == 0){ //DISPLAY LOSS brg->onStart(game, false); overlayWorkers[GS_GAME_OVER] = brg; game->getSoundManager()->stopCue("MAIN_LOOP"); game->getSoundManager()->playCue("VICTORY"); game->getGSM()->gameOver(); }else{ //DISPLAY VICTORY brg->onStart(game, true); overlayWorkers[GS_VICTORY] = brg; game->getSoundManager()->stopCue("MAIN_LOOP"); game->getSoundManager()->playCue("VICTORY"); game->getGSM()->victory(); } } list<Spell*>::iterator spellIt= spells.begin(); while(spellIt!=spells.end()){ Spell* spell = *spellIt; if(spell->update(game)){ spellIt=spells.erase(spellIt); delete spell; } else spellIt++; } if(count++>100 && !players[0]->tower->isDead()&& !players[1]->tower->isDead()){ BotRecycler* recycler=game->getGSM()->getSpriteManager()->getBotRecycler(); Unit* u; count=0; } }