X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=highscores.h;h=d99710e480cdf59f142ba126707f86995cdd740c;hb=5ecf9cca8b5b9bf876d7e7c7fde03d5b187bb42b;hp=b1c9cc0a5d591794388213552ab1938a75003a0b;hpb=89032d64e2867adb66e4598a0c66d3e853a22bb0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/highscores.h b/highscores.h index b1c9cc0..d99710e 100644 --- a/highscores.h +++ b/highscores.h @@ -1,3 +1,7 @@ +/* + * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + */ + #ifndef HIGHSCORES_H #define HIGHSCORES_H @@ -128,7 +132,7 @@ static int highscore_cmp_playerinfo_playerid( void *a, void *b ) static void *highscore_malloc( u32 count, u32 size ) { size_t requested_mem = size * count; - void *data = malloc( requested_mem ); + void *data = vg_alloc( requested_mem ); requested_mem /= 1024; requested_mem /= 1024; @@ -146,8 +150,8 @@ static void *highscore_malloc( u32 count, u32 size ) static void highscores_free(void) { - free( highscore_system.data ); - free( highscore_system.playerinfo_data ); + vg_free( highscore_system.data ); + vg_free( highscore_system.playerinfo_data ); } static int highscores_init( u32 pool_size, u32 playerinfo_pool_size ) @@ -161,7 +165,7 @@ static int highscores_init( u32 pool_size, u32 playerinfo_pool_size ) highscore_malloc( playerinfo_pool_size, sizeof(highscore_playerinfo)); if( !sys->playerinfo_data ) { - free( sys->data ); + vg_free( sys->data ); return 0; } @@ -243,7 +247,7 @@ static int highscores_init( u32 pool_size, u32 playerinfo_pool_size ) } else { - vg_log( "No existing database found (.aadb)\n" ); + vg_low( "No existing database found (.aadb)\n" ); vg_info( "Initializing database nodes\n" ); memset( &sys->dbheader, 0, sizeof(highscore_database) ); @@ -293,12 +297,28 @@ static int highscores_serialize_all(void) return 1; } +static highscore_record *highscore_find_user_record( u64 playerid, u32 trackid ) +{ + struct highscore_system *sys = &highscore_system; + + highscore_track_table *table = &sys->dbheader.tracks[trackid]; + highscore_record temp; + temp.playerid = playerid; + + aatree_ptr find = + aatree_find( &sys->aainfo_playerid, table->root_playerid, &temp ); + + if( find == AATREE_PTR_NIL ) + return NULL; + + return aatree_get_data( &sys->aainfo_playerid, find ); +} + static aatree_ptr highscores_push_record( highscore_record *record ) { struct highscore_system *sys = &highscore_system; - /* TODO: Verify steam ID */ - vg_log( "Inserting record into database for track %hu\n",record->trackid ); + vg_low( "Inserting record into database for track %hu\n",record->trackid ); if( record->trackid >= vg_list_size(sys->dbheader.tracks) ) { @@ -322,11 +342,11 @@ static aatree_ptr highscores_push_record( highscore_record *record ) if( crecord->time < record->time || (crecord->time == record->time && crecord->points > record->points)) { - vg_log( "Not overwriting better score\n" ); + vg_low( "Not overwriting better score\n" ); return existing; } - vg_log( "Freeing existing record for player %lu\n", record->playerid ); + vg_low( "Freeing existing record for player %lu\n", record->playerid ); table->root_playerid = aatree_del( &sys->aainfo_playerid, existing ); table->root_datetime = aatree_del( &sys->aainfo_datetime, existing ); table->root_points = aatree_del( &sys->aainfo_points, existing ); @@ -372,7 +392,7 @@ static aatree_ptr highscore_set_user_nickname( u64 steamid, char nick[10] ) name[i] = nick[i]; name[10] = '\0'; - vg_log( "Updating %lu's nickname -> %s\n", steamid, name ); + vg_low( "Updating %lu's nickname -> %s\n", steamid, name ); struct highscore_system *sys = &highscore_system; @@ -578,11 +598,11 @@ static void highscores_board_generate( char *buf, u32 id, u32 count ) highscore_strl( line+3, inf->nickname, 10 ); } - u16 miliseconds = record->time, - seconds = miliseconds / 100, - minutes = seconds / 60; + u16 centiseconds = record->time, + seconds = centiseconds / 100, + minutes = seconds / 60; - miliseconds %= 100; + centiseconds %= 100; seconds %= 60; minutes %= 60; @@ -593,10 +613,10 @@ static void highscores_board_generate( char *buf, u32 id, u32 count ) line[15] = ':'; highscore_intr( line+16, seconds, 2, '0' ); line[18] = '.'; - highscore_intr( line+19, miliseconds, 2, '0' ); + highscore_intr( line+19, centiseconds, 2, '0' ); /* Score */ - highscore_intl( line+22, record->time, 5 ); + highscore_intl( line+22, record->points, 5 ); it = aatree_next( &sys->aainfo_time, it ); } }