summaryrefslogtreecommitdiff
path: root/src/cgame
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgame')
-rw-r--r--src/cgame/cg_draw.c41
-rw-r--r--src/cgame/cg_local.h3
2 files changed, 34 insertions, 10 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index 5fcd832a..f7c1f188 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -2140,6 +2140,14 @@ CROSSHAIR
*/
+const vec4_t crosshairColours[ ] =
+{
+ { 1.0f, 0.0f, 0.0f, 0.35f }, // alien normal
+ { 0.5f, 0.0f, 0.0f, 0.35f }, // alien team
+ { 0.0f, 0.8f, 1.0f, 0.35f }, // human normal
+ { 0.0f, 0.4f, 0.5f, 0.35f } // human team
+};
+
/*
=================
CG_DrawCrosshair
@@ -2175,17 +2183,23 @@ static void CG_DrawCrosshair( void )
w = h = wi->crossHairSize * cg_crosshairSize.value;
w *= cgDC.aspectScale;
- x = cg_crosshairX.integer;
- y = cg_crosshairY.integer;
- CG_AdjustFrom640( &x, &y, &w, &h );
+ x = 320 + cg_crosshairX.integer - ( w / 2 );
+ y = 240 + cg_crosshairY.integer - ( h / 2 );
hShader = wi->crossHair;
if( hShader != 0 )
{
- trap_R_DrawStretchPic( x + cg.refdef.x + 0.5 * ( cg.refdef.width - w ),
- y + cg.refdef.y + 0.5 * ( cg.refdef.height - h ),
- w, h, 0, 0, 1, 1, hShader );
+ int colour = 0;
+ if( cg.snap->ps.stats[ STAT_TEAM ] == TEAM_HUMANS )
+ colour += 2;
+
+ if( cg.time == cg.crosshairClientTime || cg.crosshairBuildable >= 0 )
+ colour += 1;
+
+ trap_R_SetColor( crosshairColours[ colour ] );
+ CG_DrawPic( x, y, w, h, hShader );
+ trap_R_SetColor( NULL );
}
}
@@ -2209,14 +2223,23 @@ static void CG_ScanForCrosshairEntity( void )
CG_Trace( &trace, start, vec3_origin, vec3_origin, end,
cg.snap->ps.clientNum, CONTENTS_SOLID|CONTENTS_BODY );
- if( trace.entityNum >= MAX_CLIENTS )
- return;
-
// if the player is in fog, don't show it
content = trap_CM_PointContents( trace.endpos, 0 );
if( content & CONTENTS_FOG )
return;
+ if( trace.entityNum >= MAX_CLIENTS )
+ {
+ entityState_t *s = &cg_entities[ trace.entityNum ].currentState;
+ if( s->eType == ET_BUILDABLE && BG_Buildable( s->modelindex )->team ==
+ cg.snap->ps.stats[ STAT_TEAM ] )
+ cg.crosshairBuildable = trace.entityNum;
+ else
+ cg.crosshairBuildable = -1;
+
+ return;
+ }
+
team = cgs.clientinfo[ trace.entityNum ].team;
if( cg.snap->ps.persistant[ PERS_SPECSTATE ] == SPECTATOR_NOT )
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 97606f10..9e1e9e7b 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -1030,7 +1030,8 @@ typedef struct
// kill timers for carnage reward
int lastKillTime;
- // crosshair client ID
+ // targeted entity
+ int crosshairBuildable;
int crosshairClientNum;
int crosshairClientTime;