Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

ui_team.c (5971B)


      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 Foobar; 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 // bk001204 - unused
     51 //static menuframework_s	s_teammain_menu;
     52 //static menuaction_s		s_teammain_orders;
     53 //static menuaction_s		s_teammain_voice;
     54 //static menuaction_s		s_teammain_joinred;
     55 //static menuaction_s		s_teammain_joinblue;
     56 //static menuaction_s		s_teammain_joingame;
     57 //static menuaction_s		s_teammain_spectate;
     58 
     59 
     60 /*
     61 ===============
     62 TeamMain_MenuEvent
     63 ===============
     64 */
     65 static void TeamMain_MenuEvent( void* ptr, int event ) {
     66 	if( event != QM_ACTIVATED ) {
     67 		return;
     68 	}
     69 
     70 	switch( ((menucommon_s*)ptr)->id ) {
     71 	case ID_JOINRED:
     72 		trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team red\n" );
     73 		UI_ForceMenuOff();
     74 		break;
     75 
     76 	case ID_JOINBLUE:
     77 		trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team blue\n" );
     78 		UI_ForceMenuOff();
     79 		break;
     80 
     81 	case ID_JOINGAME:
     82 		trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team free\n" );
     83 		UI_ForceMenuOff();
     84 		break;
     85 
     86 	case ID_SPECTATE:
     87 		trap_Cmd_ExecuteText( EXEC_APPEND, "cmd team spectator\n" );
     88 		UI_ForceMenuOff();
     89 		break;
     90 	}
     91 }
     92 
     93 
     94 /*
     95 ===============
     96 TeamMain_MenuInit
     97 ===============
     98 */
     99 void TeamMain_MenuInit( void ) {
    100 	int		y;
    101 	int		gametype;
    102 	char	info[MAX_INFO_STRING];
    103 
    104 	memset( &s_teammain, 0, sizeof(s_teammain) );
    105 
    106 	TeamMain_Cache();
    107 
    108 	s_teammain.menu.wrapAround = qtrue;
    109 	s_teammain.menu.fullscreen = qfalse;
    110 
    111 	s_teammain.frame.generic.type   = MTYPE_BITMAP;
    112 	s_teammain.frame.generic.flags	= QMF_INACTIVE;
    113 	s_teammain.frame.generic.name   = TEAMMAIN_FRAME;
    114 	s_teammain.frame.generic.x		= 142;
    115 	s_teammain.frame.generic.y		= 118;
    116 	s_teammain.frame.width			= 359;
    117 	s_teammain.frame.height			= 256;
    118 
    119 	y = 194;
    120 
    121 	s_teammain.joinred.generic.type     = MTYPE_PTEXT;
    122 	s_teammain.joinred.generic.flags    = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    123 	s_teammain.joinred.generic.id       = ID_JOINRED;
    124 	s_teammain.joinred.generic.callback = TeamMain_MenuEvent;
    125 	s_teammain.joinred.generic.x        = 320;
    126 	s_teammain.joinred.generic.y        = y;
    127 	s_teammain.joinred.string           = "JOIN RED";
    128 	s_teammain.joinred.style            = UI_CENTER|UI_SMALLFONT;
    129 	s_teammain.joinred.color            = colorRed;
    130 	y += 20;
    131 
    132 	s_teammain.joinblue.generic.type     = MTYPE_PTEXT;
    133 	s_teammain.joinblue.generic.flags    = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    134 	s_teammain.joinblue.generic.id       = ID_JOINBLUE;
    135 	s_teammain.joinblue.generic.callback = TeamMain_MenuEvent;
    136 	s_teammain.joinblue.generic.x        = 320;
    137 	s_teammain.joinblue.generic.y        = y;
    138 	s_teammain.joinblue.string           = "JOIN BLUE";
    139 	s_teammain.joinblue.style            = UI_CENTER|UI_SMALLFONT;
    140 	s_teammain.joinblue.color            = colorRed;
    141 	y += 20;
    142 
    143 	s_teammain.joingame.generic.type     = MTYPE_PTEXT;
    144 	s_teammain.joingame.generic.flags    = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    145 	s_teammain.joingame.generic.id       = ID_JOINGAME;
    146 	s_teammain.joingame.generic.callback = TeamMain_MenuEvent;
    147 	s_teammain.joingame.generic.x        = 320;
    148 	s_teammain.joingame.generic.y        = y;
    149 	s_teammain.joingame.string           = "JOIN GAME";
    150 	s_teammain.joingame.style            = UI_CENTER|UI_SMALLFONT;
    151 	s_teammain.joingame.color            = colorRed;
    152 	y += 20;
    153 
    154 	s_teammain.spectate.generic.type     = MTYPE_PTEXT;
    155 	s_teammain.spectate.generic.flags    = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
    156 	s_teammain.spectate.generic.id       = ID_SPECTATE;
    157 	s_teammain.spectate.generic.callback = TeamMain_MenuEvent;
    158 	s_teammain.spectate.generic.x        = 320;
    159 	s_teammain.spectate.generic.y        = y;
    160 	s_teammain.spectate.string           = "SPECTATE";
    161 	s_teammain.spectate.style            = UI_CENTER|UI_SMALLFONT;
    162 	s_teammain.spectate.color            = colorRed;
    163 	y += 20;
    164 
    165 	trap_GetConfigString(CS_SERVERINFO, info, MAX_INFO_STRING);   
    166 	gametype = atoi( Info_ValueForKey( info,"g_gametype" ) );
    167 			      
    168 	// set initial states
    169 	switch( gametype ) {
    170 	case GT_SINGLE_PLAYER:
    171 	case GT_FFA:
    172 	case GT_TOURNAMENT:
    173 		s_teammain.joinred.generic.flags  |= QMF_GRAYED;
    174 		s_teammain.joinblue.generic.flags |= QMF_GRAYED;
    175 		break;
    176 
    177 	default:
    178 	case GT_TEAM:
    179 	case GT_CTF:
    180 		s_teammain.joingame.generic.flags |= QMF_GRAYED;
    181 		break;
    182 	}
    183 
    184 	Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.frame );
    185 	Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joinred );
    186 	Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joinblue );
    187 	Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.joingame );
    188 	Menu_AddItem( &s_teammain.menu, (void*) &s_teammain.spectate );
    189 }
    190 
    191 
    192 /*
    193 ===============
    194 TeamMain_Cache
    195 ===============
    196 */
    197 void TeamMain_Cache( void ) {
    198 	trap_R_RegisterShaderNoMip( TEAMMAIN_FRAME );
    199 }
    200 
    201 
    202 /*
    203 ===============
    204 UI_TeamMainMenu
    205 ===============
    206 */
    207 void UI_TeamMainMenu( void ) {
    208 	TeamMain_MenuInit();
    209 	UI_PushMenu ( &s_teammain.menu );
    210 }