void game_over_init(void) { winsys_set_display_func( main_loop ); winsys_set_idle_func( main_loop ); winsys_set_reshape_func( reshape ); winsys_set_mouse_func( mouse_cb ); winsys_set_motion_func( ui_event_motion_func ); winsys_set_passive_motion_func( ui_event_motion_func ); remove_all_bonuses(); halt_sound( "flying_sound" ); halt_sound( "rock_sound" ); halt_sound( "ice_sound" ); halt_sound( "snow_sound" ); play_music( "game_over" ); aborted = g_game.race_aborted; if ( !aborted ) { update_player_score( get_player_data( local_player() ) ); } if ( (!g_game.practicing &&!aborted) || (!g_game.practicing && aborted && !game_abort_is_for_tutorial())) { race_won = was_current_race_won(); init_starting_tutorial_step(-100); } g_game.needs_save_or_display_rankings=false; g_game.rankings_displayed=false; }
static void racing_term(void) { halt_sound( "flying_sound" ); halt_sound( "rock_sound" ); halt_sound( "ice_sound" ); halt_sound( "snow_sound" ); break_track_marks(); }
Racing::~Racing() { //todo: stop all sound which are specified by the used theme halt_sound( "flying_sound" ); halt_sound( "rock_sound" ); halt_sound( "ice_sound" ); halt_sound( "snow_sound" ); break_track_marks(); }
void racing_loop( scalar_t time_step ) { int width, height; player_data_t *plyr = get_player_data( local_player() ); bool_t joy_paddling = False; bool_t joy_braking = False; bool_t joy_charging = False; bool_t airborne; vector_t dir; scalar_t speed; scalar_t terrain_weights[NumTerrains]; int new_terrain = 0; int slide_volume; dir = plyr->vel; speed = normalize_vector(&dir); airborne = plyr->airborne; width = getparam_x_resolution(); height = getparam_y_resolution(); check_gl_error(); new_frame_for_fps_calc(); update_audio(); clear_rendering_context(); setup_fog(); /* Update braking */ plyr->control.is_braking = (bool_t) ( braking || joy_braking ); if ( airborne ) { new_terrain = (1<<NumTerrains); /* * Tricks */ if ( trick_modifier) { if (left_turn) { plyr->control.barrel_roll_left = True; } if (right_turn) { plyr->control.barrel_roll_right = True; } if (paddling) { plyr->control.front_flip = True; } if (plyr->control.is_braking) { plyr->control.back_flip = True; } //Par défaut ca fait un front flip if(!plyr->control.front_flip && !plyr->control.back_flip && !plyr->control.barrel_roll_right && !plyr->control.barrel_roll_left ) { plyr->control.back_flip = True; } #ifdef __APPLE__ TRDebugLog("tricks : %d",plyr->tricks); #endif } } else { get_surface_type(plyr->pos.x, plyr->pos.z, terrain_weights); if (terrain_weights[Snow] > 0) { new_terrain |= (1<<Snow); } if (terrain_weights[Rock] > 0) { new_terrain |= (1<<Rock); } if (terrain_weights[Ice] > 0) { new_terrain |= (1<<Ice); } } /* * Jumping */ calc_jump_amt( time_step ); if ( ( charging || joy_charging ) && !plyr->control.jump_charging && !plyr->control.jumping ) { plyr->control.jump_charging = True; charge_start_time = g_game.time; } if ( ( !charging && !joy_charging ) && plyr->control.jump_charging ) { plyr->control.jump_charging = False; plyr->control.begin_jump = True; } /* * Turning */ scalar_t iPhone_turn_fact=accelerometerTurnFact(); iPhone_turn_fact=accelerometerTurnFact(); /*left_turn and right_turn are informations useful for tricks*/ if (iPhone_turn_fact>TURN_FACTOR_LIMIT) { left_turn=false; right_turn=true; } else if (iPhone_turn_fact<-TURN_FACTOR_LIMIT) { left_turn=true; right_turn=false; } else left_turn = right_turn = false; plyr->control.turn_fact = iPhone_turn_fact; plyr->control.turn_animation = iPhone_turn_fact; /* * Paddling */ if ( ( paddling || joy_paddling ) && plyr->control.is_paddling == False ) { plyr->control.is_paddling = True; plyr->control.paddle_time = g_game.time; } /* * Play flying sound (__APPLE__ : and add Flying time to plyr->control.fly_total_time) */ if (new_terrain & (1<<NumTerrains)) { set_sound_volume("flying_sound", min(128, speed*2)); if (!(last_terrain & (1<<NumTerrains))) { play_sound( "flying_sound", -1 ); plyr->control.is_flying=true; plyr->control.fly_start_time = g_game.time; } } else { if (last_terrain & (1<<NumTerrains)) { plyr->control.is_flying=false; plyr->control.fly_end_time = g_game.time; if (plyr->control.fly_end_time-plyr->control.fly_start_time>FLYING_TIME_LIMIT) { plyr->control.fly_total_time += plyr->control.fly_end_time-plyr->control.fly_start_time; } halt_sound( "flying_sound" ); } } /* * Play sliding sound */ slide_volume = min( (((pow(plyr->control.turn_fact, 2)*128)) + (plyr->control.is_braking?128:0) + (plyr->control.jumping?128:0) + 20) * (speed/10), 128 ); if (new_terrain & (1<<Snow)) { set_sound_volume("snow_sound", slide_volume * terrain_weights[Snow]); if (!(last_terrain & (1<<Snow))) { play_sound( "snow_sound", -1 ); } } else { if (last_terrain & (1<<Snow)) { halt_sound( "snow_sound" ); } } if (new_terrain & (1<<Rock)) { //set_sound_volume("rock_sound", 128*pow((speed/2), 2) * terrain_weights[Rock]); int rockvol = slide_volume * 10 * terrain_weights[Rock]; if (rockvol > 400) rockvol = 400; set_sound_volume("rock_sound", rockvol); if (!(last_terrain & (1<<Rock))) { play_sound( "rock_sound", -1 ); } } else { if (last_terrain & (1<<Rock)) { halt_sound( "rock_sound" ); } } if (new_terrain & (1<<Ice)) { set_sound_volume("ice_sound", slide_volume * terrain_weights[Ice]); if (!(last_terrain & (1<<Ice))) { play_sound( "ice_sound", -1 ); } } else { if (last_terrain & (1<<Ice)) { halt_sound( "ice_sound" ); } } last_terrain = new_terrain; /* * gs */ bool roll = plyr->control.barrel_roll_left || plyr->control.barrel_roll_right; bool flip = plyr->control.front_flip || plyr->control.back_flip; if(roll && plyr->control.barrel_roll_factor == 0) { if(flip) { if(plyr->control.barrel_roll_left) add_new_bonus("Hyper heavy Jump", get_score_for_trick(HYPER_HEAVY_JUMP)); else add_new_bonus("Ray star hybrid Jump", get_score_for_trick(RAY_STAR_HYBRID_JUMP)); } else { if(plyr->control.barrel_roll_left) add_new_bonus("Roll Left", get_score_for_trick(ROLL_LEFT)); else add_new_bonus("Roll Right", get_score_for_trick(ROLL_RIGHT)); } } if(flip && plyr->control.flip_factor == 0) { if(roll) { if(plyr->control.back_flip) add_new_bonus("Saturn ice Fever", get_score_for_trick(SATURN_ICE_FEVER)); else add_new_bonus("Wild pinguin Show", get_score_for_trick(WILD_PINGUIN_SHOW)); } else { if(plyr->control.back_flip) add_new_bonus("Back Flip", get_score_for_trick(BACK_FLIP)); else add_new_bonus("Barlow's Wheel", get_score_for_trick(BARLOWS_WHEEL)); } } if (roll) { plyr->tricks+=1; plyr->control.barrel_roll_factor += ( plyr->control.barrel_roll_left ? -1 : 1 ) * 0.05 * time_step / 0.05; if ( (plyr->control.barrel_roll_factor > 1) || (plyr->control.barrel_roll_factor < -1) ) { plyr->control.barrel_roll_factor = 0; plyr->control.barrel_roll_left = plyr->control.barrel_roll_right = False; } } if (flip) { plyr->tricks+=1; plyr->control.flip_factor += ( plyr->control.back_flip ? -1 : 1 ) * 0.05 * time_step / 0.05; if ( (plyr->control.flip_factor > 1) || (plyr->control.flip_factor < -1) ) { plyr->control.flip_factor = 0; plyr->control.front_flip = plyr->control.back_flip = False; } } update_player_pos( plyr, time_step ); /* * Track Marks */ add_track_mark( plyr ); update_view( plyr, time_step ); setup_view_frustum( plyr, NEAR_CLIP_DIST, getparam_forward_clip_distance() ); draw_sky(plyr->view.pos); draw_fog_plane(); set_course_clipping( True ); set_course_eye_point( plyr->view.pos ); setup_course_lighting(); render_course(); draw_trees(); if ( getparam_draw_particles() ) { update_particles( time_step ); draw_particles( plyr ); } draw_tux(); draw_tux_shadow(); draw_hud( plyr ); draw_hud_training(plyr); reshape( width, height ); winsys_swap_buffers(); g_game.time += time_step; }
void Racing::loop(float timeStep) { int width, height; bool joy_left_turn = false; bool joy_right_turn = false; double joy_turn_fact = 0.0; bool joy_paddling = false; bool joy_braking = false; bool joy_tricks = false; bool joy_charging = false; bool airborne; pp::Vec3d dir; float speed; float terrain_weights[NUM_TERRAIN_TYPES]; int new_terrain = 0; int slide_volume; unsigned int i; if (Benchmark::getMode() == Benchmark::AUTO){ m_paddling = true; } dir = players[0].vel; speed = dir.normalize(); //set max_speed if (speed > players[0].max_speed) players[0].max_speed=int(speed); airborne = (bool) ( players[0].pos.y > ( find_y_coord(players[0].pos.x, players[0].pos.z) + JUMP_MAX_START_HEIGHT ) ); width = getparam_x_resolution(); height = getparam_y_resolution(); fpsCounter.update(); update_audio(); clear_rendering_context(); fogPlane.setup(); // Joystick if ( is_joystick_active() ) { float joy_x; float joy_y; update_joystick(); joy_x = get_joystick_x_axis(); joy_y = get_joystick_y_axis(); if ( joy_x > 0.1 ) { joy_right_turn = true; joy_turn_fact = joy_x; } else if ( joy_x < -0.1 ) { joy_left_turn = true; joy_turn_fact = joy_x; } if ( getparam_joystick_brake_button() >= 0 ) { joy_braking = is_joystick_button_down( getparam_joystick_brake_button() ); } if ( !joy_braking ) { joy_braking = (bool) ( joy_y > 0.5 ); } if ( getparam_joystick_paddle_button() >= 0 ) { joy_paddling = is_joystick_button_down( getparam_joystick_paddle_button() ); } if ( !joy_paddling ) { joy_paddling = (bool) ( joy_y < -0.5 ); } if ( getparam_joystick_jump_button() >= 0 ) { joy_charging = is_joystick_button_down( getparam_joystick_jump_button() ); } if ( getparam_joystick_trick_button() >= 0 ) { joy_tricks = is_joystick_button_down( getparam_joystick_trick_button() ); } } // Update braking players[0].control.is_braking = (bool) ( m_braking || joy_braking ); if ( airborne ) { new_terrain = (1<<4); // Tricks if ( m_trickModifier || joy_tricks ) { if ( m_leftTurn || joy_left_turn ) { players[0].control.barrel_roll_left = true; } if ( m_rightTurn || joy_right_turn ) { players[0].control.barrel_roll_right = true; } if ( m_paddling || joy_paddling ) { players[0].control.front_flip = true; } if ( players[0].control.is_braking ) { players[0].control.back_flip = true; } } for(i=0;i<num_terrains;i++){ if ( !terrain_texture[i].sound.empty() && terrain_texture[i].soundactive==true) { halt_sound( terrain_texture[i].sound.c_str() ); terrain_texture[i].soundactive=false; } } } else { get_surface_type(players[0].pos.x, players[0].pos.z, terrain_weights); //Play sliding sound slide_volume = int(MIN( (((pow(players[0].control.turn_fact, 2)*128)) + (players[0].control.is_braking?128:0) + (players[0].control.jumping?128:0) + 20) * (speed/10), 128 )); for(i=0;i<num_terrains;i++){ if ( !terrain_texture[i].sound.empty() ) { if (terrain_weights[i] > 0 ){ set_sound_volume(terrain_texture[i].sound.c_str(), int(slide_volume * terrain_weights[i])); if (terrain_texture[i].soundactive==false){ play_sound(terrain_texture[i].sound.c_str() , -1 ); terrain_texture[i].soundactive=true; } } else if (terrain_texture[i].soundactive==true){ halt_sound( terrain_texture[i].sound.c_str() ); terrain_texture[i].soundactive=false; } } } } // Jumping calcJumpAmt( timeStep ); if ( ( m_charging || joy_charging ) && !players[0].control.jump_charging && !players[0].control.jumping ) { players[0].control.jump_charging = true; m_chargeStartTime = gameMgr->time; } if ( ( !m_charging && !joy_charging ) && players[0].control.jump_charging ) { players[0].control.jump_charging = false; players[0].control.begin_jump = true; } // Turning if ( ( m_leftTurn || joy_left_turn ) ^ (m_rightTurn || joy_right_turn ) ) { bool turning_left = (bool) ( m_leftTurn || joy_left_turn ); if ( joy_left_turn || joy_right_turn ) { players[0].control.turn_fact = joy_turn_fact; } else { players[0].control.turn_fact = (turning_left?-1:1); } players[0].control.turn_animation += (turning_left?-1:1) * 0.15 * timeStep / 0.05; players[0].control.turn_animation = MIN(1.0, MAX(-1.0, players[0].control.turn_animation)); } else { players[0].control.turn_fact = 0; // Decay turn animation if ( timeStep < ROLL_DECAY_TIME_CONSTANT ) { players[0].control.turn_animation *= 1.0 - timeStep/ROLL_DECAY_TIME_CONSTANT; } else { players[0].control.turn_animation = 0.0; } } //Paddling if ( ( m_paddling || joy_paddling ) && players[0].control.is_paddling == false ) { players[0].control.is_paddling = true; players[0].control.paddle_time = gameMgr->time; } //Play flying sound if (new_terrain & (1<<4)) { set_sound_volume("flying_sound", int(MIN(128, speed*2))); if (!(m_lastTerrain & (1<<4))) { play_sound( "flying_sound", -1 ); } } else { if (m_lastTerrain & (1<<4)) { halt_sound( "flying_sound" ); } } m_lastTerrain = new_terrain; //Tricks if ( players[0].control.barrel_roll_left || players[0].control.barrel_roll_right ) { players[0].control.barrel_roll_factor += ( players[0].control.barrel_roll_left ? -1 : 1 ) * 0.15 * timeStep / 0.05; if ( (players[0].control.barrel_roll_factor > 1) || (players[0].control.barrel_roll_factor < -1) ) { players[0].control.barrel_roll_factor = 0; players[0].control.barrel_roll_left = players[0].control.barrel_roll_right = false; } } if ( players[0].control.front_flip || players[0].control.back_flip ) { players[0].control.flip_factor += ( players[0].control.back_flip ? -1 : 1 ) * 0.15 * timeStep / 0.05; if ( (players[0].control.flip_factor > 1) || (players[0].control.flip_factor < -1) ) { players[0].control.flip_factor = 0; players[0].control.front_flip = players[0].control.back_flip = false; } } update_player_pos( players[0], timeStep ); //Track Marks add_track_mark( players[0] ); update_view( players[0], timeStep ); setup_view_frustum( players[0], NEAR_CLIP_DIST, getparam_forward_clip_distance() ); draw_sky(players[0].view.pos); draw_fog_plane(); set_course_clipping( true ); set_course_eye_point( players[0].view.pos ); setup_course_lighting(); render_course(); //Draw snow update_snow( timeStep, false, players[0].view.pos ); draw_snow(players[0].view.pos); draw_trees(); if ( getparam_draw_particles() ) { update_particles( timeStep ); draw_particles( players[0] ); } ModelHndl->draw_tux(); draw_tux_shadow(); HUD1.draw(players[0]); reshape( width, height ); winsys_swap_buffers(); gameMgr->time += timeStep; if (airborne) gameMgr->airbornetime += timeStep; if(Benchmark::getMode() == Benchmark::PAUSED){ set_game_mode(PAUSED); } }
void racing_loop( scalar_t time_step ) { int width, height; player_data_t *plyr = get_player_data( local_player() ); bool_t joy_left_turn = False; bool_t joy_right_turn = False; scalar_t joy_turn_fact = 0.0; bool_t joy_paddling = False; bool_t joy_braking = False; bool_t joy_tricks = False; bool_t joy_charging = False; bool_t airborne; vector_t dir; scalar_t speed; scalar_t terrain_weights[NumTerrains]; int new_terrain = 0; int slide_volume; dir = plyr->vel; speed = normalize_vector(&dir); airborne = (bool_t) ( plyr->pos.y > ( find_y_coord(plyr->pos.x, plyr->pos.z) + JUMP_MAX_START_HEIGHT ) ); width = getparam_x_resolution(); height = getparam_y_resolution(); check_gl_error(); new_frame_for_fps_calc(); update_audio(); clear_rendering_context(); setup_fog(); /* * Joystick */ if ( is_joystick_active() ) { scalar_t joy_x; scalar_t joy_y; update_joystick(); joy_x = get_joystick_x_axis(); joy_y = get_joystick_y_axis(); if ( joy_x > 0.1 ) { joy_right_turn = True; joy_turn_fact = joy_x; } else if ( joy_x < -0.1 ) { joy_left_turn = True; joy_turn_fact = joy_x; } if ( getparam_joystick_brake_button() >= 0 ) { joy_braking = is_joystick_button_down( getparam_joystick_brake_button() ); } if ( !joy_braking ) { joy_braking = (bool_t) ( joy_y > 0.5 ); } if ( getparam_joystick_paddle_button() >= 0 ) { joy_paddling = is_joystick_button_down( getparam_joystick_paddle_button() ); } if ( !joy_paddling ) { joy_paddling = (bool_t) ( joy_y < -0.5 ); } if ( getparam_joystick_jump_button() >= 0 ) { joy_charging = is_joystick_button_down( getparam_joystick_jump_button() ); } if ( getparam_joystick_trick_button() >= 0 ) { joy_tricks = is_joystick_button_down( getparam_joystick_trick_button() ); } } /* Update braking */ plyr->control.is_braking = (bool_t) ( braking || joy_braking ); if ( airborne ) { new_terrain = (1<<NumTerrains); /* * Tricks */ if ( trick_modifier || joy_tricks ) { if ( left_turn || joy_left_turn ) { plyr->control.barrel_roll_left = True; } if ( right_turn || joy_right_turn ) { plyr->control.barrel_roll_right = True; } if ( paddling || joy_paddling ) { plyr->control.front_flip = True; } if ( plyr->control.is_braking ) { plyr->control.back_flip = True; } } } else { get_surface_type(plyr->pos.x, plyr->pos.z, terrain_weights); if (terrain_weights[Snow] > 0) { new_terrain |= (1<<Snow); } if (terrain_weights[Rock] > 0) { new_terrain |= (1<<Rock); } if (terrain_weights[Ice] > 0) { new_terrain |= (1<<Ice); } } /* * Jumping */ calc_jump_amt( time_step ); if ( ( charging || joy_charging ) && !plyr->control.jump_charging && !plyr->control.jumping ) { plyr->control.jump_charging = True; charge_start_time = g_game.time; } if ( ( !charging && !joy_charging ) && plyr->control.jump_charging ) { plyr->control.jump_charging = False; plyr->control.begin_jump = True; } /* * Turning */ if ( ( left_turn || joy_left_turn ) ^ (right_turn || joy_right_turn ) ) { bool_t turning_left = (bool_t) ( left_turn || joy_left_turn ); if ( joy_left_turn || joy_right_turn ) { plyr->control.turn_fact = joy_turn_fact; } else { plyr->control.turn_fact = (turning_left?-1:1); } plyr->control.turn_animation += (turning_left?-1:1) * 0.15 * time_step / 0.05; plyr->control.turn_animation = min(1.0, max(-1.0, plyr->control.turn_animation)); } else { plyr->control.turn_fact = 0; /* Decay turn animation */ if ( time_step < ROLL_DECAY_TIME_CONSTANT ) { plyr->control.turn_animation *= 1.0 - time_step/ROLL_DECAY_TIME_CONSTANT; } else { plyr->control.turn_animation = 0.0; } } /* * Paddling */ if ( ( paddling || joy_paddling ) && plyr->control.is_paddling == False ) { plyr->control.is_paddling = True; plyr->control.paddle_time = g_game.time; } /* * Play flying sound */ if (new_terrain & (1<<NumTerrains)) { set_sound_volume("flying_sound", min(128, speed*2)); if (!(last_terrain & (1<<NumTerrains))) { play_sound( "flying_sound", -1 ); } } else { if (last_terrain & (1<<NumTerrains)) { halt_sound( "flying_sound" ); } } /* * Play sliding sound */ slide_volume = min( (((pow(plyr->control.turn_fact, 2)*128)) + (plyr->control.is_braking?128:0) + (plyr->control.jumping?128:0) + 20) * (speed/10), 128 ); if (new_terrain & (1<<Snow)) { set_sound_volume("snow_sound", slide_volume * terrain_weights[Snow]); if (!(last_terrain & (1<<Snow))) { play_sound( "snow_sound", -1 ); } } else { if (last_terrain & (1<<Snow)) { halt_sound( "snow_sound" ); } } if (new_terrain & (1<<Rock)) { set_sound_volume("rock_sound", 128*pow((speed/2), 2) * terrain_weights[Rock]); if (!(last_terrain & (1<<Rock))) { play_sound( "rock_sound", -1 ); } } else { if (last_terrain & (1<<Rock)) { halt_sound( "rock_sound" ); } } if (new_terrain & (1<<Ice)) { set_sound_volume("ice_sound", slide_volume * terrain_weights[Ice]); if (!(last_terrain & (1<<Ice))) { play_sound( "ice_sound", -1 ); } } else { if (last_terrain & (1<<Ice)) { halt_sound( "ice_sound" ); } } last_terrain = new_terrain; /* * Tricks */ if ( plyr->control.barrel_roll_left || plyr->control.barrel_roll_right ) { plyr->control.barrel_roll_factor += ( plyr->control.barrel_roll_left ? -1 : 1 ) * 0.15 * time_step / 0.05; if ( (plyr->control.barrel_roll_factor > 1) || (plyr->control.barrel_roll_factor < -1) ) { plyr->control.barrel_roll_factor = 0; plyr->control.barrel_roll_left = plyr->control.barrel_roll_right = False; } } if ( plyr->control.front_flip || plyr->control.back_flip ) { plyr->control.flip_factor += ( plyr->control.back_flip ? -1 : 1 ) * 0.15 * time_step / 0.05; if ( (plyr->control.flip_factor > 1) || (plyr->control.flip_factor < -1) ) { plyr->control.flip_factor = 0; plyr->control.front_flip = plyr->control.back_flip = False; } } update_player_pos( plyr, time_step ); /* * Track Marks */ add_track_mark( plyr ); update_view( plyr, time_step ); setup_view_frustum( plyr, NEAR_CLIP_DIST, getparam_forward_clip_distance() ); draw_sky(plyr->view.pos); draw_fog_plane(); set_course_clipping( True ); set_course_eye_point( plyr->view.pos ); setup_course_lighting(); render_course(); draw_trees(); if ( getparam_draw_particles() ) { update_particles( time_step ); draw_particles( plyr ); } draw_tux(); draw_tux_shadow(); draw_hud( plyr ); reshape( width, height ); winsys_swap_buffers(); g_game.time += time_step; }
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(); } }