]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/mapvoting.qc
Merge remote-tracking branch 'origin/master' into tzork/gm_nexball
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / mapvoting.qc
index 4d96d5821ca3e6796aa244bad0a5d39697674701..0af74018eeb58406ed398d38033ce24773674cad 100644 (file)
@@ -12,6 +12,8 @@ float mv_ownvote;
 float mv_detail;
 float mv_timeout;
 float mv_maps_mask;
+float mv_top2_time;
+float mv_top2_alpha;
 
 vector mv_mousepos;
 float mv_selection;
@@ -19,13 +21,13 @@ float mv_selection;
 string MapVote_FormatMapItem(float id, string map, float count, float maxwidth, vector fontsize)
 {
        string pre, post;
-       pre = strcat(ftos(id+1), ". ");
+       pre = sprintf("%d. ", id+1);
        if(mv_detail)
        {
                if(count == 1)
-                       post = strcat(" (1 vote)");
-               else
-                       post = strcat(" (", ftos(count), " votes)");
+                       post = _(" (1 vote)");
+               else if(count >= 0)
+                       post = sprintf(_(" (%d votes)"), count);
        }
        else
                post = "";
@@ -34,8 +36,10 @@ string MapVote_FormatMapItem(float id, string map, float count, float maxwidth,
        return strcat(pre, map, post);
 }
 
-vector MapVote_RGB(float id)
+vector MapVote_RGB(float id, float count)
 {
+       if(count < 0)
+               return '1 1 1';
        if(id == mv_ownvote)
                return '0 1 0';
        else if (id == mv_selection)
@@ -53,7 +57,7 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin
        
        isize -= hud_fontsize_y; // respect the text when calculating the image size
 
-       rgb = MapVote_RGB(id);
+       rgb = MapVote_RGB(id, count);
        
        img_size_y = isize;
        img_size_x = isize / 0.75; // 4:3 x can be stretched easily, height is defined in isize
@@ -63,9 +67,15 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin
        label = MapVote_FormatMapItem(id, map, count, tsize, hud_fontsize);
 
        text_size = stringwidth(label, false, hud_fontsize);
-       
+
+       float theAlpha;
+       if (count < 0 && mv_top2_alpha)
+               theAlpha = mv_top2_alpha;
+       else
+               theAlpha = 1;
+
        pos_x -= text_size*0.5;
-       drawstring(pos, label, hud_fontsize, rgb, 1, DRAWFLAG_NORMAL);
+       drawstring(pos, label, hud_fontsize, rgb, theAlpha, DRAWFLAG_NORMAL);
        
        pos_x = pos_x + text_size*0.5 - img_size_x*0.5;
        pos_y = pos_y - img_size_y;
@@ -74,19 +84,19 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin
        img_size -= (autocvar_scoreboard_border_thickness * 2) * '1 1 0';
        if(pic == "")
        {
-               drawfill(pos, img_size, '.5 .5 .5', .7, DRAWFLAG_NORMAL);
+               drawfill(pos, img_size, '.5 .5 .5', .7 * theAlpha, DRAWFLAG_NORMAL);
        }
        else
        {
-               drawpic(pos, pic, img_size, '1 1 1', 1, DRAWFLAG_NORMAL);
+               drawpic(pos, pic, img_size, '1 1 1', theAlpha, DRAWFLAG_NORMAL);
        }
 
        if(id == mv_ownvote)
-               drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, rgb, 1, DRAWFLAG_NORMAL);
+               drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, rgb, theAlpha, DRAWFLAG_NORMAL);
        else
-               drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', 1, DRAWFLAG_NORMAL);
+               drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', theAlpha, DRAWFLAG_NORMAL);
 
-       if(id == mv_selection)
+       if(id == mv_selection && count >= 0)
                drawfill(pos, img_size, '1 1 1', 0.1, DRAWFLAG_NORMAL);
 }
 
@@ -96,11 +106,11 @@ void MapVote_DrawAbstain(vector pos, float isize, float tsize, float count, floa
        float text_size;
        string label;
        
-       rgb = MapVote_RGB(id);
+       rgb = MapVote_RGB(id, count);
 
        pos_y = pos_y + hud_fontsize_y;
        
-       label = MapVote_FormatMapItem(id, "Don't care", count, tsize, hud_fontsize);
+       label = MapVote_FormatMapItem(id, _("Don't care"), count, tsize, hud_fontsize);
 
        text_size = stringwidth(label, false, hud_fontsize);
        
@@ -160,7 +170,7 @@ void MapVote_Draw()
 
        if(!mv_active)
                return;
-       
+
        mv_mousepos = mv_mousepos + getmousepos();
 
        mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth);
@@ -180,14 +190,14 @@ void MapVote_Draw()
 
        pos_y = ymin;
        pos_z = 0;
-       //pos_x = center - stringwidth("Vote for a map", false) * 0.5 * 24;
-       pos_x = center - stringwidth("Vote for a map", false, '12 0 0');
-       drawstring(pos, "Vote for a map", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
+
+       map = _("Vote for a map");
+       pos_x = center - stringwidth(map, false, '12 0 0');
+       drawstring(pos, map, '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL);
        pos_y += 26;
 
        i = ceil(max(0, mv_timeout - time));
-       map = strcat(ftos(i), " seconds left");
-       //pos_x = center - stringwidth(map, false) * 0.5 * 16;
+       map = sprintf(_("%d seconds left"), i);
        pos_x = center - stringwidth(map, false, '8 0 0');
        drawstring(pos, map, '16 16 0', '0 1 0', 1, DRAWFLAG_NORMAL);
        pos_y += 22;
@@ -197,7 +207,7 @@ void MapVote_Draw()
        ymin = pos_y;
        if(mv_abstain)
                mv_num_maps -= 1;
-       
+
        if(mv_num_maps > 3)
        {
                columns = 3;
@@ -217,11 +227,12 @@ void MapVote_Draw()
        pos_y += (dist_y - isize) / 2;
        ymax -= isize;
 
+       if (mv_top2_time)
+               mv_top2_alpha = max(0.2, 1 - (time - mv_top2_time)*(time - mv_top2_time));
+
        for(i = 0; i < mv_num_maps; ++i)
        {
                tmp = mv_votes[i]; // FTEQCC bug: too many array accesses in the function call screw it up
-               if(tmp < 0)
-                       continue;
                map = mv_maps[i];
                if(mv_preview[i])
                        MapVote_DrawMapItem(pos + MapVote_GridVec(dist, i, columns), isize, tsize, map, mv_pics[i], tmp, i);
@@ -231,7 +242,7 @@ void MapVote_Draw()
 
        if(mv_abstain)
                ++mv_num_maps;
-       
+
        if(mv_abstain && i < mv_num_maps) {
                tmp = mv_votes[i];
                pos_y = ymax + isize - hud_fontsize_y;
@@ -249,7 +260,7 @@ void Cmd_MapVote_MapDownload(float argc)
 
        if(argc != 2 || !mv_pk3list)
        {
-               print("mv_mapdownload: ^3You're not supposed to use this command on your own!\n");
+               print(_("mv_mapdownload: ^3You're not supposed to use this command on your own!\n"));
                return;
        }
        
@@ -259,19 +270,16 @@ void Cmd_MapVote_MapDownload(float argc)
                        break;
        
        if(!pak || pak.sv_entnum != id) {
-               print("^1Error:^7 Couldn't find pak index.\n");
+               print(_("^1Error:^7 Couldn't find pak index.\n"));
                return;
        }
 
-       //print(strcat("^3Adding: ", ftos(id), " - ", pak.message, " - "));
-       
        if(PreviewExists(pak.message))
        {
                mv_preview[id] = true;
-               //print("^2Found...\n");
                return;
        } else {
-               print("Requesting preview...\n");
+               print(_("Requesting preview...\n"));
                localcmd(strcat("\ncmd mv_getpic ", ftos(id), "\n"));
        }
 }
@@ -350,8 +358,8 @@ void MapVote_Init()
        else
                mv_maps_mask = ReadShort();
        
-       // Assume mv_pk3list is NULL, there should only be 1 mapvote per round
-       mv_pk3list = NULL; // I'm still paranoid!
+       // Assume mv_pk3list is world, there should only be 1 mapvote per round
+       mv_pk3list = world; // I'm still paranoid!
        
        for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
        {
@@ -370,7 +378,6 @@ void MapVote_Init()
 
                        mv_preview[i] = false;
 
-                       //print(strcat("RECV: ", map, " in ", pk3, "\n"));
                        MapVote_CheckPic(map, pk3, i);
                }
                else
@@ -404,6 +411,19 @@ float MapVote_InputEvent(float bInputType, float nPrimary, float nSecondary)
                localcmd(strcat("\nimpulse ", ftos(imp), "\n"));
                return true;
        }
+       switch(nPrimary)
+       {
+               case K_KP_1: localcmd("\nimpulse 1\n"); return true;
+               case K_KP_2: localcmd("\nimpulse 2\n"); return true;
+               case K_KP_3: localcmd("\nimpulse 3\n"); return true;
+               case K_KP_4: localcmd("\nimpulse 4\n"); return true;
+               case K_KP_5: localcmd("\nimpulse 5\n"); return true;
+               case K_KP_6: localcmd("\nimpulse 6\n"); return true;
+               case K_KP_7: localcmd("\nimpulse 7\n"); return true;
+               case K_KP_8: localcmd("\nimpulse 8\n"); return true;
+               case K_KP_9: localcmd("\nimpulse 9\n"); return true;
+               case K_KP_0: localcmd("\nimpulse 10\n"); return true;
+       }
 
        if (nPrimary == K_MOUSE1)
                if (mv_selection >= 0)
@@ -429,12 +449,14 @@ void MapVote_UpdateMask()
 
        if(oldmask & mv_maps_mask != oldmask)
                if(oldmask & mv_maps_mask == mv_maps_mask)
-                        sound(world, CHAN_AUTO, "misc_invshot.wav", VOL_BASE, ATTN_NONE);
+                        sound(world, CH_INFO, "misc_invshot.wav", VOL_BASE, ATTN_NONE);
 
        // remove votes that no longer apply
        for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
                if not(mv_maps_mask & power)
                        mv_votes[i] = -1;
+
+       mv_top2_time = time;
 }
 
 void MapVote_UpdateVotes()