/* ================ CG_DrawStatusBar ================ */ static void CG_DrawStatusBar( void ) { int color; centity_t *cent; playerState_t *ps; int value; vec4_t hcolor; vec3_t angles; vec3_t origin; static float colors[4][4] = { // { 0.2, 1.0, 0.2, 1.0 } , { 1.0, 0.2, 0.2, 1.0 }, {0.5, 0.5, 0.5, 1} }; { 1.0f, 0.69f, 0.0f, 1.0f }, // normal { 1.0f, 0.2f, 0.2f, 1.0f }, // low health { 0.5f, 0.5f, 0.5f, 1.0f }, // weapon firing { 1.0f, 1.0f, 1.0f, 1.0f } }; // health > 100 if ( cg_drawStatus.integer == 0 ) { return; } // draw the team background CG_DrawTeamBackground( 0, 420, 640, 60, 0.33f, cg.snap->ps.persistant[PERS_TEAM] ); cent = &cg_entities[cg.snap->ps.clientNum]; ps = &cg.snap->ps; VectorClear( angles ); // draw any 3D icons first, so the changes back to 2D are minimized if ( cent->currentState.weapon && cg_weapons[ cent->currentState.weapon ].ammoModel ) { origin[0] = 70; origin[1] = 0; origin[2] = 0; angles[YAW] = 90 + 20 * sin( (cg.time / 1000.0) + cg.timeFraction / 1000.0 ); CG_Draw3DModel( (CHAR_WIDTH*3 + TEXT_ICON_SPACE)*cgs.widthRatioCoef, 432, ICON_SIZE*cgs.widthRatioCoef, ICON_SIZE, cg_weapons[ cent->currentState.weapon ].ammoModel, 0, origin, angles ); } CG_DrawStatusBarHead( 185 + (CHAR_WIDTH*3 + TEXT_ICON_SPACE)*cgs.widthRatioCoef ); if( cg.predictedPlayerState.powerups[PW_REDFLAG] ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_RED ); } else if( cg.predictedPlayerState.powerups[PW_BLUEFLAG] ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_BLUE ); } else if( cg.predictedPlayerState.powerups[PW_NEUTRALFLAG] ) { CG_DrawStatusBarFlag( 185 + CHAR_WIDTH*3 + TEXT_ICON_SPACE + ICON_SIZE, TEAM_FREE ); } if ( ps->stats[ STAT_ARMOR ] ) { origin[0] = 90; origin[1] = 0; origin[2] = -10; angles[YAW] = ( (cg.time & 2047) + cg.timeFraction ) * 360 / 2048.0; CG_Draw3DModel( 370 + (CHAR_WIDTH*3 + TEXT_ICON_SPACE)*cgs.widthRatioCoef, 432, ICON_SIZE*cgs.widthRatioCoef, ICON_SIZE, cgs.media.armorModel, 0, origin, angles ); } // // ammo // if ( cent->currentState.weapon ) { value = ps->ammo[cent->currentState.weapon]; if ( value > -1 ) { if ( cg.predictedPlayerState.weaponstate == WEAPON_FIRING && cg.predictedPlayerState.weaponTime > 100 ) { // draw as dark grey when reloading color = 2; // dark grey } else { if ( value >= 0 ) { color = 0; // green } else { color = 1; // red } } trap_R_SetColor( colors[color] ); CG_DrawField (0, 432, 3, value); trap_R_SetColor( NULL ); // if we didn't draw a 3D icon, draw a 2D icon for ammo if ( !cg_draw3dIcons.integer && cg_drawIcons.integer ) { qhandle_t icon; icon = cg_weapons[ cg.predictedPlayerState.weapon ].ammoIcon; if ( icon ) { CG_DrawPic( (CHAR_WIDTH*3 + TEXT_ICON_SPACE)*cgs.widthRatioCoef, 432, ICON_SIZE*cgs.widthRatioCoef, ICON_SIZE, icon ); } } } } // // health // value = ps->stats[STAT_HEALTH]; if ( value > 100 ) { trap_R_SetColor( colors[3] ); // white } else if (value > 25) { trap_R_SetColor( colors[0] ); // green } else if (value > 0) { color = (cg.time >> 8) & 1; // flash trap_R_SetColor( colors[color] ); } else {
/* ================ CG_DrawStatusBar_MFQ3 ================ */ void CG_DrawStatusBar_MFQ3( void ) { int color; centity_t *cent; playerState_t *ps; int value; int vehicle = cgs.clientinfo[cg.predictedPlayerState.clientNum].vehicle; int w; static vec4_t colors[] = { // { 0.2, 1.0, 0.2, 1.0 } , { 1.0, 0.2, 0.2, 1.0 }, {0.5, 0.5, 0.5, 1} }; { 1.0f, 0.89f, 0.0f, 1.0f } , // normal, yellow { 1.0f, 0.0f, 0.0f, 1.0f }, // low health, red {0.5f, 0.5f, 0.5f, 1.0f}, // weapon firing, grey { 1.0f, 1.0f, 1.0f, 1.0f }, // health > 100, white { 0.3f, 1.0f, 0.3f, 1.0f } // green }; if ( cg_drawStatus.integer == 0 ) { return; } cent = &cg_entities[cg.snap->ps.clientNum]; ps = &cg.snap->ps; // aiming/targetting reticles CG_Draw_Reticles(); // main background CG_DrawPic( 0, 430, 640, 50, cgs.media.HUDmain ); // // flag // if( cg.predictedPlayerState.objectives & OB_REDFLAG ) { CG_DrawStatusBarFlag( 640 - ICON_SIZE, ClientBase::TEAM_RED ); } else if( cg.predictedPlayerState.objectives & OB_BLUEFLAG ) { CG_DrawStatusBarFlag( 640 - ICON_SIZE, ClientBase::TEAM_BLUE ); } // // RADAR // if( cent->currentState.ONOFF & OO_RADAR_AIR ) { CG_DrawRadarSymbols_AIR(vehicle); } else if( cent->currentState.ONOFF & OO_RADAR_GROUND ) { CG_DrawRadarSymbols_GROUND(vehicle); } else if( availableVehicles[vehicle].radarRange || availableVehicles[vehicle].radarRange2 ) { CG_DrawPic( 440, 280, 200, 200, cgs.media.HUDradar ); CG_DrawSmallString( 595, 320, "OFF", 1.0f); } // // GPS // if( cg.GPS ) { trace_t tr; vec3_t start, end; // main CG_DrawPic( -14, 380, 512, 102, cgs.media.HUDgps ); // heading value = 360 - (int)ps->vehicleAngles[1]; CG_DrawSmallString( 234, 420, va("%i",value), 1.0f ); // altitude VectorCopy( ps->origin, start ); start[2] += availableVehicles[vehicle].mins[2]; VectorCopy( start, end ); end[2] -= 2000; CG_Trace( &tr, start, vec3_origin, vec3_origin, end, cg.snap->ps.clientNum, MASK_SOLID|MASK_WATER ); value = (int)(tr.fraction * 2000); if( value > 100 ) color = 3; else if( value > 50 ) color = 4; else if( value > 25 ) color = 0; else color = 1; if( value < 2000 ) { CG_DrawSmallStringColor( 374, 420, va("%i",value), colors[color] ); } else { CG_DrawSmallStringColor( 374, 420, "XXXX", colors[color] ); } // x coord value = (int)ps->origin[0]; CG_DrawSmallString( 264, 423, va("%i",value), 0.7f ); // y coord value = (int)ps->origin[1]; CG_DrawSmallString( 320, 423, va("%i",value), 0.7f ); } // // INFO // if( !cg.INFO ) { // bit dirty to have NOT but oh well... // main CG_DrawPic( 0, 330, 150, 150, cgs.media.HUDext ); if( availableVehicles[vehicle].caps & HC_GEAR ) { if( cent->currentState.ONOFF & OO_GEAR ) { CG_DrawSmallStringColor( 2, 390, "Gear", colors[4] ); } else { CG_DrawSmallString( 2, 390, "Gear", 1.0f ); } } if( availableVehicles[vehicle].caps & HC_SPEEDBRAKE ) { if( cent->currentState.ONOFF & OO_SPEEDBRAKE ) { CG_DrawSmallStringColor( 2, 410, "Speedbrakes", colors[4] ); } else { CG_DrawSmallString( 2, 410, "Speedbrakes", 1.0f ); } } else { if( cent->currentState.ONOFF & OO_SPEEDBRAKE ) { CG_DrawSmallStringColor( 2, 410, "Brakes", colors[4] ); } else { CG_DrawSmallString( 2, 410, "Brakes", 1.0f ); } } value = ps->stats[STAT_FUEL]; if ( value > 10 ) { color = 3; // white } else if (value > 5) { color = 0; // yellow } else { color = 1; // red } if( (availableVehicles[vehicle].cat & CAT_PLANE) || (availableVehicles[vehicle].cat & CAT_HELO) || (availableVehicles[vehicle].cat & CAT_BOAT) ) { value *= 100; } CG_DrawSmallStringColor( 2, 430, va("Fuel %i", value), colors[color]); } // // FLARES // if( ps->ammo[WP_FLARE+8] > 0 ) { CG_DrawBigString( 600, 462, va("%i", ps->ammo[WP_FLARE]), 1.0f ); } // // speed and throttle // value = ps->speed/10; if ( value > availableVehicles[vehicle].stallspeed * SPEED_GREEN_ARC ) { color = 3; // white } else if (value > availableVehicles[vehicle].stallspeed * SPEED_YELLOW_ARC ) { color = 4; // green } else if (value >= availableVehicles[vehicle].stallspeed) { color = 0; // yellow } else { color = 1; // red } w = CG_DrawStrlen(va("%i",value)) * BIGCHAR_WIDTH; CG_DrawBigStringColor(285-w, 460, va("%i",value), colors[color]); if( ps->throttle > availableVehicles[vehicle].maxthrottle ) { value = ps->throttle - availableVehicles[vehicle].maxthrottle; } else { value = ps->throttle; } CG_DrawPic(295, 443, 50, 37, cgs.media.throttle[value]); // // health // value = (100*ps->stats[STAT_HEALTH]/ps->stats[STAT_MAX_HEALTH]); if( value > 100 ) value = 100; if ( value < 10 ) { color = 1; } else if (value < 25) { color = 0; } else { color = 3; } w = CG_DrawStrlen(va("%i",value)) * BIGCHAR_WIDTH; CG_DrawBigStringColor( 398-w, 460, va("%i",value), colors[color]); // // ammo // if( cent->currentState.weaponNum >= 0 ) { value = ps->ammo[cent->currentState.weaponNum]; w = CG_DrawStrlen(va("%i",value)) * BIGCHAR_WIDTH; CG_DrawBigString (500-w, 460, va("%i",value),1.0f); CG_DrawPic( 416, 440, 24, 45, availableWeapons[availableVehicles[vehicle].weapons[cent->currentState.weaponNum]].iconHandle ); } // // ammo mg // if( ps->ammo[WP_MACHINEGUN+8] > 0 ) { if( cent->currentState.weaponNum >= 0 ) { value = ps->ammo[0]; w = CG_DrawStrlen(va("%i",value)) * BIGCHAR_WIDTH; CG_DrawBigString (180-w, 460, va("%i",value),1.0f); CG_DrawPic( 200, 440, 24, 45, availableWeapons[availableVehicles[vehicle].weapons[0]].iconHandle ); } } }