static void CG_DrawStaminaBar(rectDef_t *rect) { vec4_t colour = { 0.1f, 1.0f, 0.1f, 0.5f }; vec4_t colourlow = { 1.0f, 0.1f, 0.1f, 0.5f }; vec_t *color = colour; int flags = 1 | 4 | 16 | 64; float frac = cg.pmext.sprintTime / (float)SPRINTTIME; if (cg.snap->ps.powerups[PW_ADRENALINE]) { if (cg.snap->ps.pm_flags & PMF_FOLLOW) { Vector4Average(colour, colorWhite, sin(cg.time * .005f), colour); } else { float msec = cg.snap->ps.powerups[PW_ADRENALINE] - cg.time; if (msec < 0) { msec = 0; } else { Vector4Average(colour, colorWhite, .5f + sin(.2f * sqrt(msec) * 2 * M_PI) * .5f, colour); } } } else { if (frac < 0.25) { color = colourlow; } } CG_FilledBar(rect->x, rect->y + (rect->h * 0.1f), rect->w, rect->h * 0.84f, color, NULL, bgcolour, frac, flags); trap_R_SetColor(NULL); CG_DrawPic(rect->x, rect->y, rect->w, rect->h, cgs.media.hudSprintBar); CG_DrawPic(rect->x, rect->y + rect->h + 4, rect->w, rect->w, cgs.media.hudSprintIcon); }
void CG_FilledBar( float x, float y, float w, float h, float *startColor, float *endColor, const float *bgColor, float frac, int flags ) { vec4_t backgroundcolor = {1, 1, 1, 0.25f}, colorAtPos; // colorAtPos is the lerped color if necessary int indent = BAR_BORDERSIZE; if ( frac > 1 ) { frac = 1.f; } if ( frac < 0 ) { frac = 0; } if ( ( flags & BAR_BG ) && bgColor ) { // BAR_BG set, and color specified, use specified bg color Vector4Copy( bgColor, backgroundcolor ); } if ( flags & BAR_LERP_COLOR ) { Vector4Average( startColor, endColor, frac, colorAtPos ); } // background if ( ( flags & BAR_BG ) ) { // draw background at full size and shrink the remaining box to fit inside with a border. (alternate border may be specified by a BAR_BGSPACING_xx) CG_FillRect( x, y, w, h, backgroundcolor ); if ( flags & BAR_BGSPACING_X0Y0 ) { // fill the whole box (no border) } else if ( flags & BAR_BGSPACING_X0Y5 ) { // spacing created for weapon heat indent *= 3; y += indent; h -= ( 2 * indent ); } else { // default spacing of 2 units on each side x += indent; y += indent; w -= ( 2 * indent ); h -= ( 2 * indent ); } } // adjust for horiz/vertical and draw the fractional box if ( flags & BAR_VERT ) { if ( flags & BAR_LEFT ) { // TODO: remember to swap colors on the ends here y += ( h * ( 1 - frac ) ); } else if ( flags & BAR_CENTER ) { y += ( h * ( 1 - frac ) / 2 ); } if ( flags & BAR_LERP_COLOR ) { CG_FillRect( x, y, w, h * frac, colorAtPos ); } else { // CG_FillRectGradient ( x, y, w, h * frac, startColor, endColor, 0 ); CG_FillRect( x, y, w, h * frac, startColor ); } } else { if ( flags & BAR_LEFT ) { // TODO: remember to swap colors on the ends here x += ( w * ( 1 - frac ) ); } else if ( flags & BAR_CENTER ) { x += ( w * ( 1 - frac ) / 2 ); } if ( flags & BAR_LERP_COLOR ) { CG_FillRect( x, y, w * frac, h, colorAtPos ); } else { // CG_FillRectGradient ( x, y, w * frac, h, startColor, endColor, 0 ); CG_FillRect( x, y, w * frac, h, startColor ); } } }