Exemplo n.º 1
0
/*
==============
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 );
	}
}
Exemplo n.º 2
0
/*
==============
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);
	}
}