]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
When _hud_panelorder changes, detect wrong/missing panel numbers and fix them so...
authorterencehill <piuntn@gmail.com>
Wed, 1 Dec 2010 15:58:15 +0000 (16:58 +0100)
committerterencehill <piuntn@gmail.com>
Wed, 1 Dec 2010 18:01:29 +0000 (19:01 +0100)
I've thought to this patch when I noticed that a brand new panel doesn't show up if _hud_panelorder isn't updated.

qcsrc/client/hud.qc

index c3b2ee1a29cd78553c017a3da717745b67655055..bf08ad33ded137929d363fa5c79be9a17c4dab59 100644 (file)
@@ -5120,10 +5120,40 @@ void HUD_Main (void)
 
        // cache the panel order into the panel_order array
        if(autocvar__hud_panelorder != hud_panelorder_prev) {
+               for(i = 0; i < HUD_PANEL_NUM; ++i)
+                       panel_order[i] = -1;
+               string s;
+               float p_num, warning;
+               float argc = tokenize_console(autocvar__hud_panelorder);
+               if (argc > HUD_PANEL_NUM)
+                       warning = true;
+               //first detect wrong/missing panel numbers
+               for(i = 0; i < HUD_PANEL_NUM; ++i) {
+                       p_num = stof(argv(i));
+                       if (p_num >= 0 && p_num < HUD_PANEL_NUM) { //correct panel number?
+                               if (panel_order[p_num] == -1) //found for the first time?
+                                       s = strcat(s, ftos(p_num), " ");
+                               panel_order[p_num] = 1; //mark as found
+                       }
+                       else
+                               warning = true;
+               }
+               for(i = 0; i < HUD_PANEL_NUM; ++i) {
+                       if (panel_order[i] == -1) {
+                               warning = true;
+                               s = strcat(s, ftos(i), " "); //add missing panel number
+                       }
+               }
+               if (warning)
+                       print("Automatically fixed wrong/missing panel numbers in _hud_panelorder\n");
+
+               cvar_set("_hud_panelorder", s);
                if(hud_panelorder_prev)
                        strunzone(hud_panelorder_prev);
-               hud_panelorder_prev = strzone(autocvar__hud_panelorder);
-               tokenize_console(autocvar__hud_panelorder);
+               hud_panelorder_prev = strzone(s);
+
+               //now properly set panel_order
+               tokenize_console(s);
                for(i = 0; i < HUD_PANEL_NUM; ++i) {
                        panel_order[i] = stof(argv(i));
                }