+/*
+ * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved
+ */
+
#ifndef HIGHSCORES_H
#define HIGHSCORES_H
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;
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 )
highscore_malloc( playerinfo_pool_size, sizeof(highscore_playerinfo));
if( !sys->playerinfo_data )
{
- free( sys->data );
+ vg_free( sys->data );
return 0;
}
}
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) );
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) )
{
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 );
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;
highscore_strc ( buf+w*0, inf->name, w,w );
highscore_clear( buf+w*1, '-', w );
- highscore_strl ( buf+w*2, " #| Player | Time | Pts", 27 );
+ highscore_strl ( buf+w*2, " #| Player | Time ", 27 );
for( int i=0; i<count; i++ )
{
/* Player name */
if( info_ptr == AATREE_PTR_NIL )
- highscore_strl( line+3, "unknown", 10 );
+ highscore_strl( line+3, "unknown", 16 );
else
{
highscore_playerinfo *inf = aatree_get_data(
&sys->aainfo_playerinfo_playerid, info_ptr );
- highscore_strl( line+3, inf->nickname, 10 );
+ highscore_strl( line+3, inf->nickname, 16 );
}
- 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;
if( minutes > 9 ) minutes = 9;
/* Timer */
- highscore_intr( line+14, minutes, 1, '0' );
- line[15] = ':';
- highscore_intr( line+16, seconds, 2, '0' );
- line[18] = '.';
- highscore_intr( line+19, miliseconds, 2, '0' );
+ highscore_intr( line+20, minutes, 1, '0' );
+ line[21] = ':';
+ highscore_intr( line+22, seconds, 2, '0' );
+ line[24] = '.';
+ highscore_intr( line+25, centiseconds, 2, '0' );
+#if 0
/* Score */
- highscore_intl( line+22, record->time, 5 );
+ highscore_intl( line+22, record->points, 5 );
+#endif
it = aatree_next( &sys->aainfo_time, it );
}
}