📄 cg_newdraw.c
字号:
if (cg.spectatorLen) {
float maxX;
if (cg.spectatorWidth == -1) {
cg.spectatorWidth = 0;
cg.spectatorPaintX = rect->x + 1;
cg.spectatorPaintX2 = -1;
}
if (cg.spectatorOffset > cg.spectatorLen) {
cg.spectatorOffset = 0;
cg.spectatorPaintX = rect->x + 1;
cg.spectatorPaintX2 = -1;
}
if (cg.time > cg.spectatorTime) {
cg.spectatorTime = cg.time + 10;
if (cg.spectatorPaintX <= rect->x + 2) {
if (cg.spectatorOffset < cg.spectatorLen) {
cg.spectatorPaintX += CG_Text_Width(&cg.spectatorList[cg.spectatorOffset], scale, 1) - 1;
cg.spectatorOffset++;
} else {
cg.spectatorOffset = 0;
if (cg.spectatorPaintX2 >= 0) {
cg.spectatorPaintX = cg.spectatorPaintX2;
} else {
cg.spectatorPaintX = rect->x + rect->w - 2;
}
cg.spectatorPaintX2 = -1;
}
} else {
cg.spectatorPaintX--;
if (cg.spectatorPaintX2 >= 0) {
cg.spectatorPaintX2--;
}
}
}
maxX = rect->x + rect->w - 2;
CG_Text_Paint_Limit(&maxX, cg.spectatorPaintX, rect->y + rect->h - 3, scale, color, &cg.spectatorList[cg.spectatorOffset], 0, 0);
if (cg.spectatorPaintX2 >= 0) {
float maxX2 = rect->x + rect->w - 2;
CG_Text_Paint_Limit(&maxX2, cg.spectatorPaintX2, rect->y + rect->h - 3, scale, color, cg.spectatorList, 0, cg.spectatorOffset);
}
if (cg.spectatorOffset && maxX > 0) {
// if we have an offset ( we are skipping the first part of the string ) and we fit the string
if (cg.spectatorPaintX2 == -1) {
cg.spectatorPaintX2 = rect->x + rect->w - 2;
}
} else {
cg.spectatorPaintX2 = -1;
}
}
}
void CG_DrawMedal(int ownerDraw, rectDef_t *rect, float scale, vec4_t color, qhandle_t shader) {
score_t *score = &cg.scores[cg.selectedScore];
float value = 0;
char *text = NULL;
color[3] = 0.25;
switch (ownerDraw) {
case CG_ACCURACY:
value = score->accuracy;
break;
case CG_ASSISTS:
value = score->assistCount;
break;
case CG_DEFEND:
value = score->defendCount;
break;
case CG_EXCELLENT:
value = score->excellentCount;
break;
case CG_IMPRESSIVE:
value = score->impressiveCount;
break;
case CG_PERFECT:
value = score->perfect;
break;
case CG_GAUNTLET:
value = score->guantletCount;
break;
case CG_CAPTURES:
value = score->captures;
break;
}
if (value > 0) {
if (ownerDraw != CG_PERFECT) {
if (ownerDraw == CG_ACCURACY) {
text = va("%i%%", (int)value);
if (value > 50) {
color[3] = 1.0;
}
} else {
text = va("%i", (int)value);
color[3] = 1.0;
}
} else {
if (value) {
color[3] = 1.0;
}
text = "Wow";
}
}
trap_R_SetColor(color);
CG_DrawPic( rect->x, rect->y, rect->w, rect->h, shader );
if (text) {
color[3] = 1.0;
value = CG_Text_Width(text, scale, 0);
CG_Text_Paint(rect->x + (rect->w - value) / 2, rect->y + rect->h + 10 , scale, color, text, 0, 0, 0);
}
trap_R_SetColor(NULL);
}
//
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, vec4_t 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_SELECTEDPLAYER_HEAD:
CG_DrawSelectedPlayerHead(&rect, ownerDrawFlags & CG_SHOW_2DONLY, qfalse);
break;
case CG_VOICE_HEAD:
CG_DrawSelectedPlayerHead(&rect, ownerDrawFlags & CG_SHOW_2DONLY, qtrue);
break;
case CG_VOICE_NAME:
CG_DrawSelectedPlayerName(&rect, scale, color, qtrue, textStyle);
break;
case CG_SELECTEDPLAYER_STATUS:
CG_DrawSelectedPlayerStatus(&rect);
break;
case CG_SELECTEDPLAYER_ARMOR:
CG_DrawSelectedPlayerArmor(&rect, scale, color, shader, textStyle);
break;
case CG_SELECTEDPLAYER_HEALTH:
CG_DrawSelectedPlayerHealth(&rect, scale, color, shader, textStyle);
break;
case CG_SELECTEDPLAYER_NAME:
CG_DrawSelectedPlayerName(&rect, scale, color, qfalse, textStyle);
break;
case CG_SELECTEDPLAYER_LOCATION:
CG_DrawSelectedPlayerLocation(&rect, scale, color, textStyle);
break;
case CG_SELECTEDPLAYER_WEAPON:
CG_DrawSelectedPlayerWeapon(&rect);
break;
case CG_SELECTEDPLAYER_POWERUP:
CG_DrawSelectedPlayerPowerup(&rect, ownerDrawFlags & CG_SHOW_2DONLY);
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_HARVESTER_SKULLS:
CG_HarvesterSkulls(&rect, scale, color, qfalse, textStyle);
break;
case CG_HARVESTER_SKULLS2D:
CG_HarvesterSkulls(&rect, scale, color, qtrue, 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_CTF_POWERUP:
CG_DrawCTFPowerUp(&rect);
break;
case CG_AREA_POWERUP:
CG_DrawAreaPowerUp(&rect, align, special, scale, color);
break;
case CG_PLAYER_STATUS:
CG_DrawPlayerStatus(&rect);
break;
case CG_PLAYER_HASFLAG:
CG_DrawPlayerHasFlag(&rect, qfalse);
break;
case CG_PLAYER_HASFLAG2D:
CG_DrawPlayerHasFlag(&rect, qtrue);
break;
case CG_AREA_SYSTEMCHAT:
CG_DrawAreaSystemChat(&rect, scale, color, shader);
break;
case CG_AREA_TEAMCHAT:
CG_DrawAreaTeamChat(&rect, scale, color, shader);
break;
case CG_AREA_CHAT:
CG_DrawAreaChat(&rect, scale, color, shader);
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_GAUNTLET:
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;
default:
break;
}
}
void CG_MouseEvent(int x, int y) {
int n;
if ( (cg.predictedPlayerState.pm_type == PM_NORMAL || cg.predictedPlayerState.pm_type == PM_SPECTATOR) && cg.showScores == qfalse) {
trap_Key_SetCatcher(0);
return;
}
cgs.cursorX+= x;
if (cgs.cursorX < 0)
cgs.cursorX = 0;
else if (cgs.cursorX > 640)
cgs.cursorX = 640;
cgs.cursorY += y;
if (cgs.cursorY < 0)
cgs.cursorY = 0;
else if (cgs.cursorY > 480)
cgs.cursorY = 480;
n = Display_CursorType(cgs.cursorX, cgs.cursorY);
cgs.activeCursor = 0;
if (n == CURSOR_ARROW) {
cgs.activeCursor = cgs.media.selectCursor;
} else if (n == CURSOR_SIZER) {
cgs.activeCursor = cgs.media.sizeCursor;
}
if (cgs.capturedItem) {
Display_MouseMove(cgs.capturedItem, x, y);
} else {
Display_MouseMove(NULL, cgs.cursorX, cgs.cursorY);
}
}
/*
==================
CG_HideTeamMenus
==================
*/
void CG_HideTeamMenu() {
Menus_CloseByName("teamMenu");
Menus_CloseByName("getMenu");
}
/*
==================
CG_ShowTeamMenus
==================
*/
void CG_ShowTeamMenu() {
Menus_OpenByName("teamMenu");
}
/*
==================
CG_EventHandling
==================
type 0 - no event handling
1 - team menu
2 - hud editor
*/
void CG_EventHandling(int type) {
cgs.eventHandling = type;
if (type == CGAME_EVENT_NONE) {
CG_HideTeamMenu();
} else if (type == CGAME_EVENT_TEAMMENU) {
//CG_ShowTeamMenu();
} else if (type == CGAME_EVENT_SCOREBOARD) {
}
}
void CG_KeyEvent(int key, qboolean down) {
if (!down) {
return;
}
if ( cg.predictedPlayerState.pm_type == PM_NORMAL || (cg.predictedPlayerState.pm_type == PM_SPECTATOR && cg.showScores == qfalse)) {
CG_EventHandling(CGAME_EVENT_NONE);
trap_Key_SetCatcher(0);
return;
}
//if (key == trap_Key_GetKey("teamMenu") || !Display_CaptureItem(cgs.cursorX, cgs.cursorY)) {
// if we see this then we should always be visible
// CG_EventHandling(CGAME_EVENT_NONE);
// trap_Key_SetCatcher(0);
//}
Display_HandleKey(key, down, cgs.cursorX, cgs.cursorY);
if (cgs.capturedItem) {
cgs.capturedItem = NULL;
} else {
if (key == K_MOUSE2 && down) {
cgs.capturedItem = Display_CaptureItem(cgs.cursorX, cgs.cursorY);
}
}
}
int CG_ClientNumFromName(const char *p) {
int i;
for (i = 0; i < cgs.maxclients; i++) {
if (cgs.clientinfo[i].infoValid && Q_stricmp(cgs.clientinfo[i].name, p) == 0) {
return i;
}
}
return -1;
}
void CG_ShowResponseHead() {
Menus_OpenByName("voiceMenu");
trap_Cvar_Set("cl_conXOffset", "72");
cg.voiceTime = cg.time;
}
void CG_RunMenuScript(char **args) {
}
void CG_GetTeamColor(vec4_t *color) {
if (cg.snap->ps.persistant[PERS_TEAM] == TEAM_RED) {
(*color)[0] = 1.0f;
(*color)[3] = 0.25f;
(*color)[1] = (*color)[2] = 0.0f;
} else if (cg.snap->ps.persistant[PERS_TEAM] == TEAM_BLUE) {
(*color)[0] = (*color)[1] = 0.0f;
(*color)[2] = 1.0f;
(*color)[3] = 0.25f;
} else {
(*color)[0] = (*color)[2] = 0.0f;
(*color)[1] = 0.17f;
(*color)[3] = 0.25f;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -