]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/hud/panel/infomessages.qc
Register score fields
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / infomessages.qc
1 #include "infomessages.qh"
2
3 #include <common/ent_cs.qh>
4 #include <common/mapinfo.qh>
5
6 // Info messages panel (#14)
7
8 #define drawInfoMessage(s) MACRO_BEGIN {                                                                                                                                                        \
9         if(autocvar_hud_panel_infomessages_flip)                                                                                                                                                \
10                 o.x = pos.x + mySize.x - stringwidth(s, true, fontsize);                                                                                                        \
11         drawcolorcodedstring(o, s, fontsize, a, DRAWFLAG_NORMAL);                                                                                                               \
12         o.y += fontsize.y;                                                                                                                                                                                              \
13 } MACRO_END
14 void HUD_InfoMessages()
15 {
16         if(!autocvar__hud_configure)
17         {
18                 if(!autocvar_hud_panel_infomessages) return;
19         }
20
21         HUD_Panel_UpdateCvars();
22         vector pos, mySize;
23         pos = panel_pos;
24         mySize = panel_size;
25
26         HUD_Panel_DrawBg(1);
27         if(panel_bg_padding)
28         {
29                 pos += '1 1 0' * panel_bg_padding;
30                 mySize -= '2 2 0' * panel_bg_padding;
31         }
32
33         // always force 5:1 aspect
34         vector newSize = '0 0 0';
35         if(mySize.x/mySize.y > 5)
36         {
37                 newSize.x = 5 * mySize.y;
38                 newSize.y = mySize.y;
39
40                 pos.x = pos.x + (mySize.x - newSize.x) / 2;
41         }
42         else
43         {
44                 newSize.y = 1/5 * mySize.x;
45                 newSize.x = mySize.x;
46
47                 pos.y = pos.y + (mySize.y - newSize.y) / 2;
48         }
49
50         mySize = newSize;
51         entity tm;
52         vector o;
53         o = pos;
54
55         vector fontsize;
56         fontsize = '0.20 0.20 0' * mySize.y;
57
58         float a;
59         a = panel_fg_alpha;
60
61         string s;
62         if(!autocvar__hud_configure)
63         {
64                 if(spectatee_status)
65                 {
66                         a = 1;
67                         if(spectatee_status == -1)
68                                 s = _("^1Observing");
69                         else
70                                 s = sprintf(_("^1Spectating: ^7%s"), entcs_GetName(current_player));
71                         drawInfoMessage(s);
72
73                         if(spectatee_status == -1)
74                                 s = sprintf(_("^1Press ^3%s^1 to spectate"), getcommandkey("primary fire", "+fire"));
75                         else
76                                 s = sprintf(_("^1Press ^3%s^1 or ^3%s^1 for next or previous player"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev"));
77                         drawInfoMessage(s);
78
79                         if(spectatee_status == -1)
80                                 s = sprintf(_("^1Use ^3%s^1 or ^3%s^1 to change the speed"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev"));
81                         else
82                                 s = sprintf(_("^1Press ^3%s^1 to observe"), getcommandkey("secondary fire", "+fire2"));
83                         drawInfoMessage(s);
84
85                         s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info"));
86                         drawInfoMessage(s);
87
88                         if(gametype == MAPINFO_TYPE_LMS)
89                         {
90                                 entity sk;
91                                 sk = playerslots[player_localnum];
92                                 if(sk.(scores(ps_primary)) >= 666)
93                                         s = _("^1Match has already begun");
94                                 else if(sk.(scores(ps_primary)) > 0)
95                                         s = _("^1You have no more lives left");
96                                 else
97                                         s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump"));
98                         }
99                         else
100                                 s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump"));
101                         drawInfoMessage(s);
102                 }
103
104                 if (time < STAT(GAMESTARTTIME))
105                 {
106                         //we need to ceil, otherwise the countdown would be off by .5 when using round()
107                         float countdown = ceil(STAT(GAMESTARTTIME) - time);
108                         s = sprintf(_("^1Game starts in ^3%d^1 seconds"), countdown);
109                         drawInfoMessage(s);
110                 }
111
112                 if(warmup_stage)
113                 {
114                         s = _("^2Currently in ^1warmup^2 stage!");
115                         drawInfoMessage(s);
116                 }
117
118                 string blinkcolor;
119                 if(time % 1 >= 0.5)
120                         blinkcolor = "^1";
121                 else
122                         blinkcolor = "^3";
123
124                 if(ready_waiting && !spectatee_status)
125                 {
126                         if(ready_waiting_for_me)
127                         {
128                                 if(warmup_stage)
129                                         s = sprintf(_("%sPress ^3%s%s to end warmup"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor);
130                                 else
131                                         s = sprintf(_("%sPress ^3%s%s once you are ready"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor);
132                         }
133                         else
134                         {
135                                 if(warmup_stage)
136                                         s = _("^2Waiting for others to ready up to end warmup...");
137                                 else
138                                         s = _("^2Waiting for others to ready up...");
139                         }
140                         drawInfoMessage(s);
141                 }
142                 else if(warmup_stage && !spectatee_status)
143                 {
144                         s = sprintf(_("^2Press ^3%s^2 to end warmup"), getcommandkey("ready", "ready"));
145                         drawInfoMessage(s);
146                 }
147
148                 if(teamplay && !spectatee_status && gametype != MAPINFO_TYPE_CA && teamnagger)
149                 {
150                         float ts_min = 0, ts_max = 0;
151                         tm = teams.sort_next;
152                         if (tm)
153                         {
154                                 for (; tm.sort_next; tm = tm.sort_next)
155                                 {
156                                         if(!tm.team_size || tm.team == NUM_SPECTATOR)
157                                                 continue;
158                                         if(!ts_min) ts_min = tm.team_size;
159                                         else ts_min = min(ts_min, tm.team_size);
160                                         if(!ts_max) ts_max = tm.team_size;
161                                         else ts_max = max(ts_max, tm.team_size);
162                                 }
163                                 if ((ts_max - ts_min) > 1)
164                                 {
165                                         s = strcat(blinkcolor, _("Teamnumbers are unbalanced!"));
166                                         tm = GetTeam(myteam, false);
167                                         if (tm)
168                                         if (tm.team != NUM_SPECTATOR)
169                                         if (tm.team_size == ts_max)
170                                                 s = strcat(s, sprintf(_(" Press ^3%s%s to adjust"), getcommandkey("team menu", "menu_showteamselect"), blinkcolor));
171                                         drawInfoMessage(s);
172                                 }
173                         }
174                 }
175         }
176         else
177         {
178                 s = _("^7Press ^3ESC ^7to show HUD options.");
179                 drawInfoMessage(s);
180                 s = _("^3Doubleclick ^7a panel for panel-specific options.");
181                 drawInfoMessage(s);
182                 s = _("^3CTRL ^7to disable collision testing, ^3SHIFT ^7and");
183                 drawInfoMessage(s);
184                 s = _("^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments.");
185                 drawInfoMessage(s);
186         }
187 }