#include "mapvoting.qh"
-#include "autocvars.qh"
-#include "miscfunctions.qh"
-#include "defs.qh"
-#include "hud/_mod.qh"
-#include "hud/panel/scoreboard.qh"
-
+#include <client/draw.qh>
+#include <client/hud/_mod.qh>
+#include <client/hud/panel/scoreboard.qh>
#include <common/mapinfo.qh>
+#include <common/util.qh>
// MapVote (#21)
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);
return mv_mouse_selection;
}
-vector prev_mousepos;
// draws map vote or gametype vote
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;
}
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);
}
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 )
{
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);
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);
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;
{
if (!first_digit)
{
+ if (!key_pressed)
+ return true;
first_digit = imp % 10;
return true;
}
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;