1#include "chat.qh"
2
3// Chat (#12)
4
5void 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}
91