]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Some major cleanup/organization of HUD weapons panel code, plus adjust the default...
authorSamual <samual@xonotic.org>
Sat, 24 Sep 2011 18:48:28 +0000 (14:48 -0400)
committerSamual <samual@xonotic.org>
Sat, 24 Sep 2011 18:48:28 +0000 (14:48 -0400)
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_old.cfg
hud_luminos_xhair_minimal.cfg
hud_nexuiz.cfg
qcsrc/client/hud.qc
qcsrc/client/hud_config.qc

index 0e4e4495b50bfe0a6433806b45f0e303655a38d8..b58306a34c6a83d5950d8de71e81baa6db856e53 100644 (file)
@@ -30,24 +30,26 @@ seta hud_configure_grid_xsize "0.010000"
 seta hud_configure_grid_ysize "0.010000"
 
 seta hud_panel_weapons 1
-seta hud_panel_weapons_pos "0.940000 0.180000"
-seta hud_panel_weapons_size "0.060000 0.610000"
+seta hud_panel_weapons_pos "0.930000 0.170000"
+seta hud_panel_weapons_size "0.070000 0.650000"
 seta hud_panel_weapons_bg "border_small_weapons"
 seta hud_panel_weapons_bg_color ""
 seta hud_panel_weapons_bg_color_team ""
 seta hud_panel_weapons_bg_alpha ""
 seta hud_panel_weapons_bg_border ""
-seta hud_panel_weapons_bg_padding ""
+seta hud_panel_weapons_bg_padding "4"
 seta hud_panel_weapons_complainbubble "1"
-seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_padding "2"
+seta hud_panel_weapons_complainbubble_time "4"
+seta hud_panel_weapons_complainbubble_fadetime "2"
 seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
 seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
 seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
 seta hud_panel_weapons_ammo_color "0 1 0"
 seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
-seta hud_panel_weapons_timeout "3"
-seta hud_panel_weapons_timeout_effect "2"
+seta hud_panel_weapons_timeout "5"
+seta hud_panel_weapons_timeout_effect "3"
 
 seta hud_panel_ammo 1
 seta hud_panel_ammo_pos "0.330000 0.960000"
@@ -156,7 +158,7 @@ seta hud_panel_racetimer_bg_padding ""
 seta hud_panel_vote 1
 seta hud_panel_vote_pos "0.710000 0.660000"
 seta hud_panel_vote_size "0.210000 0.100000"
-seta hud_panel_vote_bg "border_vote"
+seta hud_panel_vote_bg ""
 seta hud_panel_vote_bg_color ""
 seta hud_panel_vote_bg_color_team ""
 seta hud_panel_vote_bg_alpha ""
index 9d255bb4acba033271d12e8b6de8371f11149bee..9cc09a27b29ecc571a5e5ffb609e3ce05afb8e92 100644 (file)
@@ -40,6 +40,8 @@ seta hud_panel_weapons_bg_border ""
 seta hud_panel_weapons_bg_padding ""
 seta hud_panel_weapons_complainbubble "1"
 seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_time "1"
+seta hud_panel_weapons_complainbubble_fadetime "0.25"
 seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
 seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
 seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
index 4308c0b4feb4646b99d23bb8aeff667849e949fd..602510c165525168d08f3dbdcb4fa2e6807068aa 100644 (file)
@@ -40,6 +40,8 @@ seta hud_panel_weapons_bg_border ""
 seta hud_panel_weapons_bg_padding ""
 seta hud_panel_weapons_complainbubble "1"
 seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_time "1"
+seta hud_panel_weapons_complainbubble_fadetime "0.25"
 seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
 seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
 seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
index 2aca597f6ede5adac177fb42198977e504546f93..0e9938652e9699adcd3d3ccf1a6e785df8f573b1 100644 (file)
@@ -40,6 +40,8 @@ seta hud_panel_weapons_bg_border ""
 seta hud_panel_weapons_bg_padding ""
 seta hud_panel_weapons_complainbubble "1"
 seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_time "1"
+seta hud_panel_weapons_complainbubble_fadetime "0.25"
 seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
 seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
 seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
index 705af40a12ff230625c1ac3762524954050943aa..a7df28b14e533d3cd1b5ceec14f8e71c41e42ecd 100644 (file)
@@ -40,6 +40,8 @@ seta hud_panel_weapons_bg_border ""
 seta hud_panel_weapons_bg_padding "-5"
 seta hud_panel_weapons_complainbubble "1"
 seta hud_panel_weapons_complainbubble_padding "-10"
+seta hud_panel_weapons_complainbubble_time "1"
+seta hud_panel_weapons_complainbubble_fadetime "0.25"
 seta hud_panel_weapons_complainbubble_color_outofammo "0.8 0 0"
 seta hud_panel_weapons_complainbubble_color_donthave "0.8 0.5 0"
 seta hud_panel_weapons_complainbubble_color_unavailable "0 0.3 0.8"
index 043b5ea98a957b60fd2b32ae7a343b81773102ed..d2ed21eeb7dfd9deb7f867595e67e35c9df6caec 100644 (file)
@@ -431,40 +431,58 @@ float GetAmmoTypeForWep(float i)
 
 void HUD_Weapons(void)
 {
-       float i, f, screen_ar;
-       float center_x, center_y;
-    if(hud != HUD_NORMAL) return;
+       // declarations
+       float weapons_stat = getstati(STAT_WEAPONS); 
+       float i, f, a, j, factor;
+       float screen_ar, center_x, center_y; 
+       float weapon_count, weapon_id, weapon_alpha; 
+       float row, column, rows, columns; 
+       float aspect = autocvar_hud_panel_weapons_aspect;
+       
+       float show_accuracy, panel_weapon_accuracy;
+       
+       float timeout = autocvar_hud_panel_weapons_timeout;
+       float timein_effect_length = (autocvar_hud_panel_weapons_timeout_effect ? 0.375 : 0);
+       float timeout_effect_length = (autocvar_hud_panel_weapons_timeout_effect ? 0.75 : 0);
+       
+       float ammo_type, ammo_full, ammo_alpha;
+       float barsize_x, barsize_y, baroffset_x, baroffset_y;
+       
+       float when = autocvar_hud_panel_weapons_complainbubble_time;
+       float fadetime = autocvar_hud_panel_weapons_complainbubble_fadetime;
+       
+       vector weapon_pos, weapon_size;
+       vector old_panel_size;
+       vector color, ammo_color;
+       
+       // check to see if we want to continue
+  if(hud != HUD_NORMAL) { return; }
+  
        if(!autocvar__hud_configure)
-       {
-               if(!autocvar_hud_panel_weapons) return;
-               if(spectatee_status == -1) return;
-       }
+               if((!autocvar_hud_panel_weapons) || (spectatee_status == -1))
+                       return;
+               else if(timeout && time >= weapontime + timeout + timeout_effect_length)
+               {
+                       weaponprevtime = time;
+                       return;
+               }
        else
                hud_configure_active_panel = HUD_PANEL_WEAPONS;
 
-       float timeout = autocvar_hud_panel_weapons_timeout;
-       float timeout_effect_length, timein_effect_length;
-       if (autocvar_hud_panel_weapons_timeout_effect == 0)
+       // update generic hud functions
+       HUD_Panel_UpdateCvars(weapons);
+       HUD_Panel_ApplyFadeAlpha();
+       
+       // calculate fading effect to weapon images for when the panel is idle
+       if(autocvar_hud_panel_weapons_fade)
        {
-               timeout_effect_length = 0;
-               timein_effect_length = 0;
+               weapon_alpha = 3.2 - 2 * (time - weapontime);
+               weapon_alpha = bound(0.7, weapon_alpha, 1) * panel_fg_alpha;
        }
        else
-       {
-               timeout_effect_length = 0.75;
-               timein_effect_length = 0.375;
-       }
-
-       if (timeout && time >= weapontime + timeout + timeout_effect_length && !autocvar__hud_configure)
-       {
-               weaponprevtime = time;
-               return;
-       }
+               weapon_alpha = panel_fg_alpha;
 
-       HUD_Panel_UpdateCvars(weapons);
-       HUD_Panel_ApplyFadeAlpha();
-
-       // TODO make this configurable
+       // figure out weapon order (how the weapons are sorted) // TODO make this configurable
        if(weaponorder_bypriority != autocvar_cl_weaponpriority || !weaponorder[0])
        {
                float weapon_cnt;
@@ -493,33 +511,34 @@ void HUD_Weapons(void)
 
                weaponorder_cmp_str = string_null;
        }
-
-       float when, fadetime;
-       when = autocvar_hud_panel_weapons_complainbubble_time;
-       fadetime = autocvar_hud_panel_weapons_complainbubble_fadetime;
-       float weapons_st = getstati(STAT_WEAPONS);
-       float weapon_count;
+       
+       // determine which weapons are going to be shown
        if (autocvar_hud_panel_weapons_onlyowned)
        {
                if(autocvar__hud_configure)
                {
-                       if (weapons_st == 0)
+                       if (weapons_stat == 0) // create some fake weapons anyway
                                for(i = 0; i <= WEP_LAST-WEP_FIRST; i += floor((WEP_LAST-WEP_FIRST)/5))
-                                       weapons_st |= power2of(i);
+                                       weapons_stat |= power2of(i);
+                                       
                        if(menu_enabled != 2)
                                HUD_Panel_DrawBg(1); // also draw the bg of the entire panel
                }
-
-               vector old_panel_size;
+               
+               // do we own this weapon?
                for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i)
-               {
-                       if(weapons_st & weaponorder[i].weapons)
+                       if(weapons_stat & weaponorder[i].weapons)
                                ++weapon_count;
-               }
-               if(!autocvar__hud_configure && (autocvar_hud_panel_weapons_complainbubble && time - complain_weapon_time < when + fadetime))// && complain_weapon >= 0
-                       ++weapon_count;
-               if (weapon_count == 0)
-                       return;
+               
+               // add it anyway if weaponcomplain is shown
+               if((!autocvar__hud_configure) 
+                       && (autocvar_hud_panel_weapons_complainbubble 
+                               && time - complain_weapon_time < when + fadetime))
+                                       ++weapon_count;
+                       
+               // might as well commit suicide now, no reason to live ;)
+               if (weapon_count == 0) { return; }
+               
                // reduce size of the panel
                if (panel_size_y > panel_size_x)
                {
@@ -537,126 +556,107 @@ void HUD_Weapons(void)
        else
                weapon_count = WEP_COUNT;
 
-       if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
+       // animation for fading in/out the panel respectively when not in use
+       if(!autocvar__hud_configure)
        {
-               f = (time - (weapontime + timeout)) / timeout_effect_length;
-               if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3)
-               {
-                       panel_bg_alpha *= (1 - f);
-                       panel_fg_alpha *= (1 - f);
-               }
-               if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3)
+               if (timeout && time >= weapontime + timeout) // apply timeout effect if needed
                {
-                       f *= f; // for a cooler movement
-                       center_x = panel_pos_x + panel_size_x/2;
-                       center_y = panel_pos_y + panel_size_y/2;
-                       screen_ar = vid_conwidth/vid_conheight;
-                       if (center_x/center_y < screen_ar) //bottom left
+                       f = (time - (weapontime + timeout)) / timeout_effect_length;
+                       if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3)
                        {
-                               if ((vid_conwidth - center_x)/center_y < screen_ar) //bottom
-                                       panel_pos_y += f * (vid_conheight - panel_pos_y);
-                               else //left
-                                       panel_pos_x -= f * (panel_pos_x + panel_size_x);
+                               panel_bg_alpha *= (1 - f);
+                               panel_fg_alpha *= (1 - f);
                        }
-                       else //top right
+                       if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3)
                        {
-                               if ((vid_conwidth - center_x)/center_y < screen_ar) //right
-                                       panel_pos_x += f * (vid_conwidth - panel_pos_x);
-                               else //top
-                                       panel_pos_y -= f * (panel_pos_y + panel_size_y);
+                               f *= f; // for a cooler movement
+                               center_x = panel_pos_x + panel_size_x/2;
+                               center_y = panel_pos_y + panel_size_y/2;
+                               screen_ar = vid_conwidth/vid_conheight;
+                               if (center_x/center_y < screen_ar) //bottom left
+                               {
+                                       if ((vid_conwidth - center_x)/center_y < screen_ar) //bottom
+                                               panel_pos_y += f * (vid_conheight - panel_pos_y);
+                                       else //left
+                                               panel_pos_x -= f * (panel_pos_x + panel_size_x);
+                               }
+                               else //top right
+                               {
+                                       if ((vid_conwidth - center_x)/center_y < screen_ar) //right
+                                               panel_pos_x += f * (vid_conwidth - panel_pos_x);
+                                       else //top
+                                               panel_pos_y -= f * (panel_pos_y + panel_size_y);
+                               }
                        }
+                       weaponprevtime = time - (1 - f) * timein_effect_length;
                }
-               weaponprevtime = time - (1 - f) * timein_effect_length;
-       }
-       else if (timeout && time < weaponprevtime + timein_effect_length && !autocvar__hud_configure)
-       {
-               f = (time - weaponprevtime) / timein_effect_length;
-               if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3)
+               else if (timeout && time < weaponprevtime + timein_effect_length) // apply timein effect if needed
                {
-                       panel_bg_alpha *= (f);
-                       panel_fg_alpha *= (f);
-               }
-               if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3)
-               {
-                       f *= f; // for a cooler movement
-                       f = 1 - f;
-                       center_x = panel_pos_x + panel_size_x/2;
-                       center_y = panel_pos_y + panel_size_y/2;
-                       screen_ar = vid_conwidth/vid_conheight;
-                       if (center_x/center_y < screen_ar) //bottom left
+                       f = (time - weaponprevtime) / timein_effect_length;
+                       if (autocvar_hud_panel_weapons_timeout_effect == 1 || autocvar_hud_panel_weapons_timeout_effect == 3)
                        {
-                               if ((vid_conwidth - center_x)/center_y < screen_ar) //bottom
-                                       panel_pos_y += f * (vid_conheight - panel_pos_y);
-                               else //left
-                                       panel_pos_x -= f * (panel_pos_x + panel_size_x);
+                               panel_bg_alpha *= (f);
+                               panel_fg_alpha *= (f);
                        }
-                       else //top right
+                       if (autocvar_hud_panel_weapons_timeout_effect == 2 || autocvar_hud_panel_weapons_timeout_effect == 3)
                        {
-                               if ((vid_conwidth - center_x)/center_y < screen_ar) //right
-                                       panel_pos_x += f * (vid_conwidth - panel_pos_x);
-                               else //top
-                                       panel_pos_y -= f * (panel_pos_y + panel_size_y);
+                               f *= f; // for a cooler movement
+                               f = 1 - f;
+                               center_x = panel_pos_x + panel_size_x/2;
+                               center_y = panel_pos_y + panel_size_y/2;
+                               screen_ar = vid_conwidth/vid_conheight;
+                               if (center_x/center_y < screen_ar) //bottom left
+                               {
+                                       if ((vid_conwidth - center_x)/center_y < screen_ar) //bottom
+                                               panel_pos_y += f * (vid_conheight - panel_pos_y);
+                                       else //left
+                                               panel_pos_x -= f * (panel_pos_x + panel_size_x);
+                               }
+                               else //top right
+                               {
+                                       if ((vid_conwidth - center_x)/center_y < screen_ar) //right
+                                               panel_pos_x += f * (vid_conwidth - panel_pos_x);
+                                       else //top
+                                               panel_pos_y -= f * (panel_pos_y + panel_size_y);
+                               }
                        }
                }
        }
 
+       // draw the background, then change the virtual size of it to better fit other items inside 
        HUD_Panel_DrawBg(1);
        if(panel_bg_padding)
        {
                panel_pos += '1 1 0' * panel_bg_padding;
-               panel_size -= '2 2 0' * panel_bg_padding;
+               panel_size -= '1 1 0' * panel_bg_padding;
        }
 
-       float weapid, wpnalpha;
-
-       if(autocvar_hud_panel_weapons_fade)
-       {
-               wpnalpha = 3.2 - 2 * (time - weapontime);
-               wpnalpha = bound(0.7, wpnalpha, 1) * panel_fg_alpha;
-       }
-       else
-               wpnalpha = panel_fg_alpha;
-
-       float rows, columns;
-       float aspect = autocvar_hud_panel_weapons_aspect;
+       // after the sizing and animations are done, update the other values
        rows = panel_size_y/panel_size_x;
        rows = bound(1, floor((sqrt(4 * aspect * rows * weapon_count + rows * rows) + rows + 0.5) / 2), weapon_count);
-
        columns = ceil(weapon_count/rows);
-       float row, column;
-
-       float a, type, fullammo;
-
-       vector color;
-       vector wpnpos;
-       vector wpnsize;
-
-       vector ammo_color;
-       float ammo_alpha;
-       wpnsize = eX * panel_size_x*(1/columns) + eY * panel_size_y*(1/rows);
-       float barsize_x, barsize_y, baroffset_x, baroffset_y;
+       weapon_size = eX * panel_size_x*(1/columns) + eY * panel_size_y*(1/rows);
+       
+       // calculate position/size for visual bar displaying ammount of ammo status
        if (autocvar_hud_panel_weapons_ammo)
        {
                ammo_color = stov(autocvar_hud_panel_weapons_ammo_color);
                ammo_alpha = panel_fg_alpha * autocvar_hud_panel_weapons_ammo_alpha;
 
-
-               if(wpnsize_x/wpnsize_y > aspect)
+               if(weapon_size_x/weapon_size_y > aspect)
                {
-                       barsize_x = aspect * wpnsize_y;
-                       barsize_y = wpnsize_y;
-                       baroffset_x = (wpnsize_x - barsize_x) / 2;
+                       barsize_x = aspect * weapon_size_y;
+                       barsize_y = weapon_size_y;
+                       baroffset_x = (weapon_size_x - barsize_x) / 2;
                }
                else
                {
-                       barsize_y = 1/aspect * wpnsize_x;
-                       barsize_x = wpnsize_x;
-                       baroffset_y = (wpnsize_y - barsize_y) / 2;
+                       barsize_y = 1/aspect * weapon_size_x;
+                       barsize_x = weapon_size_x;
+                       baroffset_y = (weapon_size_y - barsize_y) / 2;
                }
        }
 
-       float show_accuracy;
-       float weapon_stats;
        if(autocvar_hud_panel_weapons_accuracy && acc_levels)
        {
                show_accuracy = true;
@@ -667,105 +667,117 @@ void HUD_Weapons(void)
 
        for(i = 0; i <= WEP_LAST-WEP_FIRST; ++i)
        {
+               // retrieve information about the current weapon to be drawn
                self = weaponorder[i];
-               if (!self || self.impulse < 0)
-                       continue;
-               if (autocvar_hud_panel_weapons_onlyowned)
-               if (!((weapons_st & self.weapons) || (self.weapon == complain_weapon && time - complain_weapon_time < when + fadetime && autocvar_hud_panel_weapons_complainbubble)))
-                       continue;
-               wpnpos = panel_pos + eX * column * wpnsize_x + eY * row * wpnsize_y;
-
-               weapid = self.impulse;
+               weapon_id = self.impulse;
+               
+               // skip if this weapon doesn't exist
+               if (!self || self.impulse < 0) { continue; }
+               
+               // 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
+                       && !((weapons_stat & self.weapons) 
+                       || (self.weapon == complain_weapon 
+                               && time - complain_weapon_time < when + fadetime 
+                               && autocvar_hud_panel_weapons_complainbubble)))
+                                       continue;
+                                       
+               // figure out the drawing position of weapon
+               weapon_pos = (panel_pos 
+                       + eX * column * weapon_size_x 
+                       + eY * row * weapon_size_y);
 
                // draw background behind currently selected weapon
                if(self.weapon == switchweapon)
-                       drawpic_aspect_skin(wpnpos, "weapon_current_bg", wpnsize, '1 1 1', wpnalpha, DRAWFLAG_NORMAL);
+                       drawpic_aspect_skin(weapon_pos, "weapon_current_bg", weapon_size, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL);
 
                // draw the weapon accuracy
                if(show_accuracy)
                {
-                       weapon_stats = weapon_accuracy[self.weapon-WEP_FIRST];
-                       if(weapon_stats >= 0)
+                       panel_weapon_accuracy = weapon_accuracy[self.weapon-WEP_FIRST];
+                       if(panel_weapon_accuracy >= 0)
                        {
-                               // find the max level lower than weapon_stats
-                               float j;
+                               // find the max level lower than weapon_accuracy
                                j = acc_levels-1;
-                               while ( j && weapon_stats < acc_lev[j] )
+                               while ( j && panel_weapon_accuracy < acc_lev[j] )
                                        --j;
 
-                               // inject color j+1 in color j, how much depending on how much weapon_stats is higher than level j
-                               float factor;
-                               factor = (weapon_stats - acc_lev[j]) / (acc_lev[j+1] - acc_lev[j]);
+                               // inject color j+1 in color j, how much depending on how much weapon_accuracy is higher than level j
+                               factor = (panel_weapon_accuracy - acc_lev[j]) / (acc_lev[j+1] - acc_lev[j]);
                                color = acc_col[j];
                                color = color + factor * (acc_col[j+1] - color);
 
-                               drawpic_aspect_skin(wpnpos, "weapon_accuracy", wpnsize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+                               drawpic_aspect_skin(weapon_pos, "weapon_accuracy", weapon_size, color, panel_fg_alpha, DRAWFLAG_NORMAL);
                        }
                }
 
-               // draw the weapon icon
-               if(weapons_st & self.weapons)
+               // drawing all the weapon items
+               if(weapons_stat & self.weapons)
                {
-                       drawpic_aspect_skin(wpnpos, strcat("weapon", self.netname), wpnsize, '1 1 1', wpnalpha, DRAWFLAG_NORMAL);
-
-                       if(autocvar_hud_panel_weapons_label == 1) // weapon number
-                               drawstring(wpnpos, ftos(weapid), '1 1 0' * 0.5 * wpnsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-                       else if(autocvar_hud_panel_weapons_label == 2) // bind
-                               drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * wpnsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                       // draw the weapon image
+                       drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL);
 
+                       // draw weapon label string
+                       switch(autocvar_hud_panel_weapons_label)
+                       {
+                               case 1: // weapon number
+                                       drawstring(weapon_pos, ftos(weapon_id), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                                       break;
+                                       
+                               case 2: // bind
+                                       drawstring(weapon_pos, getcommandkey(ftos(weapon_id), strcat("impulse ", ftos(weapon_id))), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                                       break;
+                                       
+                               case 3: // weapon name
+                                       drawstring(weapon_pos, self.netname, '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+                                       break;
+                                       
+                               default: // nothing
+                                       break;
+                       }
+                       
                        // draw ammo status bar
                        if(autocvar_hud_panel_weapons_ammo && self.weapon != WEP_TUBA && self.weapon != WEP_LASER && self.weapon != WEP_PORTO)
                        {
                                a = 0;
-                               type = GetAmmoTypeForWep(self.weapon);
-                               if(type != -1)
-                                       a = getstati(GetAmmoStat(type)); // how much ammo do we have?
+                               ammo_type = GetAmmoTypeForWep(self.weapon);
+                               if(ammo_type != -1)
+                                       a = getstati(GetAmmoStat(ammo_type)); // how much ammo do we have?
 
                                if(a > 0)
                                {
-                                       switch(type) {
-                                               case 0: fullammo = autocvar_hud_panel_weapons_ammo_full_shells; break;
-                                               case 1: fullammo = autocvar_hud_panel_weapons_ammo_full_nails; break;
-                                               case 2: fullammo = autocvar_hud_panel_weapons_ammo_full_rockets; break;
-                                               case 3: fullammo = autocvar_hud_panel_weapons_ammo_full_cells; break;
-                                               case 4: fullammo = autocvar_hud_panel_weapons_ammo_full_fuel; break;
-                                               default: fullammo = 60;
+                                       switch(ammo_type) {
+                                               case 0: ammo_full = autocvar_hud_panel_weapons_ammo_full_shells; break;
+                                               case 1: ammo_full = autocvar_hud_panel_weapons_ammo_full_nails; break;
+                                               case 2: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break;
+                                               case 3: ammo_full = autocvar_hud_panel_weapons_ammo_full_cells; break;
+                                               case 4: ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel; break;
+                                               default: ammo_full = 60;
                                        }
 
                                        drawsetcliparea(
-                                               wpnpos_x + baroffset_x,
-                                               wpnpos_y + baroffset_y,
-                                               barsize_x * bound(0, a/fullammo, 1),
+                                               weapon_pos_x + baroffset_x,
+                                               weapon_pos_y + baroffset_y,
+                                               barsize_x * bound(0, a/ammo_full, 1),
                                                barsize_y);
-                                       drawpic_aspect_skin(wpnpos, "weapon_ammo", wpnsize, ammo_color, ammo_alpha, DRAWFLAG_NORMAL);
+                                       drawpic_aspect_skin(weapon_pos, "weapon_ammo", weapon_size, ammo_color, ammo_alpha, DRAWFLAG_NORMAL);
                                        drawresetcliparea();
                                }
                        }
                }
-
-               // draw a "ghost weapon icon" if you don't have the weapon
-               else
+               else // draw a "ghost weapon icon" if you don't have the weapon
                {
-                       drawpic_aspect_skin(wpnpos, strcat("weapon", self.netname), wpnsize, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
+                       drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
                }
-
+               
                // draw the complain message
                if(time - complain_weapon_time < when + fadetime && self.weapon == complain_weapon && autocvar_hud_panel_weapons_complainbubble)
                {
                        if(fadetime)
-                       {
-                               if(complain_weapon_time + when > time)
-                                       a = 1;
-                               else
-                                       a = bound(0, (complain_weapon_time + when + fadetime - time) / fadetime, 1);
-                       }
+                               a = ((complain_weapon_time + when > time) ? 1 : bound(0, (complain_weapon_time + when + fadetime - time) / fadetime, 1));
                        else
-                       {
-                               if(complain_weapon_time + when > time)
-                                       a = 1;
-                               else
-                                       a = 0;
-                       }
+                               a = ((complain_weapon_time + when > time) ? 1 : 0);
+
 
                        string s;
                        if(complain_weapon_type == 0) {
@@ -781,10 +793,11 @@ void HUD_Weapons(void)
                                color = stov(autocvar_hud_panel_weapons_complainbubble_color_unavailable);
                        }
                        float padding = autocvar_hud_panel_weapons_complainbubble_padding;
-                       drawpic_aspect_skin(wpnpos + '1 1 0' * padding, "weapon_complainbubble", wpnsize - '2 2 0' * padding, color, a * panel_fg_alpha, DRAWFLAG_NORMAL);
-                       drawstring_aspect(wpnpos + '1 1 0' * padding, s, wpnsize - '2 2 0' * padding, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
+                       drawpic_aspect_skin(weapon_pos + '1 1 0' * padding, "weapon_complainbubble", weapon_size - '2 2 0' * padding, color, a * panel_fg_alpha, DRAWFLAG_NORMAL);
+                       drawstring_aspect(weapon_pos + '1 1 0' * padding, s, weapon_size - '2 2 0' * padding, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL);
                }
 
+               // continue with new position for the next weapon
                ++row;
                if(row >= rows)
                {
@@ -792,7 +805,6 @@ void HUD_Weapons(void)
                        ++column;
                }
        }
-
 }
 
 // Ammo (#1)
index 109a9cf54a239b17e7280f2aa15823c06c3614f6..082353049178ca485501d2df2d27245b6b2b12c3 100644 (file)
@@ -64,6 +64,8 @@ void HUD_Panel_ExportCfg(string cfgname)
                                case HUD_PANEL_WEAPONS:
                                        HUD_Write_PanelCvar_q("_complainbubble");
                                        HUD_Write_PanelCvar_q("_complainbubble_padding");
+                                       HUD_Write_PanelCvar_q("_complainbubble_time");
+                                       HUD_Write_PanelCvar_q("_complainbubble_fadetime");
                                        HUD_Write_PanelCvar_q("_complainbubble_color_outofammo");
                                        HUD_Write_PanelCvar_q("_complainbubble_color_donthave");
                                        HUD_Write_PanelCvar_q("_complainbubble_color_unavailable");