示例#1
0
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;
	}
}