void CG_OwnerDraw(float x, float y, float w, float h, float text_x, float text_y, int ownerDraw, int ownerDrawFlags, int align, float special, float scale, vector4 *color, qhandle_t shader, int textStyle) { rectDef_t rect; if ( cg_drawStatus->integer == 0 ) { return; } //if (ownerDrawFlags != 0 && !CG_OwnerDrawVisible(ownerDrawFlags)) { // return; //} rect.x = x; rect.y = y; rect.w = w; rect.h = h; switch (ownerDraw) { case CG_PLAYER_ARMOR_ICON: CG_DrawPlayerArmorIcon(&rect, ownerDrawFlags & CG_SHOW_2DONLY); break; case CG_PLAYER_ARMOR_ICON2D: CG_DrawPlayerArmorIcon(&rect, qtrue); break; case CG_PLAYER_ARMOR_VALUE: CG_DrawPlayerArmorValue(&rect, scale, color, shader, textStyle); break; case CG_PLAYER_AMMO_ICON: CG_DrawPlayerAmmoIcon(&rect, ownerDrawFlags & CG_SHOW_2DONLY); break; case CG_PLAYER_AMMO_ICON2D: CG_DrawPlayerAmmoIcon(&rect, qtrue); break; case CG_PLAYER_AMMO_VALUE: CG_DrawPlayerAmmoValue(&rect, scale, color, shader, textStyle); break; case CG_PLAYER_HEAD: CG_DrawPlayerHead(&rect, ownerDrawFlags & CG_SHOW_2DONLY); break; case CG_PLAYER_ITEM: CG_DrawPlayerItem(&rect, scale, ownerDrawFlags & CG_SHOW_2DONLY); break; case CG_PLAYER_SCORE: CG_DrawPlayerScore(&rect, scale, color, shader, textStyle); break; case CG_PLAYER_HEALTH: CG_DrawPlayerHealth(&rect, scale, color, shader, textStyle); break; case CG_RED_SCORE: CG_DrawRedScore(&rect, scale, color, shader, textStyle); break; case CG_BLUE_SCORE: CG_DrawBlueScore(&rect, scale, color, shader, textStyle); break; case CG_RED_NAME: CG_DrawRedName(&rect, scale, color, textStyle); break; case CG_BLUE_NAME: CG_DrawBlueName(&rect, scale, color, textStyle); break; case CG_BLUE_FLAGHEAD: CG_DrawBlueFlagHead(&rect); break; case CG_BLUE_FLAGSTATUS: CG_DrawBlueFlagStatus(&rect, shader); break; case CG_BLUE_FLAGNAME: CG_DrawBlueFlagName(&rect, scale, color, textStyle); break; case CG_RED_FLAGHEAD: CG_DrawRedFlagHead(&rect); break; case CG_RED_FLAGSTATUS: CG_DrawRedFlagStatus(&rect, shader); break; case CG_RED_FLAGNAME: CG_DrawRedFlagName(&rect, scale, color, textStyle); break; case CG_ONEFLAG_STATUS: CG_OneFlagStatus(&rect); break; case CG_PLAYER_LOCATION: CG_DrawPlayerLocation(&rect, scale, color, textStyle); break; case CG_TEAM_COLOR: CG_DrawTeamColor(&rect, color); break; case CG_FLAGS_POWERUP: CG_DrawFlagsPowerUp(&rect); break; case CG_AREA_POWERUP: CG_DrawAreaPowerUp(&rect, align, special, scale, color); break; case CG_PLAYER_HASFLAG: CG_DrawPlayerHasFlag(&rect, qfalse); break; case CG_PLAYER_HASFLAG2D: CG_DrawPlayerHasFlag(&rect, qtrue); break; case CG_GAME_TYPE: CG_DrawGameType(&rect, scale, color, shader, textStyle); break; case CG_GAME_STATUS: CG_DrawGameStatus(&rect, scale, color, shader, textStyle); break; case CG_KILLER: CG_DrawKiller(&rect, scale, color, shader, textStyle); break; case CG_ACCURACY: case CG_ASSISTS: case CG_DEFEND: case CG_EXCELLENT: case CG_IMPRESSIVE: case CG_PERFECT: case CG_CAPTURES: CG_DrawMedal(ownerDraw, &rect, scale, color, shader); break; case CG_SPECTATORS: CG_DrawTeamSpectators(&rect, scale, color, shader); break; case CG_TEAMINFO: if (cg_currentSelectedPlayer->integer == numSortedTeamPlayers) { CG_DrawNewTeamInfo(&rect, text_x, text_y, scale, color, shader); } break; case CG_CAPFRAGLIMIT: CG_DrawCapFragLimit(&rect, scale, color, shader, textStyle); break; case CG_1STPLACE: CG_Draw1stPlace(&rect, scale, color, shader, textStyle); break; case CG_2NDPLACE: CG_Draw2ndPlace(&rect, scale, color, shader, textStyle); break; //QtZ: Added case CG_FPS_INFO: CG_DrawFPSInfo( &rect, scale, color, shader, textStyle ); break; case CG_PING_INFO: CG_DrawPingInfo( &rect, scale, color, shader, textStyle ); break; case CG_OBITUARY: //QTZTODO: Obituary HUD break; case CG_ITEMPICKUP: //QTZTODO: Item pickup HUD break; case CG_TIMER: CG_DrawTimer( &rect, scale, color, shader, textStyle ); break; default: break; } }
static void CG_DrawPlayerStatusHead(hudComponent_t comp) { hudHeadAnimNumber_t anim = cg.idleAnim; bg_character_t *character = CG_CharacterForPlayerstate(&cg.snap->ps); bg_character_t *headcharacter = BG_GetCharacter(cgs.clientinfo[cg.snap->ps.clientNum].team, cgs.clientinfo[cg.snap->ps.clientNum].cls); qhandle_t painshader = 0; rectDef_t *headRect = &comp.location; if (!comp.visible) { return; } if (cg.weaponFireTime > 500) { anim = HD_ATTACK; } else if (cg.time - cg.lastFiredWeaponTime < 500) { anim = HD_ATTACK_END; } else if (cg.time - cg.painTime < (character->hudheadanimations[HD_PAIN].numFrames * character->hudheadanimations[HD_PAIN].frameLerp)) { anim = HD_PAIN; } else if (cg.time > cg.nextIdleTime) { cg.nextIdleTime = cg.time + 7000 + rand() % 1000; if (cg.snap->ps.stats[STAT_HEALTH] < 40) { cg.idleAnim = (rand() % (HD_DAMAGED_IDLE3 - HD_DAMAGED_IDLE2 + 1)) + HD_DAMAGED_IDLE2; } else { cg.idleAnim = (rand() % (HD_IDLE8 - HD_IDLE2 + 1)) + HD_IDLE2; } cg.lastIdleTimeEnd = cg.time + character->hudheadanimations[cg.idleAnim].numFrames * character->hudheadanimations[cg.idleAnim].frameLerp; } if (cg.snap->ps.stats[STAT_HEALTH] < 5) { painshader = cgs.media.hudDamagedStates[3]; } else if (cg.snap->ps.stats[STAT_HEALTH] < 20) { painshader = cgs.media.hudDamagedStates[2]; } else if (cg.snap->ps.stats[STAT_HEALTH] < 40) { painshader = cgs.media.hudDamagedStates[1]; } else if (cg.snap->ps.stats[STAT_HEALTH] < 60) { painshader = cgs.media.hudDamagedStates[0]; } if (cg.time > cg.lastIdleTimeEnd) { if (cg.snap->ps.stats[STAT_HEALTH] < 40) { cg.idleAnim = HD_DAMAGED_IDLE1; } else { cg.idleAnim = HD_IDLE1; } } CG_DrawPlayerHead(headRect, character, headcharacter, 180, 0, cg.snap->ps.eFlags & EF_HEADSHOT ? qfalse : qtrue, anim, painshader, cgs.clientinfo[cg.snap->ps.clientNum].rank, qfalse); }