From f170543cb31fd0e252d6ceabe96807f372ae1ff2 Mon Sep 17 00:00:00 2001 From: fruitiex Date: Sat, 10 Oct 2009 18:12:12 +0000 Subject: [PATCH] clientside personal records system for race/cts git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8087 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/client/Defs.qc | 1 + data/qcsrc/client/Main.qc | 3 +++ data/qcsrc/client/sbar.qc | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/data/qcsrc/client/Defs.qc b/data/qcsrc/client/Defs.qc index e5c0bb600..e19094c73 100644 --- a/data/qcsrc/client/Defs.qc +++ b/data/qcsrc/client/Defs.qc @@ -221,6 +221,7 @@ float announcer_5min; // database for misc stuff float tempdb; +float ClientProgsDB; vector hook_shotorigin; #ifdef BLURTEST diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index 9c7f6894b..97c5c8d8f 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -65,6 +65,7 @@ void CSQC_Init(void) binddb = db_create(); tempdb = db_create(); + ClientProgsDB = db_load("client.db"); compressShortVector_init(); drawfont = 0; @@ -167,6 +168,8 @@ void CSQC_Shutdown(void) remove(players); db_close(binddb); db_close(tempdb); + db_save(ClientProgsDB, "client.db"); + db_close(ClientProgsDB); cvar_clientsettemp_restore(); diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index 67407b35a..8b046ba0a 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -33,6 +33,7 @@ void CSQC_kh_hud(); void CSQC_ctf_hudreset(); void CSQC_ctf_hud(); void CSQC_nb_hud(); +void CSQC_race_hud(); void MapVote_Draw(); void Sbar_FinaleOverlay() { @@ -2712,6 +2713,8 @@ void Sbar_Draw (void) CSQC_ctf_hud(); else if(gametype == GAME_NEXBALL) CSQC_nb_hud(); + else if(gametype == GAME_CTS || gametype == GAME_RACE) + CSQC_race_hud(); } return; } @@ -3014,3 +3017,32 @@ void CSQC_nb_hud(void) if (stat_items & IT_KEY1) drawpic(pos, "gfx/hud/sb_nexball_carrying", '80 34 0', '1 1 1', 1, DRAWFLAG_NORMAL); } + +void CSQC_race_hud(void) +{ + entity me; + me = (spectatee_status > 0) ? playerslots[spectatee_status - 1] : playerslots[player_localentnum - 1]; + float crecordtime, score; + score = me.(scores[ps_primary]); + + string rr; + if(gametype == GAME_CTS) + rr = CTS_RECORD; + else + rr = RACE_RECORD; + crecordtime = stof(db_get(ClientProgsDB, strcat(shortmapname, rr, "time"))); + + if(score && score < crecordtime || !crecordtime) + db_put(ClientProgsDB, strcat(shortmapname, rr, "time"), ftos(score)); + + vector pos; + pos_x = 4; + pos_y = vid_conheight - 46; + + float pmin, psec, pmsec; + pmin = floor(crecordtime/(60 * TIME_FACTOR)); + psec = floor((crecordtime - pmin*(60 * TIME_FACTOR))/TIME_FACTOR); + pmsec = crecordtime - pmin*60*TIME_FACTOR - psec*TIME_FACTOR; + + drawstring(pos, strcat("Personal best: ", ftos(pmin),":", ftos(psec),":",ftos(pmsec)), '12 12 0', '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); +} -- 2.39.2