]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/gamemodes/gamemode/domination/cl_domination.qc
Merge branch 'master' into terencehill/lms_updates
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / gamemodes / gamemode / domination / cl_domination.qc
1 #include "cl_domination.qh"
2
3 #include <client/draw.qh>
4 #include <client/hud/panel/modicons.qh>
5
6 void HUD_Mod_Dom_Export(int fh)
7 {
8         HUD_Write_Cvar("hud_panel_modicons_dom_layout");
9 }
10
11 int autocvar_hud_panel_modicons_dom_layout;
12
13 void DrawDomItem(vector myPos, vector mySize, float aspect_ratio, int layout, int i)
14 {
15         TC(int, layout); TC(int, i);
16         float stat = -1;
17         string pic = "";
18         vector color = '0 0 0';
19         switch(i)
20         {
21                 case 0: stat = STAT(DOM_PPS_RED); pic = "dom_icon_red"; color = '1 0 0'; break;
22                 case 1: stat = STAT(DOM_PPS_BLUE); pic = "dom_icon_blue"; color = '0 0 1'; break;
23                 case 2: stat = STAT(DOM_PPS_YELLOW); pic = "dom_icon_yellow"; color = '1 1 0'; break;
24                 default:
25                 case 3: stat = STAT(DOM_PPS_PINK); pic = "dom_icon_pink"; color = '1 0 1'; break;
26         }
27         float pps_ratio = 0;
28         if(STAT(DOM_TOTAL_PPS))
29                 pps_ratio = stat / STAT(DOM_TOTAL_PPS);
30
31         if(mySize.x/mySize.y > aspect_ratio)
32         {
33                 i = aspect_ratio * mySize.y;
34                 myPos.x = myPos.x + (mySize.x - i) / 2;
35                 mySize.x = i;
36         }
37         else
38         {
39                 i = 1/aspect_ratio * mySize.x;
40                 myPos.y = myPos.y + (mySize.y - i) / 2;
41                 mySize.y = i;
42         }
43
44         if (layout) // show text too
45         {
46                 //draw the text
47                 color *= 0.5 + pps_ratio * (1 - 0.5); // half saturated color at min, full saturated at max
48                 if (layout == 2) // average pps
49                         drawstring_aspect(myPos + eX * mySize.y, ftos_decimals(stat, 2), vec2((2/3) * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
50                 else // percentage of average pps
51                         drawstring_aspect(myPos + eX * mySize.y, strcat( ftos(floor(pps_ratio*100 + 0.5)), "%" ), vec2((2/3) * mySize.x, mySize.y), color, panel_fg_alpha, DRAWFLAG_NORMAL);
52         }
53
54         //draw the icon
55         drawpic_aspect_skin(myPos, pic, '1 1 0' * mySize.y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
56         if (stat > 0)
57         {
58                 drawsetcliparea(myPos.x, myPos.y + mySize.y * (1 - pps_ratio), mySize.y, mySize.y * pps_ratio);
59                 drawpic_aspect_skin(myPos, strcat(pic, "-highlighted"), '1 1 0' * mySize.y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
60                 drawresetcliparea();
61         }
62 }
63
64 void HUD_Mod_Dom(vector myPos, vector mySize)
65 {
66         mod_active = 1; // required in each mod function that always shows something
67
68         int layout = autocvar_hud_panel_modicons_dom_layout;
69         int rows, columns;
70         float aspect_ratio;
71         aspect_ratio = (layout) ? 3 : 1;
72         rows = HUD_GetRowCount(team_count, mySize, aspect_ratio);
73         columns = ceil(team_count/rows);
74
75         int i;
76         float row = 0, column = 0;
77         vector pos, itemSize;
78         itemSize = vec2(mySize.x / columns, mySize.y / rows);
79         for(i=0; i<team_count; ++i)
80         {
81                 pos = myPos + vec2(column * itemSize.x, row * itemSize.y);
82
83                 DrawDomItem(pos, itemSize, aspect_ratio, layout, i);
84
85                 ++row;
86                 if(row >= rows)
87                 {
88                         row = 0;
89                         ++column;
90                 }
91         }
92 }