Exemplo n.º 1
0
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);
    }
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
/*! 
 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);
}
Exemplo n.º 4
0
/*! 
 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();
        }
    }
}
Exemplo n.º 5
0
/*! 
 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();
            }
        }
    }
}
Exemplo n.º 6
0
/*! 
 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" );
        }
    }
}
Exemplo n.º 7
0
/*!
 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

}