X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;h=24c9658abe157307759100f1313836ef9e851399;hb=1a7060a3aac3e05b5f81d86215daa20ea75ca179;hp=7d44d7726b01304ef0f9858d079f08f7110ea2de;hpb=315ab0f2f959b04e5a10f2d98ab95656eab74ee3;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 7d44d7726..24c9658ab 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -142,16 +142,16 @@ float stringwidth_nocolors(string s, vector theSize) return stringwidth(s, FALSE, theSize); } -void drawstringright(vector position, string text, vector scale, vector rgb, float theAlpha, float flag) +void drawstringright(vector position, string text, vector theScale, vector rgb, float theAlpha, float flag) { - position_x -= 2 / 3 * strlen(text) * scale_x; - drawstring(position, text, scale, rgb, theAlpha, flag); + position_x -= 2 / 3 * strlen(text) * theScale_x; + drawstring(position, text, theScale, rgb, theAlpha, flag); } -void drawstringcenter(vector position, string text, vector scale, vector rgb, float theAlpha, float flag) +void drawstringcenter(vector position, string text, vector theScale, vector rgb, float theAlpha, float flag) { - position_x = 0.5 * (vid_conwidth - 0.6025 * strlen(text) * scale_x); - drawstring(position, text, scale, rgb, theAlpha, flag); + position_x = 0.5 * (vid_conwidth - 0.6025 * strlen(text) * theScale_x); + drawstring(position, text, theScale, rgb, theAlpha, flag); } // return the string of the onscreen race timer @@ -242,7 +242,7 @@ float GetPlayerColorForce(float i) float GetPlayerColor(float i) { - if not(playerslots[i].gotscores) // unconnected + if(!playerslots[i].gotscores) // unconnected return NUM_SPECTATOR; else if(stof(getplayerkeyvalue(i, "frags")) == FRAGS_SPECTATOR) return NUM_SPECTATOR; @@ -264,7 +264,7 @@ HUD panels // draw the background/borders #define HUD_Panel_DrawBg(theAlpha)\ -if(panel_bg != "0")\ +if(panel_bg != "0" && panel_bg != "")\ draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, panel_bg, panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha * theAlpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER)) //basically the same code of draw_ButtonPicture and draw_VertButtonPicture for the menu @@ -421,13 +421,13 @@ float GetAmmoStat(float i) } } -float GetAmmoTypeForWep(float i) +float GetAmmoTypeForWep(float i) // WEAPONTODO { switch(i) { - case WEP_SHOTGUN: return 0; + case WEP_SHOCKWAVE: return 0; case WEP_UZI: return 1; - case WEP_GRENADE_LAUNCHER: return 2; + case WEP_MORTAR: return 2; case WEP_MINE_LAYER: return 2; case WEP_ELECTRO: return 3; case WEP_CRYLINK: return 3; @@ -436,7 +436,7 @@ float GetAmmoTypeForWep(float i) case WEP_NEX: return 3; case WEP_RIFLE: return 1; case WEP_HAGAR: return 2; - case WEP_ROCKET_LAUNCHER: return 2; + case WEP_DEVASTATOR: return 2; case WEP_SEEKER: return 2; case WEP_FIREBALL: return 4; case WEP_HOOK: return 3; @@ -447,8 +447,7 @@ float GetAmmoTypeForWep(float i) void HUD_Weapons(void) { // declarations - WEPSET_DECLARE_A(weapons_stat); - WEPSET_COPY_AS(weapons_stat); + WepSet weapons_stat = WepSet_GetFromStat(); float i, f, a; float screen_ar, center_x = 0, center_y; float weapon_count, weapon_id; @@ -487,11 +486,9 @@ void HUD_Weapons(void) return; } } - else - hud_configure_active_panel = HUD_PANEL_WEAPONS; // update generic hud functions - HUD_Panel_UpdateCvars(weapons); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -534,9 +531,9 @@ void HUD_Weapons(void) { if(autocvar__hud_configure) { - if (WEPSET_EMPTY_A(weapons_stat)) + if (!weapons_stat) for(i = WEP_FIRST; i <= WEP_LAST; i += floor((WEP_LAST-WEP_FIRST)/5)) - WEPSET_OR_AW(weapons_stat, i); + weapons_stat |= WepSet_FromWeapon(i); if(menu_enabled != 2) HUD_Panel_DrawBg(1); // also draw the bg of the entire panel @@ -545,7 +542,7 @@ void HUD_Weapons(void) // do we own this weapon? weapon_count = 0; for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i) - if(WEPSET_CONTAINS_AW(weapons_stat, weaponorder[i].weapon)) + if(weapons_stat & WepSet_FromWeapon(weaponorder[i].weapon)) ++weapon_count; // add it anyway if weaponcomplain is shown @@ -737,12 +734,12 @@ void HUD_Weapons(void) // skip this weapon if we don't own it (and onlyowned is enabled)-- or if weapons_complainbubble is showing for this weapon if(autocvar_hud_panel_weapons_onlyowned) - if not(WEPSET_CONTAINS_AW(weapons_stat, self.weapon) || (self.weapon == complain_weapon)) + if (!((weapons_stat & WepSet_FromWeapon(self.weapon)) || (self.weapon == complain_weapon))) continue; // figure out the drawing position of weapon - weapon_pos = (panel_pos - + eX * column * weapon_size_x + weapon_pos = (panel_pos + + eX * column * weapon_size_x + eY * row * weapon_size_y); // draw background behind currently selected weapon @@ -761,7 +758,7 @@ void HUD_Weapons(void) } // drawing all the weapon items - if(WEPSET_CONTAINS_AW(weapons_stat, self.weapon)) + if(weapons_stat & WepSet_FromWeapon(self.weapon)) { // draw the weapon image drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); @@ -786,7 +783,7 @@ void HUD_Weapons(void) } // draw ammo status bar - if(autocvar_hud_panel_weapons_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_LASER && self.weapon != WEP_PORTO) + if(autocvar_hud_panel_weapons_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_BLASTER && self.weapon != WEP_PORTO) // WEAPONTODO: detect weapons which don't have ammo automatically { a = 0; ammo_type = GetAmmoTypeForWep(self.weapon); @@ -950,10 +947,8 @@ void HUD_Ammo(void) if(!autocvar_hud_panel_ammo) return; if(spectatee_status == -1) return; } - else - hud_configure_active_panel = HUD_PANEL_AMMO; - HUD_Panel_UpdateCvars(ammo); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1138,7 +1133,7 @@ void HUD_Powerups(void) { if(!autocvar_hud_panel_powerups) return; if(spectatee_status == -1) return; - if not(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON)) return; + if(!(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON))) return; if (getstati(STAT_HEALTH) <= 0) return; strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99); @@ -1154,14 +1149,12 @@ void HUD_Powerups(void) } else { - hud_configure_active_panel = HUD_PANEL_POWERUPS; - strength_time = 15; shield_time = 27; superweapons_time = 13; } - HUD_Panel_UpdateCvars(powerups); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1397,14 +1390,12 @@ void HUD_HealthArmor(void) } else { - hud_configure_active_panel = HUD_PANEL_HEALTHARMOR; - health = 150; armor = 75; fuel = 20; } - HUD_Panel_UpdateCvars(healtharmor); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -1425,7 +1416,7 @@ void HUD_HealthArmor(void) if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display { vector v; - v = healtharmor_maxdamage(health, armor, armorblockpercent); + v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON); float x; x = floor(v_x + 1); @@ -1552,7 +1543,7 @@ void HUD_HealthArmor(void) { float BLINK_FACTOR = 0.15; float BLINK_BASE = 0.85; - float BLINK_FREQ = 9; + float BLINK_FREQ = 9; pain_health_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); } } @@ -1656,10 +1647,8 @@ void HUD_Notify(void) { if(!autocvar_hud_panel_notify) return; } - else - hud_configure_active_panel = HUD_PANEL_NOTIFY; - HUD_Panel_UpdateCvars(notify); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -1675,7 +1664,7 @@ void HUD_Notify(void) float entries, height; entries = bound(1, floor(KN_MAX_ENTRIES * mySize_y/mySize_x), KN_MAX_ENTRIES); height = mySize_y/entries; - + vector fontsize; float fontheight = height * autocvar_hud_panel_notify_fontsize; fontsize = '0.5 0.5 0' * fontheight; @@ -1737,7 +1726,7 @@ void HUD_Notify(void) { break; } - + attacker = notify_attackers[j]; victim = notify_victims[j]; icon = notify_icon[j]; @@ -1795,10 +1784,8 @@ void HUD_Timer(void) { if(!autocvar_hud_panel_timer) return; } - else - hud_configure_active_panel = HUD_PANEL_TIMER; - HUD_Panel_UpdateCvars(timer); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -1865,12 +1852,10 @@ void HUD_Radar(void) if (autocvar_hud_panel_radar != 2 && !teamplay) return; } } - else - hud_configure_active_panel = HUD_PANEL_RADAR; - HUD_Panel_UpdateCvars(radar); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); - + float f = 0; if (hud_panel_radar_maximized && !autocvar__hud_configure) @@ -1880,10 +1865,10 @@ void HUD_Radar(void) panel_size_y = bound(0.2, panel_size_y, 1) * vid_conheight; panel_pos_x = (vid_conwidth - panel_size_x) / 2; panel_pos_y = (vid_conheight - panel_size_y) / 2; - + panel_bg = strcat(hud_skin_path, "/border_default"); // always use the default border when maximized if(precache_pic(panel_bg) == "") { panel_bg = "gfx/hud/default/border_default"; } // fallback - + switch(hud_panel_radar_maximized_zoommode) { default: @@ -1900,7 +1885,7 @@ void HUD_Radar(void) f = 1; break; } - + switch(hud_panel_radar_maximized_rotation) { case 0: @@ -1929,7 +1914,7 @@ void HUD_Radar(void) f = 1; break; } - + switch(hud_panel_radar_rotation) { case 0: @@ -2159,10 +2144,8 @@ void HUD_Score(void) if(!autocvar_hud_panel_score) return; if(spectatee_status == -1 && (gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; } - else - hud_configure_active_panel = HUD_PANEL_SCORE; - HUD_Panel_UpdateCvars(score); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -2314,7 +2297,7 @@ void HUD_Score(void) score = tm.(teamscores[ts_primary]); if(autocvar__hud_configure) score = 123; - + if (score > max_fragcount) max_fragcount = score; @@ -2356,10 +2339,8 @@ void HUD_RaceTimer (void) if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; if(spectatee_status == -1) return; } - else - hud_configure_active_panel = HUD_PANEL_RACETIMER; - HUD_Panel_UpdateCvars(racetimer); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -2508,7 +2489,7 @@ float vote_prev; // previous state of vote_active to check for a change float vote_alpha; float vote_change; // "time" when vote_active changed -void HUD_VoteWindow(void) +void HUD_Vote(void) { if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS))) { @@ -2540,8 +2521,6 @@ void HUD_VoteWindow(void) } else { - hud_configure_active_panel = HUD_PANEL_VOTE; - vote_yescount = 3; vote_nocount = 2; vote_needed = 4; @@ -2562,7 +2541,7 @@ void HUD_VoteWindow(void) if(!vote_alpha) return; - HUD_Panel_UpdateCvars(vote); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); if(uid2name_dialog) @@ -2773,7 +2752,7 @@ void HUD_Mod_CTF(vector pos, vector mySize) stat_items = getstati(STAT_ITEMS, 0, 24); redflag = (stat_items/IT_RED_FLAG_TAKEN) & 3; blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3; - + if(redflag || blueflag) mod_active = 1; else @@ -3050,29 +3029,29 @@ void HUD_Mod_KH(vector pos, vector mySize) float kaball_prevstatus; // last remembered status float kaball_statuschange_time; // time when the status changed -// we don't need to reset for keepaway since it immediately +// we don't need to reset for keepaway since it immediately // autocorrects prevstatus as to if the player has the ball or not void HUD_Mod_Keepaway(vector pos, vector mySize) { mod_active = 1; // keepaway should always show the mod HUD - + float BLINK_FACTOR = 0.15; float BLINK_BASE = 0.85; - float BLINK_FREQ = 5; + float BLINK_FREQ = 5; float kaball_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); - + float stat_items = getstati(STAT_ITEMS, 0, 24); float kaball = (stat_items/IT_KEY1) & 1; - + if(kaball != kaball_prevstatus) { kaball_statuschange_time = time; kaball_prevstatus = kaball; } - + vector kaball_pos, kaball_size; - + if(mySize_x > mySize_y) { kaball_pos = pos + eX * 0.25 * mySize_x; kaball_size = eX * 0.5 * mySize_x + eY * mySize_y; @@ -3080,13 +3059,13 @@ void HUD_Mod_Keepaway(vector pos, vector mySize) kaball_pos = pos + eY * 0.25 * mySize_y; kaball_size = eY * 0.5 * mySize_y + eX * mySize_x; } - + float kaball_statuschange_elapsedtime = time - kaball_statuschange_time; float f = bound(0, kaball_statuschange_elapsedtime*2, 1); - + if(kaball_prevstatus && f < 1) drawpic_aspect_skin_expanding(kaball_pos, "keepawayball_carrying", kaball_size, '1 1 1', panel_fg_alpha * kaball_alpha, DRAWFLAG_NORMAL, f); - + if(kaball) drawpic_aspect_skin(pos, "keepawayball_carrying", eX * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha * kaball_alpha * f, DRAWFLAG_NORMAL); } @@ -3144,7 +3123,7 @@ void HUD_Mod_Race(vector pos, vector mySize) float f; // yet another function has this score = me.(scores[ps_primary]); - if not((scores_flags[ps_primary] & SFL_TIME) && !teamplay) // race/cts record display on HUD + if(!(scores_flags[ps_primary] & SFL_TIME) || teamplay) // race/cts record display on HUD return; // no records in the actual race // clientside personal record @@ -3160,7 +3139,7 @@ void HUD_Mod_Race(vector pos, vector mySize) if(autocvar_cl_autodemo_delete_keeprecords) { f = autocvar_cl_autodemo_delete; - f &~= 1; + f &= ~1; cvar_set("cl_autodemo_delete", ftos(f)); // don't delete demo with new record! } } @@ -3388,10 +3367,8 @@ void HUD_ModIcons(void) if(!autocvar_hud_panel_modicons) return; if (gametype != MAPINFO_TYPE_CTF && gametype != MAPINFO_TYPE_KEYHUNT && gametype != MAPINFO_TYPE_NEXBALL && gametype != MAPINFO_TYPE_CTS && gametype != MAPINFO_TYPE_RACE && gametype != MAPINFO_TYPE_CA && gametype != MAPINFO_TYPE_FREEZETAG && gametype != MAPINFO_TYPE_KEEPAWAY && gametype != MAPINFO_TYPE_DOMINATION) return; } - else - hud_configure_active_panel = HUD_PANEL_MODICONS; - HUD_Panel_UpdateCvars(modicons); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -3440,18 +3417,15 @@ void HUD_ModIcons(void) // Draw pressed keys (#11) // -void HUD_DrawPressedKeys(void) +void HUD_PressedKeys(void) { if(!autocvar__hud_configure) { if(!autocvar_hud_panel_pressedkeys) return; if(spectatee_status <= 0 && autocvar_hud_panel_pressedkeys < 2) return; } - else - hud_configure_active_panel = HUD_PANEL_PRESSEDKEYS; - - HUD_Panel_UpdateCvars(pressedkeys); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3522,10 +3496,8 @@ void HUD_Chat(void) if(autocvar__con_chat_maximized) if(!hud_draw_maximized) return; } - else - hud_configure_active_panel = HUD_PANEL_CHAT; - HUD_Panel_UpdateCvars(chat); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized @@ -3598,10 +3570,8 @@ void HUD_EngineInfo(void) { if(!autocvar_hud_panel_engineinfo) return; } - else - hud_configure_active_panel = HUD_PANEL_ENGINEINFO; - HUD_Panel_UpdateCvars(engineinfo); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3621,7 +3591,7 @@ void HUD_EngineInfo(void) frametimeavg = (frametimeavg + frametimeavg1 + frametimeavg2 + currentframetime)/4; // average three frametimes into framecounter for slightly more stable fps readings :P frametimeavg2 = frametimeavg1; frametimeavg1 = frametimeavg; - + float weight; weight = cvar("hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight"); if(currentframetime > 0.0001) // filter out insane values which sometimes seem to occur and throw off the average? If you are getting 10,000 fps or more, then you don't need a framerate counter. @@ -3661,10 +3631,8 @@ void HUD_InfoMessages(void) { if(!autocvar_hud_panel_infomessages) return; } - else - hud_configure_active_panel = HUD_PANEL_INFOMESSAGES; - HUD_Panel_UpdateCvars(infomessages); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); vector pos, mySize; pos = panel_pos; @@ -3701,7 +3669,7 @@ void HUD_InfoMessages(void) vector fontsize; fontsize = '0.20 0.20 0' * mySize_y; - + float a; a = panel_fg_alpha; @@ -3724,7 +3692,7 @@ void HUD_InfoMessages(void) if(spectatee_status == -1) s = sprintf(_("^1Press ^3%s^1 to spectate"), getcommandkey("primary fire", "+fire")); else - s = sprintf(_("^1Press ^3%s^1 for another player"), getcommandkey("primary fire", "+fire")); + s = sprintf(_("^1Press ^3%s^1 or ^3%s^1 for next or previous player"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev")); drawInfoMessage(s) if(spectatee_status == -1) @@ -3736,9 +3704,7 @@ void HUD_InfoMessages(void) s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info")); drawInfoMessage(s) - if(gametype == MAPINFO_TYPE_ARENA) - s = _("^1Wait for your turn to join"); - else if(gametype == MAPINFO_TYPE_LMS) + if(gametype == MAPINFO_TYPE_LMS) { entity sk; sk = playerslots[player_localnum]; @@ -3827,7 +3793,7 @@ void HUD_InfoMessages(void) } } } - else + else { s = _("^7Press ^3ESC ^7to show HUD options."); drawInfoMessage(s) @@ -3852,10 +3818,8 @@ void HUD_Physics(void) if(spectatee_status == -1 && (autocvar_hud_panel_physics == 1 || autocvar_hud_panel_physics == 3)) return; if(autocvar_hud_panel_physics == 3 && !(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; } - else - hud_configure_active_panel = HUD_PANEL_PHYSICS; - HUD_Panel_UpdateCvars(physics); + HUD_Panel_UpdateCvars(); HUD_Panel_ApplyFadeAlpha(); draw_beginBoldFont(); @@ -3905,7 +3869,7 @@ void HUD_Physics(void) conversion_factor = 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h break; } - + vector vel = (csqcplayer ? csqcplayer.velocity : pmove_vel); float max_speed = floor( autocvar_hud_panel_physics_speed_max * conversion_factor + 0.5 ); @@ -3928,9 +3892,9 @@ void HUD_Physics(void) acceleration = (vlen(vel) - vlen(acc_prevspeed)); else acceleration = (vlen(vel - '0 0 1' * vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)); - + acceleration = acceleration * (1 / max(0.0001, f)) * (0.0254 / 9.80665); - + acc_prevspeed = vel; acc_prevtime = time; @@ -4235,8 +4199,6 @@ void HUD_CenterPrint (void) } else { - hud_configure_active_panel = HUD_PANEL_CENTERPRINT; - if (!hud_configure_prev) reset_centerprint_messages(); if (time > hud_configure_cp_generation_time) @@ -4244,7 +4206,7 @@ void HUD_CenterPrint (void) float r; r = random(); if (r > 0.9) - centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: %d"), 1, 10); + centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: ^COUNT"), 1, 10); else if (r > 0.8) centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0); else @@ -4253,7 +4215,7 @@ void HUD_CenterPrint (void) } } - HUD_Panel_UpdateCvars(centerprint); + HUD_Panel_UpdateCvars(); // this panel doesn't fade when showing the scoreboard if(autocvar__menu_alpha) @@ -4265,9 +4227,9 @@ void HUD_CenterPrint (void) if (scoreboard_bottom >= 0.96 * vid_conheight) return; vector target_pos; - + target_pos = eY * scoreboard_bottom + eX * 0.5 * (vid_conwidth - panel_size_x); - + if(target_pos_y > panel_pos_y) { panel_pos = panel_pos + (target_pos - panel_pos) * sqrt(scoreboard_fade_alpha); @@ -4324,7 +4286,7 @@ void HUD_CenterPrint (void) } - // fade the centerprint_hud in/out + // fade the centerprint_hud in/out if(centerprint_time[j] < 0) a = bound(0, (time - centerprint_expire_time[j]) / max(0.0001, autocvar_hud_panel_centerprint_fade_in), 1); else if(centerprint_expire_time[j] - autocvar_hud_panel_centerprint_fade_out > time) @@ -4333,21 +4295,21 @@ void HUD_CenterPrint (void) a = (centerprint_expire_time[j] - time) / max(0.0001, autocvar_hud_panel_centerprint_fade_out); else a = 0; - + // set the size from fading in/out before subsequent fading - sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize); - + sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize); + // also fade it based on positioning if(autocvar_hud_panel_centerprint_fade_subsequent) { a = a * bound(autocvar_hud_panel_centerprint_fade_subsequent_passone_minalpha, (1 - (g / max(1, autocvar_hud_panel_centerprint_fade_subsequent_passone))), 1); // pass one: all messages after the first have half theAlpha a = a * bound(autocvar_hud_panel_centerprint_fade_subsequent_passtwo_minalpha, (1 - (g / max(1, autocvar_hud_panel_centerprint_fade_subsequent_passtwo))), 1); // pass two: after that, gradually lower theAlpha even more for each message } - + // finally set the size based on the new theAlpha from subsequent fading - sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize)); + sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize)); drawfontscale = sz * '1 1 0'; - + if (centerprint_countdown_num[j]) n = tokenizebyseparator(strreplace("^COUNT", count_seconds(centerprint_countdown_num[j]), centerprint_messages[j]), "\n"); else @@ -4390,15 +4352,15 @@ void HUD_CenterPrint (void) } } - ++g; // move next position number up - + ++g; // move next position number up + msg_size = pos_y - msg_size; if (autocvar_hud_panel_centerprint_flip) { pos_y = current_msg_pos_y - CENTERPRINT_SPACING * fontsize_y; if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages pos_y += (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(sz)); - + if (pos_y < panel_pos_y) // check if the next message can be shown { drawfontscale = '1 1 0'; @@ -4410,7 +4372,7 @@ void HUD_CenterPrint (void) pos_y += CENTERPRINT_SPACING * fontsize_y; if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages pos_y -= (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(sz)); - + if(pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next message can be shown { drawfontscale = '1 1 0'; @@ -4441,44 +4403,6 @@ void HUD_Reset (void) HUD_Mod_CTF_Reset(); } -#define HUD_DrawPanel(id)\ -switch (id) {\ - case (HUD_PANEL_RADAR):\ - HUD_Radar(); break;\ - case (HUD_PANEL_WEAPONS):\ - HUD_Weapons(); break;\ - case (HUD_PANEL_AMMO):\ - HUD_Ammo(); break;\ - case (HUD_PANEL_POWERUPS):\ - HUD_Powerups(); break;\ - case (HUD_PANEL_HEALTHARMOR):\ - HUD_HealthArmor(); break;\ - case (HUD_PANEL_NOTIFY):\ - HUD_Notify(); break;\ - case (HUD_PANEL_TIMER):\ - HUD_Timer(); break;\ - case (HUD_PANEL_SCORE):\ - HUD_Score(); break;\ - case (HUD_PANEL_RACETIMER):\ - HUD_RaceTimer(); break;\ - case (HUD_PANEL_VOTE):\ - HUD_VoteWindow(); break;\ - case (HUD_PANEL_MODICONS):\ - HUD_ModIcons(); break;\ - case (HUD_PANEL_PRESSEDKEYS):\ - HUD_DrawPressedKeys(); break;\ - case (HUD_PANEL_CHAT):\ - HUD_Chat(); break;\ - case (HUD_PANEL_ENGINEINFO):\ - HUD_EngineInfo(); break;\ - case (HUD_PANEL_INFOMESSAGES):\ - HUD_InfoMessages(); break;\ - case (HUD_PANEL_PHYSICS):\ - HUD_Physics(); break;\ - case (HUD_PANEL_CENTERPRINT):\ - HUD_CenterPrint(); break;\ -} ENDS_WITH_CURLY_BRACE - void HUD_Main (void) { float i; @@ -4508,7 +4432,7 @@ void HUD_Main (void) // they must call HUD_Panel_ApplyFadeAlpha(); only when showing the menu if(scoreboard_fade_alpha == 1) { - HUD_CenterPrint(); + (panel = HUD_PANEL(CENTERPRINT)).panel_draw(); return; } @@ -4557,7 +4481,10 @@ void HUD_Main (void) vector color; float hud_dock_color_team = autocvar_hud_dock_color_team; if((teamplay) && hud_dock_color_team) { - color = colormapPaletteColor(myteam, 1) * hud_dock_color_team; + if(autocvar__hud_configure && myteam == NUM_SPECTATOR) + color = '1 0 0' * hud_dock_color_team; + else + color = myteamcolors * hud_dock_color_team; } else if(autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && hud_dock_color_team) { color = '1 0 0' * hud_dock_color_team; @@ -4632,34 +4559,38 @@ void HUD_Main (void) hud_draw_maximized = 0; // draw panels in order specified by panel_order array for(i = HUD_PANEL_NUM - 1; i >= 0; --i) - HUD_DrawPanel(panel_order[i]); + (panel = hud_panel[panel_order[i]]).panel_draw(); hud_draw_maximized = 1; // panels that may be maximized must check this var // draw maximized panels on top if(hud_panel_radar_maximized) - HUD_Radar(); + (panel = HUD_PANEL(RADAR)).panel_draw(); if(autocvar__con_chat_maximized) - HUD_Chat(); + (panel = HUD_PANEL(CHAT)).panel_draw(); if(autocvar__hud_configure) { - if(tab_panel != -1) + if(tab_panel) { - HUD_Panel_UpdatePosSizeForId(tab_panel) + panel = tab_panel; + HUD_Panel_UpdatePosSize() drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL); } - if(highlightedPanel != -1) + if(highlightedPanel) { - HUD_Panel_UpdatePosSizeForId(highlightedPanel); + panel = highlightedPanel; + HUD_Panel_UpdatePosSize() HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha)); } if(!hud_configure_prev || hud_configure_prev == -1) { if(autocvar_hud_cursormode) { setcursormode(1); } hudShiftState = 0; + for(i = HUD_PANEL_NUM - 1; i >= 0; --i) + hud_panel[panel_order[i]].update_time = time; } } - else if (hud_configure_prev && autocvar_hud_cursormode) + else if(hud_configure_prev && hud_configure_prev != -1 && autocvar_hud_cursormode) setcursormode(0); hud_configure_prev = autocvar__hud_configure;