1 /*
2 ===========================================================================
3 Copyright (C) 1999-2005 Id Software, Inc.
4
5 This file is part of Quake III Arena source code.
6
7 Quake III Arena source code is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
11
12 Quake III Arena source code is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with Quake III Arena source code; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 ===========================================================================
21 */
22 //
23 //
24 // ui_team.c
25 //
26
27 #include "ui_local.h"
28
29
30 #define TEAMMAIN_FRAME "menu/art/cut_frame"
31
32 #define ID_JOINRED 100
33 #define ID_JOINBLUE 101
34 #define ID_JOINGAME 102
35 #define ID_SPECTATE 103
36
37
38 typedef struct
39 {
40 menuframework_s menu;
41 menubitmap_s frame;
42 menutext_s joinred;
43 menutext_s joinblue;
44 menutext_s joingame;
45 menutext_s spectate;
46 } teammain_t;
47
48 static teammain_t s_teammain;
49
50 /*
51 ===============
52 TeamMain_MenuEvent
53 ===============
54 */
TeamMain_MenuEvent(void * ptr,int event)55 static void TeamMain_MenuEvent( void* ptr, int event ) {
56 if( event != QM_ACTIVATED ) {
57 return;
58 }
59
60 switch( ((menucommon_s*)ptr)->id ) {
61 case ID_JOINRED:
62 trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team red\n" );
63 UI_ForceMenuOff();
64 break;
65
66 case ID_JOINBLUE:
67 trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team blue\n" );
68 UI_ForceMenuOff();
69 break;
70
71 case ID_JOINGAME:
72 trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team free\n" );
73 UI_ForceMenuOff();
74 break;
75
76 case ID_SPECTATE:
77 trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team spectator\n" );
78 UI_ForceMenuOff();
79 break;
80 }
81 }
82
83
84 /*
85 ===============
86 TeamMain_MenuInit
87 ===============
88 */
TeamMain_MenuInit(void)89 void TeamMain_MenuInit( void ) {
90 int y;
91 int gametype;
92 char info[MAX_INFO_STRING];
93
94 memset( &s_teammain, 0, sizeof(s_teammain) );
95
96 TeamMain_Cache();
97
98 s_teammain.menu.wrapAround = qtrue;
99 s_teammain.menu.fullscreen = qfalse;
100
101 s_teammain.frame.generic.type = MTYPE_BITMAP;
102 s_teammain.frame.generic.flags = QMF_INACTIVE;
103 s_teammain.frame.generic.name = TEAMMAIN_FRAME;
104 s_teammain.frame.generic.x = 142;
105 s_teammain.frame.generic.y = 118;
106 s_teammain.frame.width = 359;
107 s_teammain.frame.height = 256;
108
109 y = 194;
110
111 s_teammain.joinred.generic.type = MTYPE_PTEXT;
112 s_teammain.joinred.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
113 s_teammain.joinred.generic.id = ID_JOINRED;
114 s_teammain.joinred.generic.callback = TeamMain_MenuEvent;
115 s_teammain.joinred.generic.x = 320;
116 s_teammain.joinred.generic.y = y;
117 s_teammain.joinred.string = "JOIN RED";
118 s_teammain.joinred.style = UI_CENTER|UI_SMALLFONT;
119 s_teammain.joinred.color = colorRed;
120 y += 20;
121
122 s_teammain.joinblue.generic.type = MTYPE_PTEXT;
123 s_teammain.joinblue.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
124 s_teammain.joinblue.generic.id = ID_JOINBLUE;
125 s_teammain.joinblue.generic.callback = TeamMain_MenuEvent;
126 s_teammain.joinblue.generic.x = 320;
127 s_teammain.joinblue.generic.y = y;
128 s_teammain.joinblue.string = "JOIN BLUE";
129 s_teammain.joinblue.style = UI_CENTER|UI_SMALLFONT;
130 s_teammain.joinblue.color = colorRed;
131 y += 20;
132
133 s_teammain.joingame.generic.type = MTYPE_PTEXT;
134 s_teammain.joingame.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
135 s_teammain.joingame.generic.id = ID_JOINGAME;
136 s_teammain.joingame.generic.callback = TeamMain_MenuEvent;
137 s_teammain.joingame.generic.x = 320;
138 s_teammain.joingame.generic.y = y;
139 s_teammain.joingame.string = "JOIN GAME";
140 s_teammain.joingame.style = UI_CENTER|UI_SMALLFONT;
141 s_teammain.joingame.color = colorRed;
142 y += 20;
143
144 s_teammain.spectate.generic.type = MTYPE_PTEXT;
145 s_teammain.spectate.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
146 s_teammain.spectate.generic.id = ID_SPECTATE;
147 s_teammain.spectate.generic.callback = TeamMain_MenuEvent;
148 s_teammain.spectate.generic.x = 320;
149 s_teammain.spectate.generic.y = y;
150 s_teammain.spectate.string = "SPECTATE";
151 s_teammain.spectate.style = UI_CENTER|UI_SMALLFONT;
152 s_teammain.spectate.color = colorRed;
153 y += 20;
154
155 trap_GetConfigString(CS_SERVERINFO, info, MAX_INFO_STRING);
156 gametype = atoi( Info_ValueForKey( info,"g_gametype" ) );
157
158 // set initial states
159 switch( gametype ) {
160 case GT_SINGLE_PLAYER:
161 case GT_FFA:
162 case GT_TOURNAMENT:
163 s_teammain.joinred.generic.flags |= QMF_GRAYED;
164 s_teammain.joinblue.generic.flags |= QMF_GRAYED;
165 break;
166
167 default:
168 case GT_TEAM:
169 case GT_CTF:
170 s_teammain.joingame.generic.flags |= QMF_GRAYED;
171 break;
172 }
173
174 Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.frame );
175 Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joinred );
176 Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joinblue );
177 Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joingame );
178 Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.spectate );
179 }
180
181
182 /*
183 ===============
184 TeamMain_Cache
185 ===============
186 */
TeamMain_Cache(void)187 void TeamMain_Cache( void ) {
188 trap_R_RegisterShaderNoMip( TEAMMAIN_FRAME );
189 }
190
191
192 /*
193 ===============
194 UI_TeamMainMenu
195 ===============
196 */
UI_TeamMainMenu(void)197 void UI_TeamMainMenu( void ) {
198 TeamMain_MenuInit();
199 UI_PushMenu ( &s_teammain.menu );
200 }
201