X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fclient%2Fmapvoting.qc;h=2a6f39f8a5ff50dcbe63c7fdc628328bcc1eb449;hb=bda29da7c83e61ef45bce71d9a0c53115cd56752;hp=d0bab24b56d2d1918da0a132275efdd143e348bf;hpb=9e50112561ad6f4cefe6d13bd7185f5dfd1ada4b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/mapvoting.qc b/qcsrc/client/mapvoting.qc index d0bab24b5..2a6f39f8a 100644 --- a/qcsrc/client/mapvoting.qc +++ b/qcsrc/client/mapvoting.qc @@ -1,13 +1,18 @@ #include "mapvoting.qh" -#include "autocvars.qh" -#include "miscfunctions.qh" -#include "defs.qh" -#include "hud/_mod.qh" -#include "hud/panel/scoreboard.qh" - +#include +#include +#include #include +#include + +// MapVote (#21) +void MapVote_Draw_Export(int fh) +{ + // allow saving cvars that aesthetically change the panel into hud skin files + HUD_Write_Cvar("hud_panel_mapvote_highlight_border"); +} int mv_num_maps; @@ -41,6 +46,19 @@ const int NUM_SSDIRS = 4; string ssdirs[NUM_SSDIRS]; int n_ssdirs; +bool PreviewExists(string name) +{ + if(autocvar_cl_readpicture_force) + return false; + + if (fexists(strcat(name, ".tga"))) return true; + if (fexists(strcat(name, ".png"))) return true; + if (fexists(strcat(name, ".jpg"))) return true; + if (fexists(strcat(name, ".pcx"))) return true; + + return false; +} + string MapVote_FormatMapItem(int id, string map, float _count, float maxwidth, vector fontsize) { TC(int, id); @@ -321,7 +339,6 @@ float MapVote_Selection(vector topleft, vector cellsize, float rows, float colum return mv_mouse_selection; } -vector prev_mousepos; // draws map vote or gametype vote void MapVote_Draw() { @@ -339,15 +356,6 @@ void MapVote_Draw() HUD_Panel_LoadCvars(); - if (!autocvar_hud_cursormode) - { - if (mousepos.x != prev_mousepos.x || mousepos.y != prev_mousepos.y) - { - mv_selection_keyboard = 0; - prev_mousepos = mousepos; - } - } - center = (vid_conwidth - 1)/2; xmin = vid_conwidth * 0.08; xmax = vid_conwidth - xmin; @@ -629,7 +637,7 @@ void GameTypeVote_ReadOption(int i) } else { - Gametype type = MapInfo_Type_FromString(gt); + Gametype type = MapInfo_Type_FromString(gt, false); mv_pk3[i] = strzone(MapInfo_Type_ToText(type)); mv_desc[i] = MapInfo_Type_Description(type); } @@ -752,9 +760,11 @@ int MapVote_MoveUp(int pos) imp = pos - mv_columns; if ( imp < 0 ) { - imp = floor(mv_num_maps/mv_columns)*mv_columns + pos % mv_columns; - if ( imp >= mv_num_maps ) - imp -= mv_columns; + int mv_rows = ceil(mv_num_maps / mv_columns); + if (imp == -mv_columns) // pos == 0 + imp = mv_columns * mv_rows - 1; + else + imp = imp + mv_columns * mv_rows - 1; } } if ( !(mv_flags[imp] & GTV_AVAILABLE) && imp != mv_ownvote ) @@ -771,7 +781,12 @@ int MapVote_MoveDown(int pos) { imp = pos + mv_columns; if ( imp >= mv_num_maps ) - imp = imp % mv_columns; + { + if ((imp % mv_columns) == mv_columns - 1) + imp = 0; + else + imp = imp % mv_columns + 1; + } } if ( !(mv_flags[imp] & GTV_AVAILABLE) && imp != mv_ownvote ) imp = MapVote_MoveDown(imp); @@ -794,13 +809,22 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary) return true; } - if (bInputType == 0) + if (bInputType == 2) + { + mv_selection_keyboard = 0; + return false; + } + + // at this point bInputType can only be 0 or 1 (key pressed or released) + bool key_pressed = (bInputType == 0); + + if (key_pressed) { if (nPrimary == K_ALT) hudShiftState |= S_ALT; if (nPrimary == K_CTRL) hudShiftState |= S_CTRL; if (nPrimary == K_SHIFT) hudShiftState |= S_SHIFT; } - else if (bInputType == 1) + else { if (nPrimary == K_ALT) hudShiftState -= (hudShiftState & S_ALT); if (nPrimary == K_CTRL) hudShiftState -= (hudShiftState & S_CTRL); @@ -810,31 +834,33 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary) first_digit = 0; } - if (bInputType != 0) - return false; - int imp = 0; switch(nPrimary) { case K_RIGHTARROW: + if (!key_pressed) return true; mv_selection_keyboard = 1; mv_selection = MapVote_MoveRight(mv_selection); return true; case K_LEFTARROW: + if (!key_pressed) return true; mv_selection_keyboard = 1; mv_selection = MapVote_MoveLeft(mv_selection); return true; case K_DOWNARROW: + if (!key_pressed) return true; mv_selection_keyboard = 1; mv_selection = MapVote_MoveDown(mv_selection); return true; case K_UPARROW: + if (!key_pressed) return true; mv_selection_keyboard = 1; mv_selection = MapVote_MoveUp(mv_selection); return true; case K_KP_ENTER: case K_ENTER: case K_SPACE: + if (!key_pressed) return true; if ( mv_selection_keyboard ) MapVote_SendChoice(mv_selection); return true; @@ -854,6 +880,8 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary) { if (!first_digit) { + if (!key_pressed) + return true; first_digit = imp % 10; return true; } @@ -863,14 +891,21 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary) if (nPrimary == K_MOUSE1) { + if (!key_pressed) + return true; mv_selection_keyboard = 0; mv_selection = mv_mouse_selection; if (mv_selection >= 0) imp = min(mv_selection + 1, mv_num_maps); } + if (nPrimary == K_MOUSE2) + return true; // do nothing + if (imp) { + if (!key_pressed) + return true; if (imp <= mv_num_maps) localcmd(strcat("\nimpulse ", ftos(imp), "\n")); return true;