mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2024-11-30 07:52:03 +00:00
Callvote HUD improvements.
This commit is contained in:
parent
3fa530a26a
commit
9d325810d4
4 changed files with 132 additions and 22 deletions
|
@ -2208,9 +2208,16 @@ static void CG_DrawVote(void)
|
||||||
const char *s;
|
const char *s;
|
||||||
int len;
|
int len;
|
||||||
int sec, y = 58;
|
int sec, y = 58;
|
||||||
float Color1[4];
|
vec4_t color1;
|
||||||
float xmin;
|
float xmin;
|
||||||
int lines = 3;
|
int lines = 3;
|
||||||
|
int offset = 0;
|
||||||
|
float alpha = 1.f;
|
||||||
|
|
||||||
|
const int previewWidth = 64;
|
||||||
|
const int previewHeight = 48;
|
||||||
|
|
||||||
|
int height;
|
||||||
|
|
||||||
if (!cgs.voteTime) {
|
if (!cgs.voteTime) {
|
||||||
return;
|
return;
|
||||||
|
@ -2227,37 +2234,72 @@ static void CG_DrawVote(void)
|
||||||
sec = 0;
|
sec = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = va( "Vote called: %s\n"
|
# define VOTE_FMT(msg) msg "(%d)"
|
||||||
"Yes(%d) No(%d)\n"
|
|
||||||
"%d %s left\n",
|
|
||||||
cgs.voteString,
|
|
||||||
cgs.voteYes, cgs.voteNo,
|
|
||||||
sec, sec == 1 ? "second" : "seconds"
|
|
||||||
);
|
|
||||||
|
|
||||||
MAKERGBA(Color1, 0.0f, 0.0f, 0.0f, 0.4f);
|
if ((cg.snap && EF_VOTED == (cg.snap->ps.eFlags & EF_VOTED)) || !cgs.voteYesKey[0] || !cgs.voteNoKey[0])
|
||||||
|
{
|
||||||
|
s = va( "Vote called: %s\n"
|
||||||
|
VOTE_FMT("Yes") " " VOTE_FMT("No") "\n"
|
||||||
|
"%d %s left\n",
|
||||||
|
cgs.voteString,
|
||||||
|
cgs.voteYes, cgs.voteNo,
|
||||||
|
sec, sec == 1 ? "second" : "seconds"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
# define KEY_FMT S_COLOR_CYAN "%s" S_COLOR_RESET
|
||||||
|
|
||||||
|
s = va( "Vote called: %s\n"
|
||||||
|
KEY_FMT "=" VOTE_FMT("Yes") " " KEY_FMT "=" VOTE_FMT("No") "\n"
|
||||||
|
"%d %s left\n",
|
||||||
|
cgs.voteString,
|
||||||
|
cgs.voteYesKey, cgs.voteYes, cgs.voteNoKey, cgs.voteNo,
|
||||||
|
sec, sec == 1 ? "second" : "seconds"
|
||||||
|
);
|
||||||
|
|
||||||
|
# undef KEY_FMT
|
||||||
|
}
|
||||||
|
# undef VOTE_FMT
|
||||||
|
|
||||||
|
len = CG_DrawStrlen(s) * SMALLCHAR_WIDTH;
|
||||||
|
height = lines * SMALLCHAR_HEIGHT + 4;
|
||||||
|
|
||||||
xmin = cgs.screenXMin + 4;
|
xmin = cgs.screenXMin + 4;
|
||||||
|
|
||||||
if (cgs.media.voteMapShader)
|
if (cgs.media.voteMapShader)
|
||||||
{
|
{
|
||||||
int width = 64;
|
offset += previewWidth + 4 + 4;
|
||||||
int height = 48;
|
if (height < previewHeight + 4 + 4)
|
||||||
|
height = previewHeight + 4;
|
||||||
CG_FillRect(xmin + 1, y, width + 4, height + 4, Color1);
|
|
||||||
CG_DrawCleanRect(xmin + 1, y, width + 4, height + 4, 1, colorBlack);
|
|
||||||
CG_DrawPic(xmin + 3, y + 2, width, height, cgs.media.voteMapShader);
|
|
||||||
|
|
||||||
xmin += width + 4 + 4;
|
|
||||||
//y += ((height + 4) - (SMALLCHAR_HEIGHT * lines + 4)) / 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
len = CG_DrawStrlen(s) * SMALLCHAR_WIDTH;
|
alpha = SmoothLerp(Com_Clamp(0.f, 1.f, (cg.time - cgs.voteTime) / (1000.f * 0.125f)));
|
||||||
|
|
||||||
|
// slide in //
|
||||||
|
xmin -= (1.f - alpha) * (len + offset);
|
||||||
|
|
||||||
CG_FillRect(xmin + 1, y, len + 4, SMALLCHAR_HEIGHT * lines + 4, Color1);
|
{
|
||||||
CG_DrawCleanRect(xmin + 1, y, len + 4, SMALLCHAR_HEIGHT * lines + 4, 1, colorBlack);
|
const int inflatex = 32;
|
||||||
CG_DrawStringExt(xmin + 3, y+2, s, colorWhite, qtrue, qfalse,
|
const int inflatey = 24;
|
||||||
|
CG_DrawFuzzyShadow(xmin + 1 - inflatex, y - inflatey, len + 4 + offset + inflatex + inflatex, height + inflatey + inflatey, 32, 0.75f * alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
MAKERGBA(color1, 1.0f, 1.0f, 1.0f, alpha);
|
||||||
|
|
||||||
|
if (cgs.media.voteMapShader)
|
||||||
|
{
|
||||||
|
CG_FillRect(xmin + 1, y, previewWidth + 4, previewHeight + 4, color1);
|
||||||
|
trap_R_SetColor(color1);
|
||||||
|
CG_DrawPic(xmin + 3, y + 2, previewWidth, previewHeight, cgs.media.voteMapShader);
|
||||||
|
|
||||||
|
xmin += offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
CG_DrawStringExt(xmin + 3, y+2, s, color1, qfalse, qfalse,
|
||||||
SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 100);
|
SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT, 100);
|
||||||
|
|
||||||
|
trap_R_SetColor(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -136,6 +136,47 @@ void CG_DrawRect(float x, float y, float width, float height, float size, const
|
||||||
trap_R_SetColor(NULL);
|
trap_R_SetColor(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CG_DrawFuzzyRect(float x, float y, float w, float h, float corner, vec4_t color, qhandle_t shader)
|
||||||
|
{
|
||||||
|
float xcorner = corner * cgs.screenXScale;
|
||||||
|
float ycorner = corner * cgs.screenYScale;
|
||||||
|
|
||||||
|
CG_AdjustFrom640(&x, &y, &w, &h);
|
||||||
|
|
||||||
|
trap_R_SetColor(color);
|
||||||
|
|
||||||
|
// top //
|
||||||
|
trap_R_DrawStretchPic(x, y, xcorner, ycorner, 0, 0, 0.5f, 0.5f, shader);
|
||||||
|
trap_R_DrawStretchPic(x+xcorner, y, w-xcorner-xcorner, ycorner, 0.5f, 0, 0.5f, 0.5f, shader);
|
||||||
|
trap_R_DrawStretchPic(x+w-xcorner, y, xcorner, ycorner, 0.5f, 0, 1, 0.5f, shader);
|
||||||
|
|
||||||
|
// middle //
|
||||||
|
trap_R_DrawStretchPic(x, y+ycorner, xcorner, h-ycorner-ycorner, 0, 0.5f, 0.5f, 0.5f, shader);
|
||||||
|
trap_R_DrawStretchPic(x+xcorner, y+ycorner, w-xcorner-xcorner, h-ycorner-ycorner, 0.5f, 0.5f, 0.5f, 0.5f, shader);
|
||||||
|
trap_R_DrawStretchPic(x+w-xcorner, y+ycorner, xcorner, h-ycorner-ycorner, 0.5f, 0.5f, 1, 0.5f, shader);
|
||||||
|
|
||||||
|
// bottom //
|
||||||
|
trap_R_DrawStretchPic(x, y+h-ycorner, xcorner, ycorner, 0, 0.5f, 0.5f, 1, shader);
|
||||||
|
trap_R_DrawStretchPic(x+xcorner, y+h-ycorner, w-xcorner-xcorner, ycorner, 0.5f, 0.5f, 0.5f, 1, shader);
|
||||||
|
trap_R_DrawStretchPic(x+w-xcorner, y+h-ycorner, xcorner, ycorner, 0.5f, 0.5f, 1, 1, shader);
|
||||||
|
|
||||||
|
trap_R_SetColor(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CG_DrawFuzzyShadow(float x, float y, float w, float h, float corner, float alpha)
|
||||||
|
{
|
||||||
|
vec4_t color;
|
||||||
|
color[0] = color[1] = color[2] = alpha;
|
||||||
|
color[3] = 1.f;
|
||||||
|
CG_DrawFuzzyRect(x, y, w, h, corner, color, cgs.media.fuzzyShadowShader);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CG_DrawFuzzyGlow(float x, float y, float w, float h, float corner, vec4_t color)
|
||||||
|
{
|
||||||
|
CG_DrawFuzzyRect(x, y, w, h, corner, color, cgs.media.fuzzyGlowShader);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
UI_DrawRect -- Added by NiceAss
|
UI_DrawRect -- Added by NiceAss
|
||||||
|
|
|
@ -1217,6 +1217,8 @@ typedef struct {
|
||||||
qhandle_t whiteShader;
|
qhandle_t whiteShader;
|
||||||
|
|
||||||
qhandle_t blackHackShader;
|
qhandle_t blackHackShader;
|
||||||
|
qhandle_t fuzzyShadowShader;
|
||||||
|
qhandle_t fuzzyGlowShader;
|
||||||
|
|
||||||
#ifdef MISSIONPACK
|
#ifdef MISSIONPACK
|
||||||
qhandle_t redCubeModel;
|
qhandle_t redCubeModel;
|
||||||
|
@ -1706,6 +1708,9 @@ typedef struct {
|
||||||
qboolean voteModified; // beep whenever changed
|
qboolean voteModified; // beep whenever changed
|
||||||
char voteString[MAX_STRING_TOKENS];
|
char voteString[MAX_STRING_TOKENS];
|
||||||
|
|
||||||
|
char voteYesKey[32];
|
||||||
|
char voteNoKey[32];
|
||||||
|
|
||||||
int teamVoteTime[2];
|
int teamVoteTime[2];
|
||||||
int teamVoteYes[2];
|
int teamVoteYes[2];
|
||||||
int teamVoteNo[2];
|
int teamVoteNo[2];
|
||||||
|
@ -2126,6 +2131,10 @@ void CG_DrawBigStringColor(int x, int y, const char *s, vec4_t color);
|
||||||
void CG_DrawSmallString(int x, int y, const char *s, float alpha);
|
void CG_DrawSmallString(int x, int y, const char *s, float alpha);
|
||||||
void CG_DrawSmallStringColor(int x, int y, const char *s, vec4_t color);
|
void CG_DrawSmallStringColor(int x, int y, const char *s, vec4_t color);
|
||||||
|
|
||||||
|
void CG_DrawFuzzyRect(float x, float y, float w, float h, float corner, vec4_t color, qhandle_t shader);
|
||||||
|
void CG_DrawFuzzyShadow(float x, float y, float w, float h, float corner, float alpha);
|
||||||
|
void CG_DrawFuzzyGlow(float x, float y, float w, float h, float corner, vec4_t color);
|
||||||
|
|
||||||
int CG_DrawStrlen(const char *str);
|
int CG_DrawStrlen(const char *str);
|
||||||
|
|
||||||
float *CG_FadeColor(int startMsec, int totalMsec);
|
float *CG_FadeColor(int startMsec, int totalMsec);
|
||||||
|
@ -2574,6 +2583,7 @@ void trap_startCamera(int time);
|
||||||
qboolean trap_getCameraInfo(int time, vec3_t * origin, vec3_t * angles);
|
qboolean trap_getCameraInfo(int time, vec3_t * origin, vec3_t * angles);
|
||||||
|
|
||||||
qboolean trap_GetEntityToken(char *buffer, int bufferSize);
|
qboolean trap_GetEntityToken(char *buffer, int bufferSize);
|
||||||
|
void trap_RQ3_Key_KeynumToStringBuf(int keynum, char *buf, int buflen);
|
||||||
|
|
||||||
void CG_ClearParticles(void);
|
void CG_ClearParticles(void);
|
||||||
void CG_AddParticles(void);
|
void CG_AddParticles(void);
|
||||||
|
|
|
@ -659,6 +659,22 @@ static void CG_UpdateVoteMapShader(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CG_UpdateVoteKeys(void)
|
||||||
|
{
|
||||||
|
int yesKey = trap_Key_GetKey("vote yes");
|
||||||
|
int noKey = trap_Key_GetKey("vote no");
|
||||||
|
if (yesKey != -1 && noKey != -1)
|
||||||
|
{
|
||||||
|
trap_RQ3_Key_KeynumToStringBuf(yesKey, cgs.voteYesKey, sizeof(cgs.voteYesKey));
|
||||||
|
trap_RQ3_Key_KeynumToStringBuf(noKey, cgs.voteNoKey, sizeof(cgs.voteNoKey));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cgs.voteYesKey[0] = 0;
|
||||||
|
cgs.voteNoKey[0] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================
|
================
|
||||||
CG_ConfigStringModified
|
CG_ConfigStringModified
|
||||||
|
@ -695,6 +711,7 @@ static void CG_ConfigStringModified(void)
|
||||||
} else if (num == CS_VOTE_TIME) {
|
} else if (num == CS_VOTE_TIME) {
|
||||||
cgs.voteTime = atoi(str);
|
cgs.voteTime = atoi(str);
|
||||||
cgs.voteModified = qtrue;
|
cgs.voteModified = qtrue;
|
||||||
|
CG_UpdateVoteKeys();
|
||||||
CG_UpdateVoteMapShader();
|
CG_UpdateVoteMapShader();
|
||||||
} else if (num == CS_VOTE_YES) {
|
} else if (num == CS_VOTE_YES) {
|
||||||
cgs.voteYes = atoi(str);
|
cgs.voteYes = atoi(str);
|
||||||
|
|
Loading…
Reference in a new issue