#include "mapvoting.qh"
-#include "_all.qh"
#include "hud.qh"
#include "scoreboard.qh"
#include "../common/mapinfo.qh"
-#include "../common/util.qh"
-
-#include "../dpdefs/keycodes.qh"
int mv_num_maps;
-float mv_active;
string mv_maps[MAPVOTE_COUNT];
string mv_pics[MAPVOTE_COUNT];
string mv_pk3[MAPVOTE_COUNT]; // map pk3 name or gametype human readable name
void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, string pic, float _count, int id)
{
vector img_size = '0 0 0';
- vector rgb;
string label;
float text_size;
- rgb = MapVote_RGB(id);
+ float rect_margin = hud_fontsize.y / 2;
- float padding = hud_fontsize.y / 2;
+ pos.x += rect_margin + autocvar_scoreboard_border_thickness;
+ pos.y += rect_margin + autocvar_scoreboard_border_thickness;
+ isize -= 2 * (rect_margin + autocvar_scoreboard_border_thickness);
+ tsize -= 2 * (rect_margin + autocvar_scoreboard_border_thickness);
- pos.x += padding;
- pos.y += padding;
- isize -= 2 * padding;
- tsize -= 2 * padding;
+ vector rect_pos = pos - '0.5 0.5 0' * rect_margin;
+ vector rect_size = '1 1 0';
+ rect_size.x = tsize + rect_margin;
+ rect_size.y = isize + rect_margin;
float img_ar = 4/3;
img_size.x = min(tsize, isize * img_ar);
img_size.y = img_size.x / img_ar;
- img_size.y -= hud_fontsize.y - autocvar_scoreboard_border_thickness * 2;
+ img_size.y -= hud_fontsize.y;
img_size.x = img_size.y * img_ar;
pos.y += (isize - img_size.y - hud_fontsize.y) / 2;
text_size = stringwidth(label, false, hud_fontsize);
+ float save_rect_sizex = rect_size.x;
+ rect_size.x = max(img_size.x, text_size) + rect_margin;
+ rect_pos.x += (save_rect_sizex - rect_size.x) / 2;
+
vector text_pos = '0 0 0';
text_pos.x = pos.x + (tsize - text_size) / 2;
- text_pos.y = pos.y + img_size.y + autocvar_scoreboard_border_thickness;
+ text_pos.y = pos.y + img_size.y;
pos.x += (tsize - img_size.x) / 2;
theAlpha = mv_top2_alpha;
else
theAlpha = 1;
+
+ // Highlight selected item
+ if(id == mv_selection && (mv_flags[id] & GTV_AVAILABLE))
+ drawfill(rect_pos, rect_size, '1 1 1', 0.1, DRAWFLAG_NORMAL);
+
+ // Highlight current vote
+ vector rgb = MapVote_RGB(id);
+ if(id == mv_ownvote)
+ {
+ drawfill(rect_pos, rect_size, rgb, 0.1*theAlpha, DRAWFLAG_NORMAL);
+ drawborderlines(autocvar_scoreboard_border_thickness, rect_pos, rect_size, rgb, theAlpha, DRAWFLAG_NORMAL);
+ }
+
drawstring(text_pos, label, hud_fontsize, rgb, theAlpha, DRAWFLAG_NORMAL);
if(pic == "")
else
drawpic(pos, pic, img_size, '1 1 1', theAlpha, DRAWFLAG_NORMAL);
}
-
- if(id == mv_ownvote)
- drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, rgb, theAlpha, DRAWFLAG_NORMAL);
- else
- drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', theAlpha, DRAWFLAG_NORMAL);
-
- if(id == mv_selection && (mv_flags[id] & GTV_AVAILABLE))
- drawfill(pos, img_size, '1 1 1', 0.1, DRAWFLAG_NORMAL);
}
void MapVote_DrawAbstain(vector pos, float isize, float tsize, float _count, int id)
}
center = (vid_conwidth - 1)/2;
- xmin = vid_conwidth*0.05; // 5% border must suffice
+ xmin = vid_conwidth * 0.08;
xmax = vid_conwidth - xmin;
ymin = 20;
- i = autocvar_con_chatpos; // *autocvar_con_chatsize;
- if(i < 0)
- ymax = vid_conheight + (i - autocvar_con_chat) * autocvar_con_chatsize;
- if(i >= 0 || ymax < (vid_conheight*0.5))
- ymax = vid_conheight - ymin;
+ ymax = vid_conheight - ymin;
+
+ if(chat_posy + chat_sizey / 2 < vid_conheight / 2)
+ ymin += chat_sizey;
+ else
+ ymax -= chat_sizey;
hud_fontsize = HUD_GetFontsize("hud_fontsize");
pos.y += hud_fontsize.y * 1.5;
pos.y += hud_fontsize.y * 0.5;
+ HUD_Panel_UpdateCvars();
+
// base for multi-column stuff...
pos.y += hud_fontsize.y;
pos.x = xmin;
ymin = pos.y;
+ float abstain_spacing = panel_bg_border + hud_fontsize.y;
if(mv_abstain)
+ {
mv_num_maps -= 1;
-
- HUD_Panel_UpdateCvars();
+ ymax -= abstain_spacing;
+ }
// higher than the image itself ratio for mapvote items to reserve space for long map names
int item_aspect = (gametypevote) ? 3/1 : 5/3;
if(mv_abstain && i < mv_num_maps) {
tmp = mv_votes[i];
- pos.y = ymax + 2 * hud_fontsize.y;
+ pos.y = ymax + abstain_spacing;
pos.x = (xmax+xmin)*0.5;
MapVote_DrawAbstain(pos, dist.x, xmax - xmin, tmp, i);
}
if(argc != 2 || !mv_pk3list)
{
- print(_("mv_mapdownload: ^3You're not supposed to use this command on your own!\n"));
+ LOG_INFO(_("mv_mapdownload: ^3You're not supposed to use this command on your own!\n"));
return;
}
break;
if(!pak || pak.sv_entnum != id) {
- print(_("^1Error:^7 Couldn't find pak index.\n"));
+ LOG_INFO(_("^1Error:^7 Couldn't find pak index.\n"));
return;
}
mv_preview[id] = true;
return;
} else {
- print(_("Requesting preview...\n"));
+ LOG_INFO(_("Requesting preview...\n"));
localcmd(strcat("\ncmd mv_getpicture ", ftos(id), "\n"));
}
}
void MapVote_Init()
{
- precache_sound ("misc/invshot.wav");
-
mv_active = 1;
if(autocvar_hud_cursormode) { setcursormode(1); }
else { mv_mousepos = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; }
void Ent_MapVote()
{
+ make_pure(self);
int sf = ReadByte();
if(sf & 1)
MapVote_UpdateVotes();
}
+NET_HANDLE(TE_CSQC_PICTURE, bool isNew)
+{
+ Net_MapVote_Picture();
+ return true;
+}
+
void Net_MapVote_Picture()
{
int type = ReadByte();