/*! 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 ( plyr->score > score ) { update_score = True; } else { update_score = False; } if ( update_score ) { 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" ); } } }
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" ); } } }