]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/hud/panel/chat.qc
Merge branch 'master' into Mario/overkill
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / chat.qc
1 #include "chat.qh"
2
3 // Chat (#12)
4
5 void HUD_Chat()
6 {
7         if(!autocvar__hud_configure)
8         {
9                 if (!autocvar_hud_panel_chat)
10                 {
11                         if (!autocvar_con_chatrect)
12                                 cvar_set("con_chatrect", "0");
13                         return;
14                 }
15                 if(autocvar__con_chat_maximized)
16                 {
17                         if(!hud_draw_maximized) return;
18                 }
19                 else if(chat_panel_modified)
20                 {
21                         panel.update_time = time; // forces reload of panel attributes
22                         chat_panel_modified = false;
23                 }
24         }
25
26         HUD_Panel_LoadCvars();
27
28         if(intermission == 2)
29         {
30                 // reserve some more space to the mapvote panel
31                 // by resizing and moving chat panel to the bottom
32                 panel_size.y = min(panel_size.y, vid_conheight * 0.2);
33                 panel_pos.y = vid_conheight - panel_size.y - panel_bg_border * 2;
34                 chat_posy = panel_pos.y;
35                 chat_sizey = panel_size.y;
36         }
37         if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
38         {
39                 panel_pos.y = panel_bg_border;
40                 panel_size.y = vid_conheight - panel_bg_border * 2;
41                 if(panel.current_panel_bg == "0") // force a border when maximized
42                 {
43                         string panel_bg;
44                         panel_bg = strcat(hud_skin_path, "/border_default");
45                         if(precache_pic(panel_bg) == "")
46                                 panel_bg = "gfx/hud/default/border_default";
47                         if(panel.current_panel_bg)
48                                 strunzone(panel.current_panel_bg);
49                         panel.current_panel_bg = strzone(panel_bg);
50                         chat_panel_modified = true;
51                 }
52                 panel_bg_alpha = max(0.75, panel_bg_alpha);
53         }
54
55         vector pos, mySize;
56         pos = panel_pos;
57         mySize = panel_size;
58
59         // chat messages don't scale properly since they are displayed directly by the engine
60         HUD_Scale_Disable();
61         HUD_Panel_DrawBg();
62
63         if(panel_bg_padding)
64         {
65                 pos += '1 1 0' * panel_bg_padding;
66                 mySize -= '2 2 0' * panel_bg_padding;
67         }
68
69         if (!autocvar_con_chatrect)
70                 cvar_set("con_chatrect", "1");
71
72         cvar_set("con_chatrect_x", ftos(pos.x/vid_conwidth));
73         cvar_set("con_chatrect_y", ftos(pos.y/vid_conheight));
74
75         cvar_set("con_chatwidth", ftos(mySize.x/vid_conwidth));
76         cvar_set("con_chat", ftos(floor(mySize.y/autocvar_con_chatsize - 0.5)));
77
78         if(autocvar__hud_configure)
79         {
80                 vector chatsize = '1 1 0' * autocvar_con_chatsize;
81                 cvar_set("con_chatrect_x", "9001"); // over 9000, we'll fake it instead for more control over alpha and such
82                 string str = textShortenToWidth(_("^3Player^7: This is the chat area."), mySize.x, chatsize, stringwidth_colors);
83                 for(int i = 0; i < autocvar_con_chat; ++i)
84                 {
85                         // engine displays chat text at full alpha
86                         drawcolorcodedstring(pos, str, chatsize, 1, DRAWFLAG_NORMAL);
87                         pos.y += chatsize.y;
88                 }
89         }
90 }