void saveAndDisplayRankings() { //save score online if a best resul was established if (g_game.practicing && !g_game.race_aborted && g_game.race.name!=NULL && did_player_beat_best_results()) { int minutes; int seconds; int hundredths; player_data_t *plyr = get_player_data( local_player() ); get_time_components( g_game.time, &minutes, &seconds, &hundredths); //if the player choosed in his prefs not to save score online after ending a race but just to display rankings, the function below //will detect this case and redirect to the function displayRankingsAfterRace } //else display world rankings for this score else if (g_game.practicing && !g_game.race_aborted && g_game.race.name!=NULL && !did_player_beat_best_results()) { int minutes; int seconds; int hundredths; player_data_t *plyr = get_player_data( local_player() ); get_time_components( g_game.time, &minutes, &seconds, &hundredths); } }
char* editSynchronizeScoresRequest() { list_t race_list = NULL; list_elem_t cur_elem = NULL; player_data_t *plyr = NULL; open_course_data_t *data; plyr = get_player_data( local_player() ); g_game.current_event = "__Practice_Event__"; g_game.current_cup = "__Practice_Cup__"; g_game.difficulty = 1; race_list = get_open_courses_list(); cur_elem = get_list_head( race_list ); scalar_t time; int herring; int score; int minutes; int seconds; int hundredths; int i=0; char request[10000]; char* tempRequest; strcpy(request,""); do { data = (open_course_data_t*) get_list_elem_data( cur_elem ); if ( get_saved_race_results( plyr->name, g_game.current_event, g_game.current_cup, data->name, g_game.difficulty, &time, &herring, &score ) ) { if (i>0) strcat(request,"&"); get_time_components( time, &minutes, &seconds, &hundredths); asprintf(&tempRequest,"piste[%d]=%s&score[%d]=%d&herring[%d]=%d&time[%d]=%02d:%02d:%02d",i,data->name,i,score,i,herring,i,minutes,seconds,hundredths); strcat(request,tempRequest); free(tempRequest); i++; } } while (cur_elem = get_next_list_elem(race_list, cur_elem)); return request; }
/*! Callback called when facebook button is clicked \author Emmanuel de Roux \date Created: 2009-09-12 \date Modified: 2000-09-12 */ static void fb_click_cb( button_t *button, void *userdata ) { scalar_t time; open_course_data_t *data; data = (open_course_data_t*)get_list_elem_data( cur_elem ); char* race_name = data->name; char* mode = g_game.is_speed_only_mode?(char*)Localize("Time Trial","src/race_select.c"):(char*)Localize("classic","src/race_select.c"); char *event,*cup; event = g_game.current_event; cup = g_game.current_cup; player_data_t *plyr = get_player_data( local_player() ); int herring, score; int minutes, seconds, hundredths; if (g_game.practicing) { if ( get_saved_race_results( plyr->name, event, cup, race_name, g_game.difficulty, &time, &herring, &score ) ) { get_time_components( time, &minutes, &seconds, &hundredths ); } if (!g_game.rankings_loaded) { facebookPublishDialogDisplayed = false; displayRankingsAfterRace(g_game.race.name,plyr->score,plyr->herring,minutes,seconds,hundredths); } } char* scoreTxt; if (g_game.is_speed_only_mode) asprintf(&scoreTxt, "%02d:%02d:%02d", minutes, seconds, hundredths); else asprintf(&scoreTxt, "%d pts", plyr->score ); if (g_game.rankings_loaded==true) { publishNewHighScore(scoreTxt,race_name,mode,g_game.worldRanking,g_game.countryRanking,g_game.totalRanking); facebookPublishDialogDisplayed=True; } free(scoreTxt); }
/*! Draws a status message on the screen \author jfpatry \date Created: 2000-09-24 \date Modified: 2000-09-24 */ void draw_status_msg( int x_org, int y_org, int box_width, int box_height ) { char *msg; scalar_t time; int herring; int score; font_t *label_font; font_t *font; char buff[BUFF_LEN]; bool_t draw_stats = True; if ( !g_game.practicing ) { if ( is_current_race_completed() ) { race_data_t *race_data; if ( cup_complete ) { msg = "Best result:"; } else { msg = "Race won! Your result:"; } race_data = (race_data_t*)get_list_elem_data( cur_elem ); if ( !get_saved_race_results( plyr->name, g_game.current_event, g_game.current_cup, race_data->name, g_game.difficulty, &time, &herring, &score ) ) { difficulty_level_t d = g_game.difficulty; print_warning( IMPORTANT_WARNING, "No saved results for race `%s'. Using " "race minimum requirements.", race_data->name ); time = g_game.race.time_req[d]; herring = g_game.race.herring_req[d]; score = g_game.race.score_req[d]; } } else if ( plyr->lives <= 0 ) { msg = "You don't have any lives left."; draw_stats = False; } else { difficulty_level_t d = g_game.difficulty; time = g_game.race.time_req[d]; herring = g_game.race.herring_req[d]; score = g_game.race.score_req[d]; if ( is_current_race_first_incomplete() ) { msg = "Needed to advance:"; } else { msg = "You can't enter this race yet."; draw_stats = False; } } } else { open_course_data_t *data; data = (open_course_data_t*)get_list_elem_data( cur_elem ); msg = "Best result:"; if ( !get_saved_race_results( plyr->name, g_game.current_event, g_game.current_cup, data->name, g_game.difficulty, &time, &herring, &score ) ) { /* Don't display anything if no score saved */ return; } } #ifdef __APPLE__ #define yTranslation -10 #else #define yTranslation 0 #endif if ( !get_font_binding( "race_requirements", &font ) || !get_font_binding( "race_requirements_label", &label_font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get fonts for race requirements" ); } else { glPushMatrix(); { glTranslatef( x_org + 160 * mHeight / 320, y_org + 60 * mHeight / 320+yTranslation * mHeight / 320, 0 ); bind_font_texture( label_font ); draw_string( label_font, msg ); } glPopMatrix(); if ( draw_stats ) { glPushMatrix(); { int minutes; int seconds; int hundredths; get_time_components( time, &minutes, &seconds, &hundredths ); glTranslatef( x_org + 160 * mHeight / 320, y_org + 44 * mHeight / 320+yTranslation * mHeight / 320, 0 ); bind_font_texture( label_font ); draw_string( label_font, "Time: " ); sprintf( buff, "%02d:%02d.%02d", minutes, seconds, hundredths ); bind_font_texture( font ); draw_string( font, buff ); bind_font_texture( label_font ); draw_string( label_font, " Fish: " ); sprintf( buff, "%03d", herring ); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); glPushMatrix(); { glTranslatef( x_org + 160 * mHeight / 320, y_org + 28 * mHeight / 320+yTranslation * mHeight / 320, 0 ); bind_font_texture( label_font ); draw_string( label_font, "Score: " ); sprintf( buff, "%06d", score ); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); } } }
/*! Draws a status message on the screen \author jfpatry \date Created: 2000-09-24 \date Modified: 2000-09-24 */ void draw_status_msg( int x_org, int y_org, int box_width, int box_height ) { const char *msg; scalar_t time; int herring; int score; font_t *label_font; font_t *font; char buff[BUFF_LEN]; bool_t draw_stats = True; if ( g_game.practicing ) { open_course_data_t *data; data = (open_course_data_t*)get_list_elem_data( cur_elem ); msg = Localize("Best result:",""); if ( !get_saved_race_results( plyr->name, g_game.current_event, g_game.current_cup, data->name, g_game.difficulty, &time, &herring, &score ) ) { /* Don't display anything if no score saved */ return; } #ifdef __APPLE__ #define yTranslation -10 #else #define yTranslation 0 #endif if ( !get_font_binding( "race_requirements", &font ) || !get_font_binding( "race_requirements_label", &label_font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get fonts for race requirements" ); } else { glPushMatrix(); { glTranslatef( x_org + 0, y_org + 200+yTranslation, 0 ); bind_font_texture( label_font ); draw_string( label_font, msg ); } glPopMatrix(); if ( draw_stats ) { glPushMatrix(); { int minutes; int seconds; int hundredths; get_time_components( time, &minutes, &seconds, &hundredths ); glTranslatef( x_org + 0, y_org + 184+yTranslation, 0 ); bind_font_texture( label_font ); draw_string( label_font, Localize("Time: ","") ); sprintf( buff, "%02d:%02d.%02d", minutes, seconds, hundredths ); bind_font_texture( font ); draw_string( font, buff ); #ifdef __APPLE__ if (!g_game.is_speed_only_mode || !g_game.practicing) { #endif bind_font_texture( label_font ); draw_string( label_font, Localize(" Fish: ","") ); sprintf( buff, "%03d", herring ); bind_font_texture( font ); draw_string( font, buff ); bind_font_texture( label_font ); draw_string( label_font, Localize(" Score: ","") ); sprintf( buff, "%06d", score ); bind_font_texture( font ); draw_string( font, buff ); #ifdef __APPLE__ } #endif } glPopMatrix(); } } } }
/*! Updates the race results based on the results of the race just completed Should be called before last_race_completed is updated. \author jfpatry \date Created: 2000-09-24 \date Modified: 2000-09-24 */ static void update_race_results( void ) { char *event; char *cup; bool_t update_score = False; char *race_name; scalar_t time; int herring; int score; if ( g_game.practicing ) { open_course_data_t *data; data = (open_course_data_t*)get_list_elem_data( cur_elem ); race_name = data->name; } else { race_data_t *data; data = (race_data_t*)get_list_elem_data( cur_elem ); race_name = data->name; } event = g_game.current_event; cup = g_game.current_cup; if ( !get_saved_race_results( plyr->name, event, cup, race_name, g_game.difficulty, &time, &herring, &score ) ) { update_score = True; } else if ( !g_game.practicing && !cup_complete ) { /* Scores are always overwritten if cup isn't complete */ update_score = True; } else if ( (g_game.is_speed_only_mode && plyr->score < score) || (!g_game.is_speed_only_mode && plyr->score > score) ) { update_score = True; } else { update_score = False; } if ( update_score ) { //affiche le message facebook char score[BUFF_LEN]; int minutes, seconds, hundredths; get_time_components( g_game.time, &minutes, &seconds, &hundredths ); if (g_game.is_speed_only_mode) sprintf((char*)score, "%02d:%02d:%02d", minutes, seconds, hundredths ); else sprintf((char*)score, "%d pts", plyr->score ); char* mode = g_game.is_speed_only_mode?(char*)Localize("Time Trial","src/race_select.c"):(char*)Localize("classic","src/race_select.c"); //message facebook publié //Si cette fonction est executée, elle bloque l'execution de la suivnte grace a une variable statique; voir dans TRFacebookController publishFirstScore(score,race_name,mode); bool_t result; result = set_saved_race_results( plyr->name, event, cup, race_name, g_game.difficulty, g_game.time, plyr->herring, plyr->score ); if ( !result ) { print_warning( IMPORTANT_WARNING, "Couldn't save race results" ); } } }
/*! Draws the text for the game over screen \author jfpatry \date Created: 2000-09-24 \date Modified: 2000-09-24 */ void draw_game_over_text( void ) { int w = getparam_x_resolution(); int h = getparam_y_resolution(); int x_org, y_org; int box_width, box_height; const char *string; int string_w, asc, desc; char buff[BUFF_LEN]; font_t *font; font_t *stat_label_font; player_data_t *plyr = get_player_data( local_player() ); box_width = 200; box_height = 250; x_org = w/2.0 - box_width/2.0; y_org = h/2.0 - box_height/2.0; if ( !get_font_binding( "race_over", &font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get font for binding race_over" ); } else { if ( !g_game.race_aborted && g_game.practicing && g_game.needs_save_or_display_rankings) { string = Localize("World rankings", ""); } else string = Localize("Race Over", ""); get_font_metrics( font, string, &string_w, &asc, &desc ); glPushMatrix(); { glTranslatef( x_org + box_width/2.0 - string_w/2.0, y_org + box_height - asc, 0 ); bind_font_texture( font ); draw_string( font, string ); } glPopMatrix(); } /* If race was aborted, don't print stats, and if doesnt need to print rankings, dont print them */ if ( !g_game.race_aborted && !g_game.needs_save_or_display_rankings && g_game.practicing) { if ( !get_font_binding( "race_stats_label", &stat_label_font ) || !get_font_binding( "race_stats", &font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get fonts for race stats" ); } else { int asc2; int desc2; get_font_metrics( font, "", &string_w, &asc, &desc ); get_font_metrics( stat_label_font, "", &string_w, &asc2, &desc2 ); if ( asc < asc2 ) { asc = asc2; } if ( desc < desc2 ) { desc = desc2; } glPushMatrix(); { int minutes; int seconds; int hundredths; glTranslatef( x_org, y_org + 150, 0 ); bind_font_texture( stat_label_font ); if (!strcmp(get_calculation_mode(),"jump") ) { draw_string( stat_label_font, Localize("Flying time: ","src/game_over.c")); g_game.time = plyr->control.fly_total_time; } //default mode else { draw_string( stat_label_font, Localize("Time: ","src/game_over.c")); } get_time_components( g_game.time, &minutes, &seconds, &hundredths ); sprintf( buff, "%02d:%02d:%02d", minutes, seconds, hundredths ); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); glPushMatrix(); { glTranslatef( x_org, y_org + 150 - (asc + desc), 0 ); bind_font_texture( stat_label_font ); #ifdef __APPLE__ if (!g_game.is_speed_only_mode) #endif draw_string( stat_label_font, Localize("Fish: ","") ); sprintf( buff, "%3d", plyr->herring ); bind_font_texture( font ); #ifdef __APPLE__ if (!g_game.is_speed_only_mode) #endif draw_string( font, buff ); } glPopMatrix(); glPushMatrix(); { glTranslatef( x_org, y_org + 150 - 2*(asc + desc), 0 ); bind_font_texture( stat_label_font ); #ifdef __APPLE__ if (!g_game.is_speed_only_mode) #endif draw_string( stat_label_font, "Score: " ); sprintf( buff, "%6d", plyr->score ); bind_font_texture( font ); #ifdef __APPLE__ if (!g_game.is_speed_only_mode) #endif draw_string( font, buff ); } glPopMatrix(); } } #ifdef __APPLE__ //display rankings if needed else if ( !g_game.race_aborted && g_game.practicing && g_game.needs_save_or_display_rankings) { if ( !get_font_binding( "race_stats_label", &stat_label_font ) || !get_font_binding( "race_stats", &font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get fonts for race stats" ); } else { int asc2; int desc2; get_font_metrics( font, "", &string_w, &asc, &desc ); get_font_metrics( stat_label_font, "", &string_w, &asc2, &desc2 ); if ( asc < asc2 ) { asc = asc2; } if ( desc < desc2 ) { desc = desc2; } glPushMatrix(); { glTranslatef( x_org - 50, y_org + 150, 0 ); bind_font_texture( stat_label_font ); draw_string( stat_label_font, Localize("Friends: ","") ); if (strcmp(friendsRanking, "Empty friends list.")==0) { free(friendsRanking); friendsRanking = strdup(Localize("No friends","")); } if (friendsPercent>=0) sprintf( buff, "%s (%.1f%%)", friendsRanking , friendsPercent); else sprintf( buff, "%s", friendsRanking); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); glPushMatrix(); { glTranslatef( x_org -50 , y_org + 150 - (asc + desc), 0 ); bind_font_texture( stat_label_font ); draw_string( stat_label_font, Localize("Country: ","") ); sprintf( buff, "%s (%.1f%%)", countryRanking , countryPercent ); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); glPushMatrix(); { glTranslatef( x_org - 50, y_org + 150 - 2*(asc + desc), 0 ); bind_font_texture( stat_label_font ); draw_string( stat_label_font, Localize("World: ","") ); sprintf( buff, "%s (%.1f%%)", worldRanking , worldPercent); bind_font_texture( font ); draw_string( font, buff ); } glPopMatrix(); } } #endif if ( g_game.race_aborted && !g_game.race_time_over) { string = Localize("Race aborted.",""); } else if ( g_game.race_aborted && g_game.race_time_over) { string = Localize("Time is up.",""); } else if ( ( g_game.practicing || is_current_cup_complete() ) && did_player_beat_best_results() ) { if ( !g_game.race_aborted && g_game.practicing && g_game.needs_save_or_display_rankings) { string = ""; } else string = Localize("You beat your best score!",""); } else { string = ""; } if ( !get_font_binding( "race_result_msg", &font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get font for binding race_result_msg" ); } else { get_font_metrics( font, string, &string_w, &asc, &desc ); glPushMatrix(); { glTranslatef( x_org + box_width/2. - string_w/2., y_org + desc +20., 0 ); bind_font_texture( font ); draw_string( font, string ); } glPopMatrix(); } #ifdef __APPLE__ //Draws "touch screen to contin"ue string = Localize("Touch screen to continue",""); if ( !get_font_binding( "fps", &font ) ) { print_warning( IMPORTANT_WARNING, "Couldn't get font for binding race_result_msg" ); } else { get_font_metrics( font, string, &string_w, &asc, &desc ); glPushMatrix(); { glTranslatef( x_org + box_width/2. - string_w/2., y_org + desc-20., 0 ); bind_font_texture( font ); draw_string( font, string ); } glPopMatrix(); } #endif }