From e7da614c0b48f1fb8c317d2b22274df0ece7d3d7 Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 28 Sep 2009 16:12:49 +0000 Subject: [PATCH] dtsnace based waypoint fading cvars git-svn-id: svn://svn.icculus.org/nexuiz/trunk@7981 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 5 ++- data/qcsrc/client/sbar.qc | 16 +++---- data/qcsrc/client/waypointsprites.qc | 65 ++++++++++++++++++---------- data/qcsrc/server/constants.qh | 2 +- 4 files changed, 54 insertions(+), 34 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index 432472613..1bac00dc7 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -26,7 +26,7 @@ if_dedicated alias if_client "" seta g_configversion 0 "Configuration file version (used to upgrade settings) 0: first run, or previous start was <2.4.1 Later, it's overridden by config.cfg, version ranges are defined in config_update.cfg" // default.cfg versioning (update using update-cvarcount.sh, run that every time after adding a new cvar) -set cvar_check_default 4bb48bd2d43bd891aa49d542abb24bf8 +set cvar_check_default 091f36c4fb0d7b22bbd2d2fdff8b1447 // Nexuiz version (formatted for machines) // used to determine if a client version is compatible @@ -1100,6 +1100,9 @@ seta g_waypointsprite_edgefadedistance 50 "distance in virtual pixels from edge seta g_waypointsprite_crosshairfadealpha 0.25 "alpha multiplier near crosshair" seta g_waypointsprite_crosshairfadescale 1 "scale multiplier near the crosshair" seta g_waypointsprite_crosshairfadedistance 150 "distance in virtual pixels from crosshair where to start fading" +seta g_waypointsprite_distancefadealpha 1 "alpha multiplier near distance" +seta g_waypointsprite_distancefadescale 0.7 "scale multiplier near the distance" +seta g_waypointsprite_distancefadedistancemultiplier 0.5 "distance in map sizes from distance where to stop fading" alias "g_waypointsprite_personal" "impulse 30" alias "g_waypointsprite_personal_p" "impulse 31" alias "g_waypointsprite_personal_d" "impulse 32" diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index f7aa0dbda..30cef8b50 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -2640,7 +2640,7 @@ float redflag_prevstatus, blueflag_prevstatus; // previous status, not = 0 float redflag_statuschange_time, blueflag_statuschange_time; // time when the status changed void CSQC_ctf_hud(void) { - vector bottomleft, redflag_pos, blueflag_pos, size; + vector bottomleft, redflag_pos, blueflag_pos, sz; bottomleft_x = 0; bottomleft_y = vid_conheight; bottomleft_z = 0; @@ -2712,28 +2712,28 @@ void CSQC_ctf_hud(void) redflag_pos = bottomleft - '-62 50 0'; } - size = '52 52 0'; + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL, + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL, + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL); + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL, + 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, size, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL, + drawpic_expanding_two(blueflag_pos, blue_icon, sz, '1 1 1', sbar_alpha_fg, DRAWFLAG_NORMAL, bound(0, blueflag_statuschange_elapsedtime*2, 1)); } } diff --git a/data/qcsrc/client/waypointsprites.qc b/data/qcsrc/client/waypointsprites.qc index b40e18131..78f0062f2 100644 --- a/data/qcsrc/client/waypointsprites.qc +++ b/data/qcsrc/client/waypointsprites.qc @@ -6,6 +6,15 @@ float waypointsprite_minalpha; float waypointsprite_distancealphaexponent; float waypointsprite_timealphaexponent; float waypointsprite_scale; +float waypointsprite_edgefadealpha; +float waypointsprite_edgefadescale; +float waypointsprite_edgefadedistance; +float waypointsprite_crosshairfadealpha; +float waypointsprite_crosshairfadescale; +float waypointsprite_crosshairfadedistance; +float waypointsprite_distancefadealpha; +float waypointsprite_distancefadescale; +float waypointsprite_distancefadedistance; .float rule; .string netname; // primary picture @@ -24,10 +33,10 @@ float waypointsprite_scale; vector SPRITE_SIZE = '288 36 0'; vector SPRITE_HOTSPOT = '144 36 0'; -float SPRITE_HEALTHBAR_WIDTH = 96; -float SPRITE_HEALTHBAR_HEIGHT = 6; -float SPRITE_HEALTHBAR_MARGIN = 4; -float SPRITE_HEALTHBAR_BORDER = 1; +float SPRITE_HEALTHBAR_WIDTH = 144; +float SPRITE_HEALTHBAR_HEIGHT = 9; +float SPRITE_HEALTHBAR_MARGIN = 6; +float SPRITE_HEALTHBAR_BORDER = 2; float SPRITE_HEALTHBAR_BORDERALPHA = 1; float SPRITE_HEALTHBAR_HEALTHALPHA = 0.5; @@ -239,25 +248,26 @@ void Draw_WaypointSprite() else spriteimage = strcat("models/sprites/", spriteimage, "_frame", ftos(mod(floor((max(0, time - self.spawntime)) * 2), t))); - float edgefadealpha = cvar("g_waypointsprite_edgefadealpha"); - float edgefadescale = cvar("g_waypointsprite_edgefadescale"); - float edgefadedistance = cvar("g_waypointsprite_edgefadedistance"); - float edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y); + float edgedistance_min, crosshairdistance; + edgedistance_min = min4(o_y, o_x,vid_conwidth - o_x, vid_conheight - o_y); - float crosshairfadealpha = cvar("g_waypointsprite_crosshairfadealpha"); - float crosshairfadescale = cvar("g_waypointsprite_crosshairfadescale"); - float crosshairfadedistance = cvar("g_waypointsprite_crosshairfadedistance"); - float crosshairdistance; // current distance from waypoint to crosshair crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) ); - if (edgedistance_min < edgefadedistance) { - a = a * bound(edgefadealpha, edgedistance_min/edgefadedistance, 1); - vidscale = vidscale * bound(edgefadescale, edgedistance_min/edgefadedistance, 1); - } else if (crosshairdistance < crosshairfadedistance) { - a = a * bound(crosshairfadealpha, crosshairdistance/crosshairfadedistance, 1); - vidscale = vidscale * bound(crosshairfadescale, crosshairdistance/crosshairfadedistance, 1); + t = waypointsprite_scale * vidscale; + + { + a = a * (1 - (1 - waypointsprite_distancefadealpha) * (bound(0, dist/waypointsprite_distancefadedistance, 1))); + t = t * (1 - (1 - waypointsprite_distancefadescale) * (bound(0, dist/waypointsprite_distancefadedistance, 1))); + } + if (edgedistance_min < waypointsprite_edgefadedistance) { + a = a * (1 - (1 - waypointsprite_edgefadealpha) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1))); + t = t * (1 - (1 - waypointsprite_edgefadescale) * (1 - bound(0, edgedistance_min/waypointsprite_edgefadedistance, 1))); + } + if(crosshairdistance < waypointsprite_crosshairfadedistance) { + a = a * (1 - (1 - waypointsprite_crosshairfadealpha) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1))); + t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1))); } - drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, '1 1 1', a, DRAWFLAG_MIPMAP); + drawrotpic(o, rot * 90 * DEG2RAD, spriteimage, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, '1 1 1', a, DRAWFLAG_MIPMAP); if(self.build_finished) { @@ -281,7 +291,7 @@ void Draw_WaypointSprite() align = 0.5; else align = 0; - drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * waypointsprite_scale * vidscale, SPRITE_HOTSPOT * waypointsprite_scale * vidscale, SPRITE_HEALTHBAR_WIDTH, SPRITE_HEALTHBAR_HEIGHT, SPRITE_HEALTHBAR_MARGIN, SPRITE_HEALTHBAR_BORDER, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL); + drawhealthbar(o, rot * 90 * DEG2RAD, self.health, SPRITE_SIZE * t, SPRITE_HOTSPOT * t, SPRITE_HEALTHBAR_WIDTH * t, SPRITE_HEALTHBAR_HEIGHT * t, SPRITE_HEALTHBAR_MARGIN * t, SPRITE_HEALTHBAR_BORDER * t, align, self.teamradar_color, a * SPRITE_HEALTHBAR_BORDERALPHA, self.teamradar_color, a * SPRITE_HEALTHBAR_HEALTHALPHA, DRAWFLAG_NORMAL); } } @@ -397,15 +407,22 @@ void Ent_WaypointSprite() void WaypointSprite_Load() { - waypointsprite_fadedistance = vlen(world.maxs - world.mins); + waypointsprite_fadedistance = vlen(mi_max - mi_min); waypointsprite_normdistance = cvar("g_waypointsprite_normdistance"); waypointsprite_minscale = cvar("g_waypointsprite_minscale"); waypointsprite_minalpha = cvar("g_waypointsprite_minalpha"); waypointsprite_distancealphaexponent = cvar("g_waypointsprite_distancealphaexponent"); waypointsprite_timealphaexponent = cvar("g_waypointsprite_timealphaexponent"); - waypointsprite_scale = cvar("g_waypointsprite_scale") * (1 - cvar("_menu_alpha")); - if(!waypointsprite_scale) - waypointsprite_scale = 1.0 * (1 - cvar("_menu_alpha")); + waypointsprite_scale = cvar_or("g_waypointsprite_scale", 1) * (1 - cvar("_menu_alpha")); + waypointsprite_edgefadealpha = cvar_or("g_waypointsprite_edgefadealpha", 1); + waypointsprite_edgefadescale = cvar_or("g_waypointsprite_edgefadescale", 1); + waypointsprite_edgefadedistance = cvar("g_waypointsprite_edgefadedistance"); + waypointsprite_crosshairfadealpha = cvar_or("g_waypointsprite_crosshairfadealpha", 1); + waypointsprite_crosshairfadescale = cvar_or("g_waypointsprite_crosshairfadescale", 1); + waypointsprite_crosshairfadedistance = cvar("g_waypointsprite_crosshairfadedistance"); + waypointsprite_distancefadealpha = cvar_or("g_waypointsprite_distancefadealpha", 1); + waypointsprite_distancefadescale = cvar_or("g_waypointsprite_distancefadescale", 1); + waypointsprite_distancefadedistance = vlen(mi_max - mi_min) * cvar_or("g_waypointsprite_distancefadedistancemultiplier", 1); if(!waypointsprite_initialized) { diff --git a/data/qcsrc/server/constants.qh b/data/qcsrc/server/constants.qh index 8a842ebf0..b01af9229 100644 --- a/data/qcsrc/server/constants.qh +++ b/data/qcsrc/server/constants.qh @@ -1,4 +1,4 @@ -string CVAR_CHECK_DEFAULT = "4bb48bd2d43bd891aa49d542abb24bf8"; +string CVAR_CHECK_DEFAULT = "091f36c4fb0d7b22bbd2d2fdff8b1447"; string CVAR_CHECK_BALANCE = "9b590c8f7c3065d917ac8e2e5e842a88"; float FALSE = 0; -- 2.39.2