diff options
Diffstat (limited to 'src/cl_scrn.c')
-rw-r--r-- | src/cl_scrn.c | 133 |
1 files changed, 67 insertions, 66 deletions
diff --git a/src/cl_scrn.c b/src/cl_scrn.c index 9e1f655..d18ad16 100644 --- a/src/cl_scrn.c +++ b/src/cl_scrn.c @@ -101,15 +101,9 @@ static const char *const sb_nums[2][STAT_PICS] = { "anum_6", "anum_7", "anum_8", "anum_9", "anum_minus" } }; -const color_t colorTable[8] = { - { 0, 0, 0, 255 }, - { 255, 0, 0, 255 }, - { 0, 255, 0, 255 }, - { 255, 255, 0, 255 }, - { 0, 0, 255, 255 }, - { 0, 255, 255, 255 }, - { 255, 0, 255, 255 }, - { 255, 255, 255, 255 } +const uint32_t colorTable[8] = { + U32_BLACK, U32_RED, U32_GREEN, U32_YELLOW, + U32_BLUE, U32_CYAN, U32_MAGENTA, U32_WHITE }; /* @@ -203,50 +197,57 @@ float SCR_FadeAlpha( unsigned startTime, unsigned visTime, unsigned fadeTime ) { return alpha; } -qboolean SCR_ParseColor( const char *s, color_t color ) { +qboolean SCR_ParseColor( const char *s, color_t *color ) { int i; int c[8]; + // parse generic color if( *s == '#' ) { s++; for( i = 0; s[i]; i++ ) { + if( i == 8 ) { + return qfalse; + } c[i] = Q_charhex( s[i] ); if( c[i] == -1 ) { return qfalse; } } + switch( i ) { case 3: - color[0] = c[0] | ( c[0] << 4 ); - color[1] = c[1] | ( c[1] << 4 ); - color[2] = c[2] | ( c[2] << 4 ); - color[3] = 255; + color->u8[0] = c[0] | ( c[0] << 4 ); + color->u8[1] = c[1] | ( c[1] << 4 ); + color->u8[2] = c[2] | ( c[2] << 4 ); + color->u8[3] = 255; break; case 6: - color[0] = c[1] | ( c[0] << 4 ); - color[1] = c[3] | ( c[2] << 4 ); - color[2] = c[5] | ( c[4] << 4 ); - color[3] = 255; + color->u8[0] = c[1] | ( c[0] << 4 ); + color->u8[1] = c[3] | ( c[2] << 4 ); + color->u8[2] = c[5] | ( c[4] << 4 ); + color->u8[3] = 255; break; case 8: - color[0] = c[1] | ( c[0] << 4 ); - color[1] = c[3] | ( c[2] << 4 ); - color[2] = c[5] | ( c[4] << 4 ); - color[3] = c[7] | ( c[6] << 4 ); + color->u8[0] = c[1] | ( c[0] << 4 ); + color->u8[1] = c[3] | ( c[2] << 4 ); + color->u8[2] = c[5] | ( c[4] << 4 ); + color->u8[3] = c[7] | ( c[6] << 4 ); break; default: return qfalse; } - return qtrue; - } else { - i = Com_ParseColor( s, COLOR_WHITE ); - if( i == COLOR_NONE ) { - return qfalse; - } - FastColorCopy( colorTable[i], color ); return qtrue; } + + // parse name or index + i = Com_ParseColor( s, COLOR_WHITE ); + if( i == COLOR_NONE ) { + return qfalse; + } + + color->u32 = colorTable[i]; + return qtrue; } /* @@ -334,7 +335,7 @@ static void SCR_DrawDebugGraph (void) x = w-1; y = r_config.height; - R_DrawFill (x, y-scr_graphheight->value, + R_DrawFill8 (x, y-scr_graphheight->value, w, scr_graphheight->value, 8); for (a=0 ; a<w ; a++) @@ -347,7 +348,7 @@ static void SCR_DrawDebugGraph (void) if (v < 0) v += scr_graphheight->value * (1+(int)(-v/scr_graphheight->value)); h = (int)v % (int)scr_graphheight->value; - R_DrawFill (x, y - h, 1, h, color); + R_DrawFill8 (x, y - h, 1, h, color); x--; } } @@ -362,8 +363,8 @@ static void draw_percent_bar( int percent ) { w = scr.hud_width * percent / 100; - R_DrawFill( 0, scr.hud_height, w, CHAR_HEIGHT, 4 ); - R_DrawFill( w, scr.hud_height, scr.hud_width - w, CHAR_HEIGHT, 0 ); + R_DrawFill8( 0, scr.hud_height, w, CHAR_HEIGHT, 4 ); + R_DrawFill8( w, scr.hud_height, scr.hud_width - w, CHAR_HEIGHT, 0 ); len = Q_scnprintf( buffer, sizeof( buffer ), "%d%%", percent ); x = ( scr.hud_width - len * CHAR_WIDTH ) / 2; @@ -458,14 +459,14 @@ static void draw_center_string( void ) { return; } - R_SetColor( DRAW_COLOR_ALPHA, ( byte * )&alpha ); + R_SetAlpha( alpha ); y = scr.hud_height / 4 - scr_center_lines * 8 / 2; SCR_DrawStringMulti( scr.hud_width / 2, y, UI_CENTER, MAX_STRING_CHARS, scr_centerstring, scr.font_pic ); - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); } /* @@ -543,7 +544,7 @@ static void draw_ping_graph( int x, int y ) { v = LAG_HEIGHT; } - R_DrawFill( x + LAG_WIDTH - i - 1, y + LAG_HEIGHT - v, 1, v, c ); + R_DrawFill8( x + LAG_WIDTH - i - 1, y + LAG_HEIGHT - v, 1, v, c ); } } @@ -561,7 +562,7 @@ static void draw_lagometer( void ) { // draw ping graph if( scr_lag_draw->integer ) { if( scr_lag_draw->integer > 1 ) { - R_DrawFill( x, y, LAG_WIDTH, LAG_HEIGHT, 4 ); + R_DrawFill8( x, y, LAG_WIDTH, LAG_HEIGHT, 4 ); } draw_ping_graph( x, y ); } @@ -624,9 +625,8 @@ static void SCR_Draw_f( void ) { const char *s, *c; drawobj_t *obj; cmd_macro_t *macro; - // int stat; - color_t color = { 0, 0, 0, 0 }; - int flags = UI_IGNORECOLOR; + color_t color; + int flags; int argc = Cmd_Argc(); if( argc == 1 ) { @@ -648,6 +648,9 @@ static void SCR_Draw_f( void ) { return; } + color.u32 = U32_BLACK; + flags = UI_IGNORECOLOR; + s = Cmd_Argv( 1 ); x = atoi( Cmd_Argv( 2 ) ); if( x < 0 ) { @@ -660,7 +663,7 @@ static void SCR_Draw_f( void ) { if( !strcmp( c, "alt" ) ) { flags |= UI_ALTCOLOR; } else { - if( !SCR_ParseColor( c, color ) ) { + if( !SCR_ParseColor( c, &color ) ) { Com_Printf( "Unknown color '%s'\n", c ); return; } @@ -672,7 +675,7 @@ static void SCR_Draw_f( void ) { obj->x = x; obj->y = y; obj->flags = flags; - FastColorCopy( color, obj->color ); + obj->color.u32 = color.u32; macro = Cmd_FindMacro( s ); if( macro ) { @@ -772,7 +775,7 @@ static void draw_objects( void ) { y += scr.hud_height - CHAR_HEIGHT + 1; } if( !( obj->flags & UI_IGNORECOLOR ) ) { - R_SetColor( DRAW_COLOR_RGBA, obj->color ); + R_SetColor( obj->color.u32 ); } if( obj->macro ) { obj->macro->function( buffer, sizeof( buffer ) ); @@ -780,7 +783,7 @@ static void draw_objects( void ) { } else { SCR_DrawString( x, y, obj->flags, obj->cvar->string ); } - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); } } @@ -834,10 +837,10 @@ static void draw_stats( void ) { for( i = 0; i < j; i++ ) { Q_snprintf( buffer, sizeof( buffer ), "%2d: %d", i, cl.frame.ps.stats[i] ); if( cl.oldframe.ps.stats[i] != cl.frame.ps.stats[i] ) { - R_SetColor( DRAW_COLOR_RGBA, colorRed ); + R_SetColor( U32_RED ); } R_DrawString( x, y, 0, MAX_STRING_CHARS, buffer, scr.font_pic ); - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); y += CHAR_HEIGHT; } } @@ -1008,11 +1011,11 @@ static void scr_crosshair_changed( cvar_t *self ) { if( ch_health->integer ) { SCR_SetCrosshairColor(); } else { - scr.crosshair_color[0] = (byte)(ch_red->value * 255); - scr.crosshair_color[1] = (byte)(ch_green->value * 255); - scr.crosshair_color[2] = (byte)(ch_blue->value * 255); + scr.crosshair_color.u8[0] = (byte)(ch_red->value * 255); + scr.crosshair_color.u8[1] = (byte)(ch_green->value * 255); + scr.crosshair_color.u8[2] = (byte)(ch_blue->value * 255); } - scr.crosshair_color[3] = (byte)(ch_alpha->value * 255); + scr.crosshair_color.u8[3] = (byte)(ch_alpha->value * 255); } else { scr.crosshair_pic = 0; } @@ -1027,29 +1030,29 @@ void SCR_SetCrosshairColor( void ) { health = cl.frame.ps.stats[STAT_HEALTH]; if( health <= 0 ) { - VectorSet( scr.crosshair_color, 0, 0, 0 ); + VectorSet( scr.crosshair_color.u8, 0, 0, 0 ); return; } // red - scr.crosshair_color[0] = 255; + scr.crosshair_color.u8[0] = 255; // green if( health >= 66 ) { - scr.crosshair_color[1] = 255; + scr.crosshair_color.u8[1] = 255; } else if( health < 33 ) { - scr.crosshair_color[1] = 0; + scr.crosshair_color.u8[1] = 0; } else { - scr.crosshair_color[1] = ( 255 * ( health - 33 ) ) / 33; + scr.crosshair_color.u8[1] = ( 255 * ( health - 33 ) ) / 33; } // blue if( health >= 99 ) { - scr.crosshair_color[2] = 255; + scr.crosshair_color.u8[2] = 255; } else if( health < 66 ) { - scr.crosshair_color[2] = 0; + scr.crosshair_color.u8[2] = 0; } else { - scr.crosshair_color[2] = ( 255 * ( health - 66 ) ) / 33; + scr.crosshair_color.u8[2] = ( 255 * ( health - 66 ) ) / 33; } } @@ -1682,10 +1685,10 @@ static void draw_crosshair( void ) { x += ch_x->integer; y += ch_y->integer; - R_SetColor( DRAW_COLOR_RGBA, scr.crosshair_color ); + R_SetColor( scr.crosshair_color.u32 ); R_DrawStretchPic( x, y, scr.crosshair_width, scr.crosshair_height, scr.crosshair_pic ); - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); } static void draw_2d( void ) { @@ -1711,14 +1714,13 @@ static void draw_2d( void ) { } #endif - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); if( scr_crosshair->integer ) { draw_crosshair(); } - Cvar_ClampValue( scr_alpha, 0, 1 ); - R_SetColor( DRAW_COLOR_ALPHA, ( byte * )&scr_alpha->value ); + R_SetAlpha( Cvar_ClampValue( scr_alpha, 0, 1 ) ); if( scr_draw2d->integer > 1 ) { draw_layout_string( cl.configstrings[CS_STATUSBAR] ); @@ -1740,7 +1742,7 @@ static void draw_2d( void ) { draw_lagometer(); - R_SetColor( DRAW_COLOR_CLEAR, NULL ); + R_ClearColor(); if( cl.frameflags && scr_showturtle->integer > 0 ) { draw_turtle(); @@ -1769,8 +1771,7 @@ static void draw_2d( void ) { static void draw_active_frame( void ) { if( cls.state < ca_active ) { // draw black background if not active - R_DrawFill( 0, 0, r_config.width, - r_config.height, 0 ); + R_DrawFill8( 0, 0, r_config.width, r_config.height, 0 ); return; } |