void Game::backToMainMenu(){ closeAllDialogs(); getButtonPanel()->selectQueryTool(); saveCityNG( "9_currentGameNG.scn" ); running = false; quitState = MAINMENU; }
void MainMenu::loadGameSaveButtonClicked(Button *) { getSound()->playSound( "Click" ); if( file_exists( const_cast<char*>(mFilename.c_str()) ) ){ std::cout << "remove( " << mFilename << ")\n"; remove( mFilename.c_str() ); } /* Build filename */ std::stringstream newStart; newStart << slotNr << "_Y"; newStart << std::setfill('0') << std::setw(5); fprintf(stderr,"total_time %i\n",total_time); newStart << total_time/1200; newStart << "_Tech"; newStart << std::setfill('0') << std::setw(3); newStart << tech_level/10000; newStart << "_Cash"; if (total_money >= 0) { newStart << "+";} else { newStart << "-";} newStart << std::setfill('0') << std::setw(3); int money = abs(total_money); if (money > 1000000000) { newStart << money/1000000000 << "G";} else if (money > 1000000) { newStart << money/1000000 << "M";} else if(money > 1000) { newStart << money/1000 << "K";} else { newStart << money << "_";} newStart << "_P"; newStart << std::setfill('0') << std::setw(5); newStart << housed_population + people_pool; std::string newFilename( newStart.str() ); saveCityNG( newFilename ); fillLoadMenu( true ); }
MainState Game::run() { SDL_Event event; running = true; Uint32 fpsTicks = SDL_GetTicks(); Uint32 lastticks = fpsTicks; Desktop* desktop = dynamic_cast<Desktop*> (gui.get()); if(!desktop) { throw std::runtime_error("Toplevel component is not a Desktop");} gui->resize(getConfig()->videoX, getConfig()->videoY); int frame = 0; while(running) { getGameView()->scroll(); while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_VIDEORESIZE: initVideo(event.resize.w, event.resize.h); gui->resize(event.resize.w, event.resize.h); getConfig()->videoX = event.resize.w; getConfig()->videoY = event.resize.h; break; case SDL_KEYUP: { Event gui_event(event); if( gui_event.keysym.sym == SDLK_ESCAPE ){ getButtonPanel()->selectQueryTool(); break; } if( gui_event.keysym.sym == SDLK_b ){ getButtonPanel()->toggleBulldozeTool(); break; } /* //FIXME hack for monitoring constructionCount if( gui_event.keysym.sym == SDLK_c ){ std::cout << "ConstructionCount.size() = " << constructionCount.size() << std::endl; int i, j; for (i = 0, j = 0; i < constructionCount.size(); i++) {constructionCount[i]?j++:j;} std::cout << "for a total of " << j << " active constructions" << std::endl; break; } */ if( gui_event.keysym.sym == SDLK_p ){ static int i = 0; while(i < constructionCount.size() && !constructionCount[i]) {i++;} if (i < constructionCount.size()) { main_screen_originx = constructionCount[i]->x; main_screen_originy = constructionCount[i]->y; getGameView()->readOrigin(true); mps_set( main_screen_originx, main_screen_originy, MPS_MAP); mps_update(); mps_refresh(); i++; } else { i = 0; } break; } if( gui_event.keysym.sym == SDLK_F1 ){ helpWindow->showTopic("help"); break; } if( gui_event.keysym.sym == SDLK_F12 ){ quickSave(); break; } if( gui_event.keysym.sym == SDLK_F9 ){ quickLoad(); break; } #ifdef DEBUG if( gui_event.keysym.sym == SDLK_F5 ){ testAllHelpFiles(); break; } #endif int need_break=true; switch(gui_event.keysym.sym) { case SDLK_BACKQUOTE: getMiniMap()->mapViewChangeDisplayMode(MiniMap::NORMAL); break; case SDLK_1: getMiniMap()->mapViewChangeDisplayMode(MiniMap::STARVE); break; case SDLK_2: getMiniMap()->mapViewChangeDisplayMode(MiniMap::UB40); break; case SDLK_3: getMiniMap()->mapViewChangeDisplayMode(MiniMap::POWER); break; case SDLK_4: getMiniMap()->mapViewChangeDisplayMode(MiniMap::FIRE); break; case SDLK_5: getMiniMap()->mapViewChangeDisplayMode(MiniMap::CRICKET); break; case SDLK_6: getMiniMap()->mapViewChangeDisplayMode(MiniMap::HEALTH); break; case SDLK_7: getMiniMap()->mapViewChangeDisplayMode(MiniMap::TRAFFIC); break; case SDLK_8: getMiniMap()->mapViewChangeDisplayMode(MiniMap::POLLUTION); break; case SDLK_9: getMiniMap()->mapViewChangeDisplayMode(MiniMap::COAL); break; case SDLK_0: getMiniMap()->mapViewChangeDisplayMode(MiniMap::COMMODITIES); break; default: need_break=false; } if (need_break) break; gui->event(gui_event); break; } case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: case SDL_KEYDOWN: { Event gui_event(event); gui->event(gui_event); break; } case SDL_ACTIVEEVENT: if( event.active.gain == 1 ){ gui->resize( gui->getWidth(), gui->getHeight() ); } break; case SDL_VIDEOEXPOSE: gui->resize( gui->getWidth(), gui->getHeight() ); break; case SDL_QUIT: saveCityNG( "9_currentGameNG.scn" ); running = false; quitState = QUIT; break; default: break; } } // create update Event Uint32 ticks = SDL_GetTicks(); float elapsedTime = ((float) (ticks - lastticks)) / 1000.0; gui->event(Event(elapsedTime)); lastticks = ticks; helpWindow->update(); if(desktop->needsRedraw()) { desktop->draw(*painter); flipScreenBuffer(); } frame++; // Slow down cpu consumption in pause mode if(ticks - fpsTicks > 1000 && lincitySpeed) { #ifdef DEBUG_FPS printf("FPS: %d.\n", (frame*1000) / (ticks - fpsTicks)); #endif getEconomyGraph()->newFPS( frame ); frame = 0; fpsTicks = ticks; } else if(!lincitySpeed) { frame = 0;} /* SDL_Delay is done in execute_timestep */ execute_timestep (); } return quitState; }
void Game::quickSave(){ //save file getGameView()->printStatusMessage( "quick save..."); saveCityNG( "quicksave.scn" ); }