Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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 );
}
Exemplo n.º 3
0
void quit_click_cb( button_t *button, void *userdata )
{
    check_assertion( userdata == NULL, "userdata is not null" );

    winsys_exit( 0 );
}
Exemplo n.º 4
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);	
}
Exemplo n.º 5
0
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();
  }
}