]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'terencehill/centerprint_panel_fix' into 'master'
authorMario <zacjardine@y7mail.com>
Sat, 13 Dec 2014 05:22:47 +0000 (05:22 +0000)
committerMario <zacjardine@y7mail.com>
Sat, 13 Dec 2014 05:22:47 +0000 (05:22 +0000)
Terencehill/centerprint panel fix

A generic message centerprinted together with a countdown message leaps every second at low fps

See merge request !45

1  2 
qcsrc/client/hud.qc

diff --combined qcsrc/client/hud.qc
index 9b44566d84acafd01336f00792774873ab1c3310,c57e740d89d9d7afd848ee2781dac9b096d95d1c..b928aa512a514ddd6181c409bc46b630dc91c831
@@@ -218,9 -218,9 +218,9 @@@ string MakeRaceString(float cp, float m
        if(histime < 0)
                return strcat(col, cpname);
        else if(hisname == "")
 -              return strcat(col, sprintf(_("%s (%s)"), cpname, timestr));
 +              return strcat(col, sprintf("%s (%s)", cpname, timestr));
        else
 -              return strcat(col, sprintf(_("%s (%s %s)"), cpname, timestr, strcat(hisname, col, lapstr)));
 +              return strcat(col, sprintf("%s (%s %s)", cpname, timestr, strcat(hisname, col, lapstr)));
  }
  
  // Check if the given name already exist in race rankings? In that case, where? (otherwise return 0)
@@@ -408,6 -408,42 +408,6 @@@ float weaponorder_cmp(float i, float j
        return aj - ai; // the string is in REVERSE order (higher prio at the right is what we want, but higher prio first is the string)
  }
  
 -float GetAmmoStat(float i)
 -{
 -      switch(i)
 -      {
 -              case 0: return STAT_SHELLS;
 -              case 1: return STAT_NAILS;
 -              case 2: return STAT_ROCKETS;
 -              case 3: return STAT_CELLS;
 -              case 4: return STAT_FUEL;
 -              default: return -1;
 -      }
 -}
 -
 -float GetAmmoTypeForWep(float i)
 -{
 -      switch(i)
 -      {
 -              case WEP_SHOTGUN: return 0;
 -              case WEP_UZI: return 1;
 -              case WEP_GRENADE_LAUNCHER: return 2;
 -              case WEP_MINE_LAYER: return 2;
 -              case WEP_ELECTRO: return 3;
 -              case WEP_CRYLINK: return 3;
 -              case WEP_HLAC: return 3;
 -              case WEP_MINSTANEX: return 3;
 -              case WEP_NEX: return 3;
 -              case WEP_RIFLE: return 1;
 -              case WEP_HAGAR: return 2;
 -              case WEP_ROCKET_LAUNCHER: return 2;
 -              case WEP_SEEKER: return 2;
 -              case WEP_FIREBALL: return 4;
 -              case WEP_HOOK: return 3;
 -              default: return -1;
 -      }
 -}
 -
  void HUD_Weapons(void)
  {
        // declarations
        float timein_effect_length = autocvar_hud_panel_weapons_timeout_speed_in; //? 0.375 : 0);
        float timeout_effect_length = autocvar_hud_panel_weapons_timeout_speed_out; //? 0.75 : 0);
  
 -      float ammo_type, ammo_full;
 +      float ammo_full;
        float barsize_x = 0, barsize_y = 0, baroffset_x = 0, baroffset_y = 0;
        vector ammo_color = '1 0 1';
        float ammo_alpha = 1;
                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);
 +                      drawpic_aspect_skin(weapon_pos, self.model2, weapon_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
  
                        // draw weapon label string
                        switch(autocvar_hud_panel_weapons_label)
                                        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);
 +                                      drawstring(weapon_pos, strtolower(self.message), '1 1 0' * 0.5 * weapon_size_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
                                        break;
  
                                default: // nothing
                        }
  
                        // 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.ammo_field != ammo_none))
                        {
 -                              a = 0;
 -                              ammo_type = GetAmmoTypeForWep(self.weapon);
 -                              if(ammo_type != -1)
 -                                      a = getstati(GetAmmoStat(ammo_type)); // how much ammo do we have?
 +                              a = getstati(GetAmmoStat(self.ammo_field)); // how much ammo do we have?
  
                                if(a > 0)
                                {
 -                                      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;
 +                                      switch(self.ammo_field)
 +                                      {
 +                                              case ammo_shells:  ammo_full = autocvar_hud_panel_weapons_ammo_full_shells;  break;
 +                                              case ammo_nails:   ammo_full = autocvar_hud_panel_weapons_ammo_full_nails;   break;
 +                                              case ammo_rockets: ammo_full = autocvar_hud_panel_weapons_ammo_full_rockets; break;
 +                                              case ammo_cells:   ammo_full = autocvar_hud_panel_weapons_ammo_full_cells;   break;
 +                                              case ammo_plasma:  ammo_full = autocvar_hud_panel_weapons_ammo_full_plasma;  break;
 +                                              case ammo_fuel:    ammo_full = autocvar_hud_panel_weapons_ammo_full_fuel;    break;
                                                default: ammo_full = 60;
                                        }
  
                                                weapon_pos_x + baroffset_x,
                                                weapon_pos_y + baroffset_y,
                                                barsize_x * bound(0, a/ammo_full, 1),
 -                                              barsize_y);
 -                                      drawpic_aspect_skin(weapon_pos, "weapon_ammo", weapon_size, ammo_color, ammo_alpha, DRAWFLAG_NORMAL);
 +                                              barsize_y
 +                                      );
 +
 +                                      drawpic_aspect_skin(
 +                                              weapon_pos,
 +                                              "weapon_ammo",
 +                                              weapon_size,
 +                                              ammo_color,
 +                                              ammo_alpha,
 +                                              DRAWFLAG_NORMAL
 +                                      );
 +
                                        drawresetcliparea();
                                }
                        }
                }
                else // draw a "ghost weapon icon" if you don't have the weapon
                {
 -                      drawpic_aspect_skin(weapon_pos, strcat("weapon", self.netname), weapon_size, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
 +                      drawpic_aspect_skin(weapon_pos, self.model2, weapon_size, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL);
                }
  
                // draw the complain message
  }
  
  // Ammo (#1)
 -//
 -// TODO: macro
 -float GetAmmoItemCode(float i)
 -{
 -      switch(i)
 -      {
 -              case 0: return IT_SHELLS;
 -              case 1: return IT_NAILS;
 -              case 2: return IT_ROCKETS;
 -              case 3: return IT_CELLS;
 -              case 4: return IT_FUEL;
 -              default: return -1;
 -      }
 -}
 -
 -string GetAmmoPicture(float i)
 -{
 -      switch(i)
 -      {
 -              case 0: return "ammo_shells";
 -              case 1: return "ammo_bullets";
 -              case 2: return "ammo_rockets";
 -              case 3: return "ammo_cells";
 -              case 4: return "ammo_fuel";
 -              default: return "";
 -      }
 -}
 -
  void DrawNadeScoreBar(vector myPos, vector mySize, vector color)
  {
        
@@@ -879,30 -934,16 +879,30 @@@ void DrawAmmoNades(vector myPos, vecto
        }
  }
  
 -void DrawAmmoItem(vector myPos, vector mySize, float itemcode, float currently_selected, float infinite_ammo)
 +void DrawAmmoItem(vector myPos, vector mySize, .float ammotype, float currently_selected, float infinite_ammo)
  {
 -      float a;
 -      if(autocvar__hud_configure)
 +      float a = 0;
 +      if(ammotype != ammo_none)
        {
 -              currently_selected = (itemcode == 2); //rockets always selected
 -              a = 31 + mod(itemcode*93, 128);
 +              if(autocvar__hud_configure)
 +              {
 +                      currently_selected = (ammotype == ammo_rockets); //rockets always selected
 +                      a = 60;
 +              }
 +              else
 +              {
 +                      // how much ammo do we have of this ammotype?
 +                      a = getstati(GetAmmoStat(ammotype));
 +              }
        }
        else
 -              a = getstati(GetAmmoStat(itemcode)); // how much ammo do we have of type itemcode?
 +      {
 +              #if 0
 +              infinite_ammo = TRUE;
 +              #else
 +              return; // just don't draw infinite ammo at all.
 +              #endif
 +      }
  
        vector color;
        if(infinite_ammo)
                picpos = myPos;
        }
  
 -      if (currently_selected)
 +      if(currently_selected)
                drawpic_aspect_skin(myPos, "ammo_current_bg", mySize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
  
      if(a > 0 && autocvar_hud_panel_ammo_progressbar)
              drawstring_aspect(numpos, ftos(a), eX * (2/3) * mySize_x + eY * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
      }
        if(a > 0 || infinite_ammo)
 -              drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
 +              drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha * theAlpha, DRAWFLAG_NORMAL);
        else // "ghost" ammo icon
 -              drawpic_aspect_skin(picpos, GetAmmoPicture(itemcode), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
 +              drawpic_aspect_skin(picpos, GetAmmoPicture(ammotype), '1 1 0' * mySize_y, '0 0 0', panel_fg_alpha * theAlpha * 0.5, DRAWFLAG_NORMAL);
  }
  
  float nade_prevstatus;
@@@ -982,6 -1023,7 +982,6 @@@ void HUD_Ammo(void
        float total_ammo_count;
  
        vector ammo_size;
 -      float AMMO_COUNT = 4;
        if (autocvar_hud_panel_ammo_onlycurrent)
                total_ammo_count = 1;
        else
                ammo_size_y = newSize;
        }
  
 -      float i, stat_items, currently_selected, infinite_ammo;
 -      infinite_ammo = FALSE;
 -
 +      float i;
 +      float infinite_ammo = (getstati(STAT_ITEMS, 0, 24) & IT_UNLIMITED_WEAPON_AMMO);
        row = column = 0;
 -
 -      if (autocvar_hud_panel_ammo_onlycurrent)
 +      if(autocvar_hud_panel_ammo_onlycurrent)
        {
                if(autocvar__hud_configure)
                {
 -                      DrawAmmoItem(pos, ammo_size, 2, true, FALSE); //show rockets
 +                      DrawAmmoItem(pos, ammo_size, ammo_rockets, TRUE, FALSE);
                }
                else
                {
 -                      stat_items = getstati(STAT_ITEMS, 0, 24);
 -                      if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
 -                              infinite_ammo = TRUE;
 -                      for (i = 0; i < AMMO_COUNT; ++i) {
 -                              currently_selected = stat_items & GetAmmoItemCode(i);
 -                              if (currently_selected)
 -                              {
 -                                      DrawAmmoItem(pos, ammo_size, i, true, infinite_ammo);
 -                                      break;
 -                              }
 -                      }
 -              }
 +                      DrawAmmoItem(
 +                              pos,
 +                              ammo_size,
 +                              (get_weaponinfo(switchweapon)).ammo_field,
 +                              TRUE,
 +                              infinite_ammo
 +                      );
  
                ++row;
                if(row >= rows)
                        row = 0;
                        column = column + 1;
                }
 +              }
        }
        else
        {
 -              stat_items = getstati(STAT_ITEMS, 0, 24);
 -              if (stat_items & IT_UNLIMITED_WEAPON_AMMO)
 -                      infinite_ammo = TRUE;
 -              for (i = 0; i < AMMO_COUNT; ++i) {
 -                      currently_selected = stat_items & GetAmmoItemCode(i);
 -                      DrawAmmoItem(pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y), ammo_size, i, currently_selected, infinite_ammo);
 +              .float ammotype;
 +              row = column = 0;
 +              for(i = 0; i < AMMO_COUNT; ++i)
 +              {
 +                      if(i == 4) continue; // fuel
 +                      ammotype = GetAmmoFieldFromNum(i);
 +                      DrawAmmoItem(
 +                              pos + eX * column * (ammo_size_x + offset_x) + eY * row * (ammo_size_y + offset_y),
 +                              ammo_size,
 +                              ammotype,
 +                              ((get_weaponinfo(switchweapon)).ammo_field == ammotype),
 +                              infinite_ammo
 +                      );
 +
                        ++row;
                        if(row >= rows)
                        {
@@@ -1751,7 -1791,7 +1751,7 @@@ void HUD_Notify(void
                {
                        attacker = sprintf(_("Player %d"), count + 1);
                        victim = sprintf(_("Player %d"), count + 2);
 -                      icon = strcat("weapon", get_weaponinfo(min(WEP_FIRST + count * 2, WEP_LAST)).netname);
 +                      icon = get_weaponinfo(min(WEP_FIRST + count * 2, WEP_LAST)).model2;
                        alpha = bound(0, 1.2 - count / entry_count, 1);
                }
                else
@@@ -4226,9 -4266,9 +4226,9 @@@ void HUD_CenterPrint (void
                {
                        float r;
                        r = random();
-                       if (r > 0.9)
+                       if (r > 0.75)
                                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)
+                       else if (r > 0.5)
                                centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0);
                        else
                                centerprint_hud(sprintf("Message at time %s", seconds_tostring(time)));
                else // Expiring soon, so fade it out.
                        a = (centerprint_expire_time[j] - time) / max(0.0001, autocvar_hud_panel_centerprint_fade_out);
  
-               if (a <= 0.5/255.0)  // Guaranteed invisible - don't show.
+               // while counting down show it anyway in order to hold the current message position
+               if (a <= 0.5/255.0 && centerprint_countdown_num[j] == 0)  // Guaranteed invisible - don't show.
                        continue;
                if (a > 1)
                        a = 1;
@@@ -4607,7 -4648,7 +4608,7 @@@ void HUD_Main (void
                        }
                }
                if (warning)
 -                      print(_("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"));
 +                      dprint("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n");
  
                cvar_set("_hud_panelorder", s);
                if(hud_panelorder_prev)