]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/gamemodes/gamemode/clanarena/cl_clanarena.qc
Merge branch 'master' into develop
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / gamemode / clanarena / cl_clanarena.qc
1 #include "cl_clanarena.qh"
2
3 #include <client/draw.qh>
4
5 #include <common/mutators/base.qh>
6
7 void HUD_Mod_CA_Export(int fh)
8 {
9         HUD_Write_Cvar("hud_panel_modicons_ca_layout");
10 }
11
12 REGISTER_MUTATOR(cl_ca, true);
13
14 MUTATOR_HOOKFUNCTION(cl_ca, DrawInfoMessages)
15 {
16         return (ISGAMETYPE(CA) && entcs_GetSpecState(player_localnum) == ENTCS_SPEC_IN_SCOREBOARD);
17 }
18
19 void DrawCAItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
20 {
21         TC(int, layout); TC(int, i);
22         int stat = -1;
23         string pic = "";
24         vector color = '0 0 0';
25         switch(i)
26         {
27                 case 0: stat = STAT(REDALIVE); pic = "player_red"; color = '1 0 0'; break;
28                 case 1: stat = STAT(BLUEALIVE); pic = "player_blue"; color = '0 0 1'; break;
29                 case 2: stat = STAT(YELLOWALIVE); pic = "player_yellow"; color = '1 1 0'; break;
30                 default:
31                 case 3: stat = STAT(PINKALIVE); pic = "player_pink"; color = '1 0 1'; break;
32         }
33
34         if(mySize.x/mySize.y > aspect_ratio)
35         {
36                 i = aspect_ratio * mySize.y;
37                 myPos.x = myPos.x + (mySize.x - i) / 2;
38                 mySize.x = i;
39         }
40         else
41         {
42                 i = 1/aspect_ratio * mySize.x;
43                 myPos.y = myPos.y + (mySize.y - i) / 2;
44                 mySize.y = i;
45         }
46
47         if(layout)
48         {
49                 drawpic_aspect_skin(myPos, pic, vec2(0.5 * mySize.x, mySize.y), '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
50                 drawstring_aspect(myPos + eX * 0.5 * mySize.x, ftos(stat), vec2(0.5 * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
51         }
52         else
53                 drawstring_aspect(myPos, ftos(stat), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL);
54 }
55
56 void HUD_Mod_CA_Draw(vector myPos, vector mySize, int layout)
57 {
58         int rows, columns;
59         float aspect_ratio;
60         aspect_ratio = (layout) ? 2 : 1;
61         rows = HUD_GetRowCount(team_count, mySize, aspect_ratio);
62         columns = ceil(team_count/rows);
63
64         int i;
65         float row = 0, column = 0;
66         vector pos = '0 0 0', itemSize;
67         itemSize = vec2(mySize.x / columns, mySize.y / rows);
68         for(i=0; i<team_count; ++i)
69         {
70                 pos.x = myPos.x + column * itemSize.x;
71                 pos.y = myPos.y + row * itemSize.y;
72
73                 DrawCAItem(pos, itemSize, aspect_ratio, layout, i);
74
75                 ++row;
76                 if(row >= rows)
77                 {
78                         row = 0;
79                         ++column;
80                 }
81         }
82 }
83
84 // Clan Arena and Freeze Tag HUD modicons
85 void HUD_Mod_CA(vector myPos, vector mySize)
86 {
87         mod_active = 1; // required in each mod function that always shows something
88
89         HUD_Mod_CA_Draw(myPos, mySize, autocvar_hud_panel_modicons_ca_layout);
90 }