/* ============== CG_DrawPlayerWeaponIcon ============== */ void CG_DrawPlayerWeaponIcon( rectDef_t *rect, qboolean drawHighlighted, int align, vec4_t *refcolor ) { int size; int realweap; // DHM - Nerve qhandle_t icon; float scale,halfScale; vec4_t hcolor; VectorCopy(*refcolor, hcolor); hcolor[3] = 1.f; if( cg.predictedPlayerEntity.currentState.eFlags & EF_MG42_ACTIVE || cg.predictedPlayerEntity.currentState.eFlags & EF_MOUNTEDTANK ) realweap = WP_MOBILE_MG42; else realweap = cg.predictedPlayerState.weapon; size = weapIconDrawSize(realweap); if(!size) return; if( cg.predictedPlayerEntity.currentState.eFlags & EF_MOUNTEDTANK && cg_entities[cg_entities[ cg_entities[ cg.snap->ps.clientNum ].tagParent ].tankparent].currentState.density & 8 ) { icon = cgs.media.browningIcon; } else { if( drawHighlighted ) { //icon = cg_weapons[ realweap ].weaponIcon[1]; icon = cg_weapons[ realweap ].weaponIcon[1]; // we don't have icon[0]; } else { icon = cg_weapons[ realweap ].weaponIcon[1]; } } // pulsing grenade icon to help the player 'count' in their head if(cg.predictedPlayerState.grenadeTimeLeft) { // grenades and dynamite set this scale = (float)((cg.predictedPlayerState.grenadeTimeLeft)%1000) / 100.0f; halfScale = scale * 0.5f; } else { scale = halfScale = 0; } if ( icon ) { float x, y, w, h; if(size == 1) { // draw half width to match the icon asset // start at left x = rect->x - halfScale; y = rect->y - halfScale; w = rect->w/2 + scale; h = rect->h + scale; switch(align) { case ITEM_ALIGN_CENTER: x += rect->w/4; break; case ITEM_ALIGN_RIGHT: x += rect->w/2; break; case ITEM_ALIGN_LEFT: default: break; } } else { x = rect->x - halfScale; y = rect->y - halfScale; w = rect->w + scale; h = rect->h + scale; } trap_R_SetColor( hcolor ); // JPW NERVE CG_DrawPic( x, y, w, h, icon ); } }
/* ============== CG_DrawPlayerWeaponIcon ============== */ void CG_DrawPlayerWeaponIcon(rectDef_t *rect, int align, vec4_t *refcolor) { int size; int realweap; // DHM - Nerve qhandle_t icon; float scale, halfScale; vec4_t hcolor; VectorCopy(*refcolor, hcolor); hcolor[3] = 1.f; if (cg.predictedPlayerEntity.currentState.eFlags & EF_MG42_ACTIVE || cg.predictedPlayerEntity.currentState.eFlags & EF_MOUNTEDTANK) { realweap = WP_MOBILE_MG42; } else { realweap = cg.predictedPlayerState.weapon; } size = weapIconDrawSize(realweap); if (!size) { return; } if (cg.predictedPlayerEntity.currentState.eFlags & EF_MOUNTEDTANK && cg_entities[cg_entities[cg_entities[cg.snap->ps.clientNum].tagParent].tankparent].currentState.density & 8) { icon = cgs.media.browningIcon; } else { icon = cg_weapons[realweap].weaponIcon[1]; } // pulsing grenade icon to help the player 'count' in their head if (cg.predictedPlayerState.grenadeTimeLeft) { // grenades and dynamite set this // these time differently if (realweap == WP_DYNAMITE) { if (((cg.grenLastTime) % 1000) > ((cg.predictedPlayerState.grenadeTimeLeft) % 1000)) { trap_S_StartLocalSound(cgs.media.grenadePulseSound4, CHAN_LOCAL_SOUND); } } else { if (((cg.grenLastTime) % 1000) < ((cg.predictedPlayerState.grenadeTimeLeft) % 1000)) { switch (cg.predictedPlayerState.grenadeTimeLeft / 1000) { case 3: trap_S_StartLocalSound(cgs.media.grenadePulseSound4, CHAN_LOCAL_SOUND); break; case 2: trap_S_StartLocalSound(cgs.media.grenadePulseSound3, CHAN_LOCAL_SOUND); break; case 1: trap_S_StartLocalSound(cgs.media.grenadePulseSound2, CHAN_LOCAL_SOUND); break; case 0: trap_S_StartLocalSound(cgs.media.grenadePulseSound1, CHAN_LOCAL_SOUND); break; } } } scale = (float)((cg.predictedPlayerState.grenadeTimeLeft) % 1000) / 100.0f; halfScale = scale * 0.5f; cg.grenLastTime = cg.predictedPlayerState.grenadeTimeLeft; } else { scale = halfScale = 0; } if (icon) { float x, y, w, h; if (size == 1) { // draw half width to match the icon asset // start at left x = rect->x - halfScale; y = rect->y - halfScale; w = rect->w / 2 + scale; h = rect->h + scale; switch (align) { case ITEM_ALIGN_CENTER: x += rect->w / 4; break; case ITEM_ALIGN_RIGHT: x += rect->w / 2; break; case ITEM_ALIGN_LEFT: default: break; } } else { x = rect->x - halfScale; y = rect->y - halfScale; w = rect->w + scale; h = rect->h + scale; } trap_R_SetColor(hcolor); // JPW NERVE CG_DrawPic(x, y, w, h, icon); } }