[nexuiz-commits] r7988 - trunk/data/qcsrc/client
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Sep 29 15:20:19 EDT 2009
Author: div0
Date: 2009-09-29 15:20:19 -0400 (Tue, 29 Sep 2009)
New Revision: 7988
Modified:
trunk/data/qcsrc/client/sbar.qc
Log:
better CTF indicators
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2009-09-29 12:42:34 UTC (rev 7987)
+++ trunk/data/qcsrc/client/sbar.qc 2009-09-29 19:20:19 UTC (rev 7988)
@@ -2636,11 +2636,12 @@
// CTF HUD
float redflag_prevframe, blueflag_prevframe; // status during previous frame
-float redflag_prevstatus, blueflag_prevstatus; // previous status, not = 0
+float redflag_prevstatus, blueflag_prevstatus; // last remembered status
float redflag_statuschange_time, blueflag_statuschange_time; // time when the status changed
void CSQC_ctf_hud(void)
{
vector bottomleft, redflag_pos, blueflag_pos, sz;
+ float f; // every function should have that
bottomleft_x = 0;
bottomleft_y = vid_conheight;
bottomleft_z = 0;
@@ -2653,55 +2654,87 @@
redflag = (stat_items/IT_RED_FLAG_TAKEN) & 3;
blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3;
- if (redflag != redflag_prevframe) {
+ // when status CHANGES, set old status into prevstatus and current status into status
+ if (redflag != redflag_prevframe)
+ {
redflag_statuschange_time = time;
- if (redflag)
- redflag_prevstatus = redflag;
+ redflag_prevstatus = redflag_prevframe;
+ redflag_prevframe = redflag;
}
- redflag_prevframe = redflag;
- if (blueflag != blueflag_prevframe) {
+ if (blueflag != blueflag_prevframe)
+ {
blueflag_statuschange_time = time;
- if (blueflag)
- blueflag_prevstatus = blueflag;
+ blueflag_prevstatus = blueflag_prevframe;
+ blueflag_prevframe = blueflag;
}
- blueflag_prevframe = blueflag;
redflag_statuschange_elapsedtime = time - redflag_statuschange_time;
blueflag_statuschange_elapsedtime = time - blueflag_statuschange_time;
+ float BLINK_FACTOR = 0.15;
+ float BLINK_BASE = 0.85;
+ // note:
+ // RMS = sqrt(BLINK_BASE^2 + 0.5 * BLINK_FACTOR^2)
+ // thus
+ // BLINK_BASE = sqrt(RMS^2 - 0.5 * BLINK_FACTOR^2)
+ // ensure RMS == 1
+ float BLINK_FREQ = 5; // circle frequency, = 2*pi*frequency in hertz
+
string red_icon, red_icon_prevstatus;
+ float red_alpha, red_alpha_prevstatus;
+ red_alpha = red_alpha_prevstatus = 1;
switch(redflag) {
case 1: red_icon = "gfx/hud/sb_flag_red_taken"; break;
case 2: red_icon = "gfx/hud/sb_flag_red_lost"; break;
- case 3: red_icon = "gfx/hud/sb_flag_red_carrying"; break;
+ case 3: red_icon = "gfx/hud/sb_flag_red_carrying"; red_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break;
default:
if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM2))
- red_icon = "gfx/hud/sb_flag_red_shielded"; break;
- } switch(redflag_prevstatus) {
+ red_icon = "gfx/hud/sb_flag_red_shielded";
+ else
+ red_icon = string_null;
+ break;
+ }
+ switch(redflag_prevstatus) {
case 1: red_icon_prevstatus = "gfx/hud/sb_flag_red_taken"; break;
case 2: red_icon_prevstatus = "gfx/hud/sb_flag_red_lost"; break;
- case 3: red_icon_prevstatus = "gfx/hud/sb_flag_red_carrying"; break;
+ case 3: red_icon_prevstatus = "gfx/hud/sb_flag_red_carrying"; red_alpha_prevstatus = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break;
default:
- if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM2))
- red_icon_prevstatus = "gfx/hud/sb_flag_red_shielded"; break;
+ if(redflag == 3)
+ red_icon_prevstatus = "gfx/hud/sb_flag_red_carrying"; // make it more visible
+ else if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM2))
+ red_icon_prevstatus = "gfx/hud/sb_flag_red_shielded";
+ else
+ red_icon_prevstatus = string_null;
+ break;
}
string blue_icon, blue_icon_prevstatus;
+ float blue_alpha, blue_alpha_prevstatus;
+ blue_alpha = blue_alpha_prevstatus = 1;
switch(blueflag) {
case 1: blue_icon = "gfx/hud/sb_flag_blue_taken"; break;
case 2: blue_icon = "gfx/hud/sb_flag_blue_lost"; break;
- case 3: blue_icon = "gfx/hud/sb_flag_blue_carrying"; break;
+ case 3: blue_icon = "gfx/hud/sb_flag_blue_carrying"; blue_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break;
default:
if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM1))
- blue_icon = "gfx/hud/sb_flag_blue_shielded"; break;
- } switch(blueflag_prevstatus) {
+ blue_icon = "gfx/hud/sb_flag_blue_shielded";
+ else
+ blue_icon = string_null;
+ break;
+ }
+ switch(blueflag_prevstatus) {
case 1: blue_icon_prevstatus = "gfx/hud/sb_flag_blue_taken"; break;
case 2: blue_icon_prevstatus = "gfx/hud/sb_flag_blue_lost"; break;
- case 3: blue_icon_prevstatus = "gfx/hud/sb_flag_blue_carrying"; break;
+ case 3: blue_icon_prevstatus = "gfx/hud/sb_flag_blue_carrying"; blue_alpha_prevstatus = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); break;
default:
- if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM1))
- blue_icon_prevstatus = "gfx/hud/sb_flag_blue_shielded"; break;
+ if(blueflag == 3)
+ blue_icon_prevstatus = "gfx/hud/sb_flag_blue_carrying"; // make it more visible
+ else if((stat_items & IT_CTF_SHIELDED) && (myteam == COLOR_TEAM1))
+ blue_icon_prevstatus = "gfx/hud/sb_flag_blue_shielded";
+ else
+ blue_icon_prevstatus = string_null;
+ break;
}
if (myteam == COLOR_TEAM1) { // always draw own flag on left
@@ -2714,28 +2747,17 @@
sz = '52 52 0';
- // draw the icons
- if (redflag_statuschange_elapsedtime > 1 && red_icon) // red flag status has not changed during the previous second
- drawpic(redflag_pos, red_icon, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
- else { // red flag status HAS changed during the previous second
- if (redflag == 0 && red_icon_prevstatus) // in this case, the status was lost so we have to use the value in prevstatus to determine which icon to fade out
- drawpic_expanding(redflag_pos, red_icon_prevstatus, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL,
- bound(0, redflag_statuschange_elapsedtime*2, 1));
- else if (red_icon)
- drawpic_expanding_two(redflag_pos, red_icon, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL,
- bound(0, redflag_statuschange_elapsedtime*2, 1));
- }
-
- if (blueflag_statuschange_elapsedtime > 1 && blue_icon) // blue flag status has not changed during the previous second
- drawpic(blueflag_pos, blue_icon, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL);
- else { // blue flag status HAS changed during the previous second
- if (blueflag == 0 && blue_icon_prevstatus) // in this case, the status was lost so we have to use the value in prevstatus to determine which icon to fade out
- drawpic_expanding(blueflag_pos, blue_icon_prevstatus, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL,
- bound(0, blueflag_statuschange_elapsedtime*2, 1));
- else if (blue_icon)
- drawpic_expanding_two(blueflag_pos, blue_icon, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL,
- bound(0, blueflag_statuschange_elapsedtime*2, 1));
- }
+ f = bound(0, redflag_statuschange_elapsedtime*2, 1);
+ if(red_icon_prevstatus && f < 1)
+ drawpic_expanding(redflag_pos, red_icon_prevstatus, sz, '1 1 1', sbar_alpha_fg * red_alpha_prevstatus, DRAWFLAG_NORMAL, f);
+ if(red_icon)
+ drawpic(redflag_pos, red_icon, sz, '1 1 1', sbar_alpha_fg * red_alpha * f, DRAWFLAG_NORMAL);
+
+ f = bound(0, blueflag_statuschange_elapsedtime*2, 1);
+ if(blue_icon_prevstatus && f < 1)
+ drawpic_expanding(blueflag_pos, blue_icon_prevstatus, sz, '1 1 1', sbar_alpha_fg * blue_alpha_prevstatus, DRAWFLAG_NORMAL, f);
+ if(blue_icon)
+ drawpic(blueflag_pos, blue_icon, sz, '1 1 1', sbar_alpha_fg * blue_alpha * f, DRAWFLAG_NORMAL);
}
// Keyhunt HUD
More information about the nexuiz-commits
mailing list