]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/hud/panel/vote.qc
Header police
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / vote.qc
1 #include "vote.qh"
2 /** Vote window (#9) */
3 void HUD_Vote()
4 {
5         if(autocvar_cl_allow_uid2name == -1 && (gametype == MAPINFO_TYPE_CTS || gametype == MAPINFO_TYPE_RACE || (serverflags & SERVERFLAG_PLAYERSTATS)))
6         {
7                 vote_active = 1;
8                 if (autocvar__hud_configure)
9                 {
10                         vote_yescount = 0;
11                         vote_nocount = 0;
12                         LOG_INFO(_("^1You must answer before entering hud configure mode\n"));
13                         cvar_set("_hud_configure", "0");
14                 }
15                 if(vote_called_vote)
16                         strunzone(vote_called_vote);
17                 vote_called_vote = strzone(_("^2Name ^7instead of \"^1Anonymous player^7\" in stats"));
18                 uid2name_dialog = 1;
19         }
20
21         if(!autocvar__hud_configure)
22         {
23                 if(!autocvar_hud_panel_vote) return;
24
25                 panel_fg_alpha = autocvar_hud_panel_fg_alpha;
26                 panel_bg_alpha_str = autocvar_hud_panel_vote_bg_alpha;
27
28                 if(panel_bg_alpha_str == "") {
29                         panel_bg_alpha_str = ftos(autocvar_hud_panel_bg_alpha);
30                 }
31                 panel_bg_alpha = stof(panel_bg_alpha_str);
32         }
33         else
34         {
35                 vote_yescount = 3;
36                 vote_nocount = 2;
37                 vote_needed = 4;
38         }
39
40         string s;
41         float a;
42         if(vote_active != vote_prev) {
43                 vote_change = time;
44                 vote_prev = vote_active;
45         }
46
47         if(vote_active || autocvar__hud_configure)
48                 vote_alpha = bound(0, (time - vote_change) * 2, 1);
49         else
50                 vote_alpha = bound(0, 1 - (time - vote_change) * 2, 1);
51
52         if(!vote_alpha)
53                 return;
54
55         HUD_Panel_UpdateCvars();
56
57         if(uid2name_dialog)
58         {
59                 panel_pos = eX * 0.3 * vid_conwidth + eY * 0.1 * vid_conheight;
60                 panel_size = eX * 0.4 * vid_conwidth + eY * 0.3 * vid_conheight;
61         }
62
63     // these must be below above block
64         vector pos, mySize;
65         pos = panel_pos;
66         mySize = panel_size;
67
68         a = vote_alpha * (vote_highlighted ? autocvar_hud_panel_vote_alreadyvoted_alpha : 1);
69         HUD_Panel_DrawBg(a);
70         a = panel_fg_alpha * a;
71
72         if(panel_bg_padding)
73         {
74                 pos += '1 1 0' * panel_bg_padding;
75                 mySize -= '2 2 0' * panel_bg_padding;
76         }
77
78         // always force 3:1 aspect
79         vector newSize = '0 0 0';
80         if(mySize.x/mySize.y > 3)
81         {
82                 newSize.x = 3 * mySize.y;
83                 newSize.y = mySize.y;
84
85                 pos.x = pos.x + (mySize.x - newSize.x) / 2;
86         }
87         else
88         {
89                 newSize.y = 1/3 * mySize.x;
90                 newSize.x = mySize.x;
91
92                 pos.y = pos.y + (mySize.y - newSize.y) / 2;
93         }
94         mySize = newSize;
95
96         s = _("A vote has been called for:");
97         if(uid2name_dialog)
98                 s = _("Allow servers to store and display your name?");
99         drawstring_aspect(pos, s, eX * mySize.x + eY * (2/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
100         s = textShortenToWidth(vote_called_vote, mySize.x, '1 1 0' * mySize.y * (1/8), stringwidth_colors);
101         if(autocvar__hud_configure)
102                 s = _("^1Configure the HUD");
103         drawcolorcodedstring_aspect(pos + eY * (2/8) * mySize.y, s, eX * mySize.x + eY * (1.75/8) * mySize.y, a, DRAWFLAG_NORMAL);
104
105         // print the yes/no counts
106     s = sprintf(_("Yes (%s): %d"), getcommandkey("vyes", "vyes"), vote_yescount);
107         drawstring_aspect(pos + eY * (4/8) * mySize.y, s, eX * 0.5 * mySize.x + eY * (1.5/8) * mySize.y, '0 1 0', a, DRAWFLAG_NORMAL);
108     s = sprintf(_("No (%s): %d"), getcommandkey("vno", "vno"), vote_nocount);
109         drawstring_aspect(pos + eX * 0.5 * mySize.x + eY * (4/8) * mySize.y, s, eX * 0.5 * mySize.x + eY * (1.5/8) * mySize.y, '1 0 0', a, DRAWFLAG_NORMAL);
110
111         // draw the progress bar backgrounds
112         drawpic_skin(pos + eY * (5/8) * mySize.y, "voteprogress_back", eX * mySize.x + eY * (3/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
113
114         // draw the highlights
115         if(vote_highlighted == 1) {
116                 drawsetcliparea(pos.x, pos.y, mySize.x * 0.5, mySize.y);
117                 drawpic_skin(pos + eY * (5/8) * mySize.y, "voteprogress_voted", eX * mySize.x + eY * (3/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
118         }
119         else if(vote_highlighted == -1) {
120                 drawsetcliparea(pos.x + 0.5 * mySize.x, pos.y, mySize.x * 0.5, mySize.y);
121                 drawpic_skin(pos + eY * (5/8) * mySize.y, "voteprogress_voted", eX * mySize.x + eY * (3/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
122         }
123
124         // draw the progress bars
125         if(vote_yescount && vote_needed)
126         {
127                 drawsetcliparea(pos.x, pos.y, mySize.x * 0.5 * (vote_yescount/vote_needed), mySize.y);
128                 drawpic_skin(pos + eY * (5/8) * mySize.y, "voteprogress_prog", eX * mySize.x + eY * (3/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
129         }
130
131         if(vote_nocount && vote_needed)
132         {
133                 drawsetcliparea(pos.x + mySize.x - mySize.x * 0.5 * (vote_nocount/vote_needed), pos.y, mySize.x * 0.5, mySize.y);
134                 drawpic_skin(pos + eY * (5/8) * mySize.y, "voteprogress_prog", eX * mySize.x + eY * (3/8) * mySize.y, '1 1 1', a, DRAWFLAG_NORMAL);
135         }
136
137         drawresetcliparea();
138 }