void winsys_process_events() { SDL_Event event; while(true){ SDL_LockAudio(); SDL_UnlockAudio(); while(SDL_PollEvent(&event)){ switch(event.type){ case SDL_KEYDOWN: loop_keyboard_func(event.key.keysym.sym, event.key.keysym.mod, false); break; case SDL_KEYUP: loop_keyboard_func( event.key.keysym.sym, event.key.keysym.mod, true); break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: loop_mouse_func( event.button.button, event.button.state, ppogl::Vec2i(event.button.x, event.button.y)); break; case SDL_MOUSEMOTION: if(event.motion.state){ // buttons are down loop_mouse_motion_func(ppogl::Vec2i(event.motion.x, event.motion.y)); }else{ // no buttons are down loop_mouse_motion_func(ppogl::Vec2i(event.motion.x, event.motion.y)); } break; case SDL_VIDEORESIZE: PPConfig.setInt("x_resolution",event.resize.w); PPConfig.setInt("y_resolution",event.resize.h); setup_video_mode(); reshape(ppogl::Vec2i(event.resize.w, event.resize.h)); break; case SDL_QUIT: winsys_exit(0); break; } SDL_LockAudio(); SDL_UnlockAudio(); } GameMode::mainLoop(); // delay for 1ms to alow other threads to do some work SDL_Delay(1); } PP_NOT_REACHED(); }
void handle_system_error( int exit_code, char *fmt, ... ) { va_list args; va_start( args, fmt ); fprintf( stderr, "*** " PROG_NAME " error: " ); vfprintf( stderr, fmt, args ); fprintf( stderr, " (%s)\n", strerror( errno ) ); va_end( args ); winsys_exit( exit_code ); }
void quit_click_cb( button_t *button, void *userdata ) { check_assertion( userdata == NULL, "userdata is not null" ); winsys_exit( 0 ); }
void GameMode::mainLoop() { /* Grab mouse pointer ppogl::Vec2d pos = ppogl::UIManager::getInstance().getCursorPosition(); // Flip y coordinates pos.y() = GameMode::resolutionY - pos.y(); if( pos.x() < 0 ){ pos.x() = 0; } if( pos.x() > GameMode::resolutionX-1 ){ pos.x() = GameMode::resolutionX-1; } if( pos.y() < 0 ){ pos.y() = 0; } if( pos.y() > GameMode::resolutionY-1 ) { pos.y() = GameMode::resolutionY-1; } winsys_warp_pointer( int(pos.x()), int(pos.y()) ); */ if ( GameMode::mode != new_mode ) { if (GameMode::currentMode!=NULL){ delete GameMode::currentMode; } GameMode::prevmode = GameMode::mode; PP_MESSAGE("Switching mode: " << new_mode); switch(new_mode){ case SPLASH: GameMode::currentMode = new SplashScreen(); break; case GAME_TYPE_SELECT: GameMode::currentMode = new GameTypeSelect(); break; case CREDITS: GameMode::currentMode = new Credits(); break; case CONFIGURATION: GameMode::currentMode = new Configuration(); break; case RACE_SELECT: GameMode::currentMode = new RaceSelect(); break; case LOADING: GameMode::currentMode = new Loading(); break; case INTRO: GameMode::currentMode = new Intro(); break; case RACING: GameMode::currentMode = new Racing(); break; case PAUSED: GameMode::currentMode = new Paused(); break; case GAME_OVER: GameMode::currentMode = new GameOver(); break; case RESET: GameMode::currentMode = new Reset(); break; case EVENT_SELECT: GameMode::currentMode = new EventSelect(); break; case CONFIG_GENERAL: GameMode::currentMode = new GeneralConfig(); break; case CONFIG_VIDEO: GameMode::currentMode = new VideoConfig(); break; case CONFIG_AUDIO: GameMode::currentMode = new AudioConfig(); break; case CONFIG_KEYBOARD: GameMode::currentMode = new KeyboardConfig(); break; case CONFIG_JOYSTICK: GameMode::currentMode = new JoystickConfig(); break; case CONFIG_GRAPHICS: GameMode::currentMode = new GraphicsConfig(); break; case EVENT_RACE_SELECT: GameMode::currentMode = new EventRaceSelect(); break; case BENCHMARK: GameMode::currentMode = new Benchmark(); break; case QUIT: winsys_exit(0); break; default: PP_NOT_REACHED(); } GameMode::mode = new_mode; // Reset time step clock so that there isn't a sudden // jump when we start the new mode GameMgr::getInstance().resetTimeStep(); } GameMgr::getInstance().updateTimeStep(); clear_rendering_context(); const float timestep = GameMgr::getInstance().getTimeStep(); if(Benchmark::getTimeStep() >0.0){ GameMode::currentMode->loop(Benchmark::getTimeStep()); }else{ GameMode::currentMode->loop(timestep); } updateDisplay(); //update the FPS counter for this frame fpsCounter.update(timestep); }
GameOver::GameOver() { halt_sound( "flying_sound" ); halt_sound( "rock_sound" ); halt_sound( "ice_sound" ); halt_sound( "snow_sound" ); char * home_path; home_path = getenv ("HOME"); if (home_path!=NULL) { // Patch MD: Callback for fullcircle std::cout << "GameOver: Executing fullcircle toolchain" << std::endl; int minutes, seconds, hundredths; getTimeComponents( gameMgr->time, minutes, seconds, hundredths ); std::ostringstream oss; oss << home_path << "/bin/fc-run.sh"; oss << " " << minutes << "a" << seconds << "b" << hundredths; std::string command=oss.str(); std::cout << "Running " << command << std::endl; std::string run_log=exec(command); std::cout << "Log was: " << run_log << std::endl; } else { std::cout << "No HOME environment variable found - cannot locate fc-run.sh" << std::endl; } if( Benchmark::getMode() != Benchmark::NONE ){ Benchmark::displayState(); winsys_exit( 0 ); } play_music( "game_over" ); m_aborted = gameMgr->wasRaceAborted(); if ( !m_aborted ) { gameMgr->updatePlayersScores(); } if ( gameMgr->gametype!=GameMgr::PRACTICING ) { m_bestScore = gameMgr->updateCurrentRaceData(); if(!gameMgr->wasRaceWon()){ players[0].decLives(); } }else{ if ( !m_aborted ) { m_bestScore = players[0].updateOpenCourseData( gameMgr->getCurrentRace().name, gameMgr->time, players[0].herring, players[0].score); if(m_bestScore) players[0].saveData(); } } { pp::Vec3d dir = players[0].vel; int speed = int(dir.normalize()); //set max_speed if (speed > players[0].max_speed) players[0].max_speed=int(speed); } int width = getparam_x_resolution(); int height = getparam_y_resolution(); pp::Vec2d pos(width/2, height/2 +200); if ( gameMgr->wasRaceAborted() ) { mp_raceOverLbl = new pp::Label(pos,"race_over",_("Race aborted")); mp_raceOverLbl->alignment.center(); }else{ mp_raceOverLbl = new pp::Label(pos,"race_over",_("Race Over")); mp_raceOverLbl->alignment.center(); char buff[BUFF_LEN]; int minutes, seconds, hundredths; getTimeComponents( gameMgr->time, minutes, seconds, hundredths ); sprintf( buff, _("Time: %02d:%02d.%02d"), minutes, seconds, hundredths ); pos.y-=100; mp_timeLbl = new pp::Label(pos,"race_stats", buff); mp_timeLbl->alignment.center(); sprintf( buff, _("Herring: %3d"), players[0].herring ); pos.y-=30; mp_herringLbl = new pp::Label(pos,"race_stats",buff); mp_herringLbl->alignment.center(); sprintf( buff, _("Score: %6d"), players[0].score ); pos.y-=30; mp_scoreLbl = new pp::Label(pos,"race_stats",buff); mp_scoreLbl->alignment.center(); int speed = int((double)players[0].max_speed * M_PER_SEC_TO_KM_PER_H); sprintf( buff, _("Max speed: %3d km/h"), speed); pos.y-=30; mp_maxspeedLbl = new pp::Label(pos,"race_stats",buff); mp_maxspeedLbl->alignment.center(); double percent = (gameMgr->airbornetime / gameMgr->time) * 100.0; sprintf( buff, _("Was flying: %.01f %% of time"), percent); pos.y-=30; mp_flyingLbl = new pp::Label(pos,"race_stats",buff); mp_flyingLbl->alignment.center(); char buff2[50]; snprintf(buff2, 50, ""); if(highscore::useHighscore) { int pos = Highscore->addScore(gameMgr->getCurrentRace().name,players[0].name,players[0].score); if(pos != -1) snprintf(buff2, 50, _("You made it to the %s place in the highscore!"),highscore::posToStr(pos).c_str()); } pos.y-=30; mp_highscoreLbl = new pp::Label(pos,"race_stats",buff2); mp_highscoreLbl->alignment.center(); const char *string=""; if ( gameMgr->gametype==GameMgr::PRACTICING){ if(m_bestScore){ string = _("You beat your best score!"); } } else if(gameMgr->wasEventWon()){ string = _("Congratulations! You won the event!"); } else if(gameMgr->wasCupWon()){ string = _("Congratulations! You won the cup!"); } else if(gameMgr->wasRaceWon()){ string = _("You advanced to the next race!"); } else { string = _("You didn't advance."); } pos.y-=30; mp_resultsLbl = new pp::Label(pos,"race_stats",string); mp_resultsLbl->alignment.center(); } }