[nexuiz-commits] r8134 - trunk/data/qcsrc/client
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu Oct 15 02:02:44 EDT 2009
Author: div0
Date: 2009-10-15 02:02:44 -0400 (Thu, 15 Oct 2009)
New Revision: 8134
Modified:
trunk/data/qcsrc/client/View.qc
Log:
sync crosshair effects to switch delay, now with fading
Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc 2009-10-15 05:34:38 UTC (rev 8133)
+++ trunk/data/qcsrc/client/View.qc 2009-10-15 06:02:44 UTC (rev 8134)
@@ -210,7 +210,10 @@
vector wcross_origin;
float wcross_sizefloat_prev, wcross_alpha_prev, wcross_blur_prev;
float wcross_sizefloat_goal_prev, wcross_alpha_goal_prev, wcross_blur_goal_prev;
-float wcross_lastchangetime;
+float wcross_changedonetime;
+string wcross_name_goal_prev, wcross_name_goal_prev_prev;
+float wcross_name_changestarttime, wcross_name_changedonetime;
+float wcross_name_alpha_goal_prev, wcross_name_alpha_goal_prev_prev;
entity trueaim;
entity trueaim_rifle;
@@ -662,25 +665,34 @@
else
wcross_blur = 0;
+ f = cvar("crosshair_effect_speed");
+ if(f < 0)
+ f *= -2 * g_weaponswitchdelay;
if(wcross_blur != wcross_blur_goal_prev || wcross_sizefloat != wcross_sizefloat_goal_prev || wcross_alpha != wcross_alpha_goal_prev)
{
- f = cvar("crosshair_effect_speed");
- if(f < 0)
- wcross_lastchangetime = time - f * 2 * g_weaponswitchdelay;
- else
- wcross_lastchangetime = time + f;
+ wcross_changedonetime = time + f;
}
+ if(wcross_name != wcross_name_goal_prev)
+ {
+ wcross_name_changestarttime = time;
+ wcross_name_changedonetime = time + f;
+ if(wcross_name_goal_prev_prev)
+ strunzone(wcross_name_goal_prev_prev);
+ wcross_name_goal_prev_prev = wcross_name_goal_prev;
+ wcross_name_goal_prev = strzone(wcross_name);
+ wcross_name_alpha_goal_prev_prev = wcross_name_alpha_goal_prev;
+ }
wcross_sizefloat_goal_prev = wcross_sizefloat;
wcross_alpha_goal_prev = wcross_alpha;
wcross_blur_goal_prev = wcross_blur;
// *_prev is at time-frametime
- // * is at wcross_lastchangetime+f
+ // * is at wcross_changedonetime+f
// what do we have at time?
- if(time < wcross_lastchangetime)
+ if(time < wcross_changedonetime)
{
- f = frametime / (wcross_lastchangetime - time + frametime);
+ f = frametime / (wcross_changedonetime - time + frametime);
wcross_sizefloat = f * wcross_sizefloat + (1 - f) * wcross_sizefloat_prev;
wcross_alpha = f * wcross_alpha + (1 - f) * wcross_alpha_prev;
//wcross_blur = (frametime / f) * wcross_blur + (1 - frametime / f) * wcross_blur_prev;
@@ -706,23 +718,49 @@
else
bullets = 0;
- if(wcross_blur > 0)
+#define CROSSHAIR_DRAW_RING(i,j,dummy1,dummy2) \
+ drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x * ring_scale + i * wcross_blur) + '0 0.5 0' * (wcross_size_y * ring_scale + j * wcross_blur)), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+
+#define CROSSHAIR_DO_BLUR(M,a,b) \
+ do \
+ { \
+ if(wcross_blur > 0) \
+ { \
+ wcross_alpha = wcross_alpha * 0.04; \
+ for(i = -2; i <= 2; ++i) \
+ for(j = -2; j <= 2; ++j) \
+ M(i,j,a,b); \
+ } \
+ else \
+ { \
+ M(0,0,a,b); \
+ } \
+ } \
+ while(0)
+
+#define CROSSHAIR_DRAW_SINGLE(i,j,wcross_name,wcross_alpha) \
+ drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x + i * wcross_blur) + '0 0.5 0' * (wcross_size_y + j * wcross_blur)), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL)
+
+#define CROSSHAIR_DRAW(wcross_name,wcross_alpha) \
+ CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_SINGLE,wcross_name,wcross_alpha)
+
+ if(bullets)
{
- wcross_alpha = wcross_alpha * 0.04;
- for(i = -2; i <= 2; ++i)
- for(j = -2; j <= 2; ++j)
- {
- if (bullets)
- drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x * ring_scale + i * wcross_blur) + '0 0.5 0' * (wcross_size_y * ring_scale + j * wcross_blur)), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
- drawpic(wcross_origin - ('0.5 0 0' * (wcross_size_x + i * wcross_blur) + '0 0.5 0' * (wcross_size_y + j * wcross_blur)), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
- }
+ CROSSHAIR_DO_BLUR(CROSSHAIR_DRAW_RING, 0, 0);
}
+
+ if(time < wcross_name_changedonetime && wcross_name != wcross_name_goal_prev_prev && wcross_name_goal_prev_prev)
+ {
+ f = (wcross_name_changedonetime - time) / (wcross_name_changedonetime - wcross_name_changestarttime);
+ CROSSHAIR_DRAW(wcross_name_goal_prev_prev, wcross_alpha * f * wcross_name_alpha_goal_prev_prev);
+ f = 1 - f;
+ }
else
{
- if (bullets)
- drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x * ring_scale) - '0 0.5 0' * (wcross_size_y * ring_scale), strcat("gfx/hud/rifle_ring_", ftos(bullets)), wcross_size * ring_scale, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
- drawpic(wcross_origin - '0.5 0 0' * (wcross_size_x) - '0 0.5 0' * ( wcross_size_y), wcross_name, wcross_size, wcross_color, wcross_alpha, DRAWFLAG_NORMAL);
+ f = 1;
}
+ CROSSHAIR_DRAW(wcross_name, wcross_alpha * f);
+ wcross_name_alpha_goal_prev = f;
}
}
else
@@ -733,6 +771,17 @@
wcross_sizefloat_goal_prev = 0;
wcross_alpha_goal_prev = 0;
wcross_blur_goal_prev = 0;
+ wcross_changedonetime = 0;
+ if(wcross_name_goal_prev)
+ strunzone(wcross_name_goal_prev);
+ wcross_name_goal_prev = string_null;
+ if(wcross_name_goal_prev_prev)
+ strunzone(wcross_name_goal_prev_prev);
+ wcross_name_goal_prev_prev = string_null;
+ wcross_name_changestarttime = 0;
+ wcross_name_changedonetime = 0;
+ wcross_name_alpha_goal_prev = 0;
+ wcross_name_alpha_goal_prev_prev = 0;
}
}
More information about the nexuiz-commits
mailing list