summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2020-03-29 16:25:18 +0200
committerPaweł Redman <pawel.redman@gmail.com>2020-03-29 20:00:57 +0200
commit0e6b1bc4a15f598d5eab507cbbe0f11410d5df1f (patch)
tree5148120bef92db00716ac45dbbcdd1f030e2fd00
parent7a91f404c1cd014ce3f98068c8dc88d7caaa2a6b (diff)
A simple speedometer
-rw-r--r--src/cgame/cg_draw.c58
-rw-r--r--src/cgame/cg_local.h5
-rw-r--r--src/cgame/cg_main.c2
3 files changed, 65 insertions, 0 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index e5e1894..33a275a 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -3019,6 +3019,63 @@ static void CG_DrawCenterString( void )
//==============================================================================
+/*
+==============
+CG_DrawSpeed
+
+Ideally this should be a part of the HUD but that would require updating
+all the custom ones
+==============
+*/
+static void CG_DrawSpeed( void )
+{
+ vec4_t white = { 1.0f, 1.0f, 1.0f, 0.6f };
+ vec3_t xyvelocity;
+ int x, y;
+ float speed, dot;
+
+ switch( cg_drawSpeed.integer & 3 )
+ {
+ case 0:
+ return;
+
+ case 1:
+ x = 8;
+ y = 360;
+ break;
+
+ case 2:
+ x = 360;
+ y = 240;
+ break;
+
+ case 3:
+ x = 570;
+ y = 200;
+ break;
+ }
+
+ if( cg_drawSpeed.integer & 4 )
+ {
+ speed = VectorLength( cg.predictedPlayerState.velocity );
+ }
+ else
+ {
+ dot = DotProduct( cg.predictedPlayerState.velocity, cg.predictedPlayerState.grapplePoint );
+ VectorMA( cg.predictedPlayerState.velocity, -dot, cg.predictedPlayerState.grapplePoint, xyvelocity );
+ speed = VectorLength( xyvelocity );
+ }
+
+ if( speed > cg.topSpeed || cg.time > cg.topSpeedTime + 3000 )
+ {
+ cg.topSpeed = speed;
+ cg.topSpeedTime = cg.time;
+ }
+
+ CG_Text_Paint( x, y, 0.3f, white, va( "%.0f %.0f", cg.topSpeed, speed),
+ 0, 0, ITEM_TEXTSTYLE_NORMAL );
+}
+
//FIXME: both vote notes are hardcoded, change to ownerdrawn?
/*
@@ -3288,6 +3345,7 @@ static void CG_Draw2D( void )
else if( cg_drawStatus.integer )
Menu_Paint( defaultMenu, qtrue );
+ CG_DrawSpeed( );
CG_DrawVote( );
CG_DrawTeamVote( );
CG_DrawFollow( );
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 83c3162..e68e94b 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -1140,6 +1140,10 @@ typedef struct
playerState_t savedPmoveStates[ NUM_SAVED_STATES ];
int stateHead, stateTail;
int ping;
+
+ // speedometer
+ float topSpeed;
+ int topSpeedTime;
} cg_t;
@@ -1429,6 +1433,7 @@ extern vmCvar_t cg_drawTeamOverlay;
extern vmCvar_t cg_teamOverlayUserinfo;
extern vmCvar_t cg_crosshairX;
extern vmCvar_t cg_crosshairY;
+extern vmCvar_t cg_drawSpeed;
extern vmCvar_t cg_drawStatus;
extern vmCvar_t cg_draw2D;
extern vmCvar_t cg_animSpeed;
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index c2e55b8..89a4c5c 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -138,6 +138,7 @@ vmCvar_t cg_drawCrosshairNames;
vmCvar_t cg_drawRewards;
vmCvar_t cg_crosshairX;
vmCvar_t cg_crosshairY;
+vmCvar_t cg_drawSpeed;
vmCvar_t cg_draw2D;
vmCvar_t cg_drawStatus;
vmCvar_t cg_animSpeed;
@@ -283,6 +284,7 @@ static cvarTable_t cvarTable[ ] =
{ &cg_drawRewards, "cg_drawRewards", "1", CVAR_ARCHIVE },
{ &cg_crosshairX, "cg_crosshairX", "0", CVAR_ARCHIVE },
{ &cg_crosshairY, "cg_crosshairY", "0", CVAR_ARCHIVE },
+ { &cg_drawSpeed, "cg_drawSpeed", "0", CVAR_ARCHIVE },
{ &cg_brassTime, "cg_brassTime", "2500", CVAR_ARCHIVE },
{ &cg_simpleItems, "cg_simpleItems", "0", CVAR_ARCHIVE },
{ &cg_addMarks, "cg_marks", "1", CVAR_ARCHIVE },