]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud.qc
Hook so the currently active weapon can be reported in the console. see cl_hook_activ...
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud.qc
index f3a4fe52a563ec856d777fa89198cc113e0ce22e..1b8b2366e0122f52b1b7d9e814970fff075acba7 100644 (file)
@@ -987,8 +987,8 @@ void HUD_Panel_SetPos(float id, vector pos)
 
        if(cvar("hud_configure_grid"))
        {
-               pos_x = floor((pos_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
-               pos_y = floor((pos_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
+               pos_x = floor((pos_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_x"), 0.2) * vid_conwidth;
+               pos_y = floor((pos_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_y"), 0.2) * vid_conheight;
        }
 
        string s;
@@ -1172,26 +1172,13 @@ void HUD_Panel_SetPosSize(float id)
        // before checkresize, otherwise panel can be snapped partially inside another panel or panel aspect ratio can be broken
        if(cvar("hud_configure_grid"))
        {
-               mySize_x = floor((mySize_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * cvar("hud_configure_grid_x") * vid_conwidth;
-               mySize_y = floor((mySize_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * cvar("hud_configure_grid_y") * vid_conheight;
+               mySize_x = floor((mySize_x/vid_conwidth)/bound(0.005, cvar("hud_configure_grid_x"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_x"), 0.2) * vid_conwidth;
+               mySize_y = floor((mySize_y/vid_conheight)/bound(0.005, cvar("hud_configure_grid_y"), 0.2) + 0.5) * bound(0.005, cvar("hud_configure_grid_y"), 0.2) * vid_conheight;
        }
 
        if(cvar("hud_configure_checkcollisions"))
        {
                mySize = HUD_Panel_CheckResize(id, mySize, resizeorigin);
-
-               // Make sure once more that we DON'T cross the screen edges
-               // left/top screen edges
-               if(myPos_x < 0)
-                       mySize_x = mySize_x + myPos_x;
-               if(myPos_y < 0)
-                       mySize_y = mySize_y + myPos_y;
-
-               // bottom/right screen edges
-               if(myPos_x + mySize_x > vid_conwidth)
-                       mySize_x = vid_conwidth - myPos_x;
-               if(myPos_y + mySize_y > vid_conheight)
-                       mySize_y = vid_conheight - myPos_y;
        }
 
        // minimum panel size cap, do this once more so we NEVER EVER EVER have a panel smaller than this, JUST IN CASE above code still makes the panel eg negative (impossible to resize back without changing cvars manually then)
@@ -1415,7 +1402,6 @@ void HUD_WeaponIcons_Clear()
 }
 
 entity weaponorder[WEP_MAXCOUNT];
-
 void weaponorder_swap(float i, float j, entity pass)
 {
        entity h;
@@ -1424,6 +1410,7 @@ void weaponorder_swap(float i, float j, entity pass)
        weaponorder[j] = h;
 }
 
+string weaponorder_cmp_str_save;
 string weaponorder_cmp_str;
 float weaponorder_cmp(float i, float j, entity pass)
 {
@@ -1444,19 +1431,34 @@ void HUD_WeaponIcons(void)
        mySize = HUD_Panel_GetSize(id);
 
        stat_weapons = getstati(STAT_WEAPONS);
+       weapon_cnt = 0;
        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
        {
                self = get_weaponinfo(i);
                if(self.impulse >= 0)
-               {
-                       weaponorder[weapon_cnt] = self;
                        ++weapon_cnt;
-               }
        }
 
        // TODO make this configurable
        weaponorder_cmp_str = strcat(" ", weaponorder_byimpulse, " ");
-       heapsort(weapon_cnt, weaponorder_swap, weaponorder_cmp, world);
+
+       if(weaponorder_cmp_str != weaponorder_cmp_str_save)
+       {
+               if(weaponorder_cmp_str_save)
+                       strunzone(weaponorder_cmp_str_save);
+               weaponorder_cmp_str_save = strzone(weaponorder_cmp_str);
+               weapon_cnt = 0;
+               for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+               {
+                       self = get_weaponinfo(i);
+                       if(self.impulse >= 0)
+                       {
+                               weaponorder[weapon_cnt] = self;
+                               ++weapon_cnt;
+                       }
+               }
+               heapsort(weapon_cnt, weaponorder_swap, weaponorder_cmp, world);
+       }
 
        HUD_Panel_DrawBg(id, pos, mySize, 0);
        float padding;
@@ -3036,6 +3038,19 @@ void HUD_Notify (void)
 
 // Timer (#5)
 //
+string seconds_tostring(float sec)
+{
+       float minutes;
+       minutes = floor(sec / 60);
+
+       sec -= minutes * 60;
+
+       string s;
+       s = ftos(100 + sec);
+
+       return strcat(ftos(minutes), ":", substring(s, 1, 3));
+}
+
 void HUD_Timer(void)
 {
        float id = HUD_PANEL_TIMER;
@@ -3052,14 +3067,15 @@ void HUD_Timer(void)
                mySize -= '2 2 0' * padding;
        }
 
-       float timelimit, elapsedTime, minutes, seconds, timeleft, minutesLeft, secondsLeft;
+       string timer;
+       float timelimit, elapsedTime, timeleft, minutesLeft;
 
        timelimit = getstatf(STAT_TIMELIMIT);
 
        timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
        timeleft = ceil(timeleft);
+
        minutesLeft = floor(timeleft / 60);
-       secondsLeft = timeleft - minutesLeft*60;
 
        vector timer_color;
        if(minutesLeft >= 5 || warmup_stage || timelimit == 0) //don't use red or yellow in warmup or when there is no timelimit
@@ -3072,25 +3088,16 @@ void HUD_Timer(void)
        if (cvar("hud_timer_increment") || timelimit == 0 || warmup_stage) {
                if (time < getstatf(STAT_GAMESTARTTIME)) {
                        //while restart is still active, show 00:00
-                       minutes = seconds = 0;
+                       timer = seconds_tostring(0);
                } else {
                        elapsedTime = floor(time - getstatf(STAT_GAMESTARTTIME)); //127
-                       minutes = floor(elapsedTime / 60);
-                       seconds = elapsedTime - minutes*60;
+                       timer = seconds_tostring(elapsedTime);
                }
        } else {
-               minutes = minutesLeft;
-               seconds = secondsLeft;
+               timer = seconds_tostring(timeleft);
        }
 
-       if(minutes > 999)
-               seconds = 99;
-       minutes = min(minutes, 999);
-       if(minutesLeft >= 1 || cvar("hud_timer_increment") || timelimit == 0 || warmup_stage) {
-               HUD_DrawXNum(pos + eX * mySize_x - eX * 5.1 * mySize_y, minutes, 3, 0, mySize_y, timer_color, 0, 0, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-               drawpic_skin(pos + eX * mySize_x - eX * 2.57 * mySize_y, "num_colon", '1 1 0' * mySize_y, timer_color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       }
-       HUD_DrawXNum(pos + eX * mySize_x - eX * 2 * mySize_y, seconds, -2, 0, mySize_y, timer_color, 0, 0, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawstring_aspect(pos, timer, mySize, mySize_y, timer_color, HUD_Panel_GetFgAlpha(HUD_PANEL_TIMER), DRAWFLAG_NORMAL);
 }
 
 // Radar (#6)
@@ -4133,16 +4140,17 @@ void HUD_DrawPressedKeys(void)
                mySize -= '2 2 0' * padding;
        }
 
+       vector keysize;
+       keysize = eX * mySize_x * (1/3) + eY * mySize_y * 0.5;
        float pressedkeys;
 
        pressedkeys = getstatf(STAT_PRESSED_KEYS);
-       drawpic_skin(pos, "key_bg.tga",           mySize, '1 1 1', 0.1 * HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * mySize_x - eX * 0.22 * mySize_x +       eY * 0.195 * mySize_y, ((pressedkeys & KEY_CROUCH) ? "key_crouch_inv.tga" : "key_crouch.tga"),        '1 1 0' * (1/3) * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * 0.5 * mySize_x - eX * 0.23 * mySize_y + eY * 0.040 * mySize_y, ((pressedkeys & KEY_FORWARD) ? "key_forward_inv.tga" : "key_forward.tga"),     '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * 0.023 * mySize_x +                      eY * 0.195 * mySize_y, ((pressedkeys & KEY_JUMP) ? "key_jump_inv.tga" : "key_jump.tga"),              '1 1 0' * (1/3) * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * 0.1 * mySize_x +                        eY * 0.486 * mySize_y, ((pressedkeys & KEY_LEFT) ? "key_left_inv.tga" : "key_left.tga"),              '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * 0.5 * mySize_x - eX * 0.23 * mySize_y + eY * 0.486 * mySize_y, ((pressedkeys & KEY_BACKWARD) ? "key_backward_inv.tga" : "key_backward.tga"),  '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
-       drawpic_skin(pos + eX * mySize_x - eX * 0.372 * mySize_x +      eY * 0.486 * mySize_y, ((pressedkeys & KEY_RIGHT) ? "key_right_inv.tga" : "key_right.tga"),           '1 1 0' * 0.46 * mySize_y, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos, ((pressedkeys & KEY_CROUCH) ? "key_crouch_inv.tga" : "key_crouch.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos + eX * mySize_x * (1/3), ((pressedkeys & KEY_FORWARD) ? "key_forward_inv.tga" : "key_forward.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos + eX * mySize_x * (2/3), ((pressedkeys & KEY_JUMP) ? "key_jump_inv.tga" : "key_jump.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos + eY * 0.5 * mySize_y, ((pressedkeys & KEY_LEFT) ? "key_left_inv.tga" : "key_left.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos + eY * 0.5 * mySize_y + eX * mySize_x * (1/3), ((pressedkeys & KEY_BACKWARD) ? "key_backward_inv.tga" : "key_backward.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawpic_skin(pos + eY * 0.5 * mySize_y + eX * mySize_x * (2/3), ((pressedkeys & KEY_RIGHT) ? "key_right_inv.tga" : "key_right.tga"), keysize, '1 1 1', HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
 }
 
 // Handle chat as a panel (#12)
@@ -4241,7 +4249,7 @@ void HUD_EngineInfo(void)
 
        vector color;
        color = HUD_Get_Num_Color (prevfps, 100);
-       drawstring(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), '1 1 0' * mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
+       drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, cvar("hud_engineinfo_framecounter_decimals"))), mySize, mySize_y, color, HUD_Panel_GetFgAlpha(id), DRAWFLAG_NORMAL);
 }
 /*
 ==================
@@ -4378,14 +4386,14 @@ void HUD_Main (void)
        {
                float i;
                // x-axis
-               for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2); ++i)
+               for(i = 0; i < 1/bound(0.005, cvar("hud_configure_grid_x"), 0.2); ++i)
                {
-                       drawfill(eX * i * vid_conwidth * bound(0.005, bound(0.005, cvar("hud_configure_grid_x"), 0.2), 0.2), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+                       drawfill(eX * i * vid_conwidth * bound(0.005, cvar("hud_configure_grid_x"), 0.2), eX + eY * vid_conheight, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
                }
                // y-axis
-               for(i = 0; i < 1/bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2); ++i)
+               for(i = 0; i < 1/bound(0.005, cvar("hud_configure_grid_y"), 0.2); ++i)
                {
-                       drawfill(eY * i * vid_conheight * bound(0.005, bound(0.005, cvar("hud_configure_grid_y"), 0.2), 0.2), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
+                       drawfill(eY * i * vid_conheight * bound(0.005, cvar("hud_configure_grid_y"), 0.2), eY + eX * vid_conwidth, '0.5 0.5 0.5', cvar("hud_configure_grid_alpha"), DRAWFLAG_NORMAL);
                }
        }