ui_spreset.c (4970B)
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 25 RESET MENU 26 27 ======================================================================= 28 */ 29 30 #include "ui_local.h" 31 32 33 #define ART_FRAME "menu/art/cut_frame" 34 35 #define ID_NO 100 36 #define ID_YES 101 37 38 typedef struct 39 { 40 menuframework_s menu; 41 menutext_s no; 42 menutext_s yes; 43 int slashX; 44 } resetMenu_t; 45 46 static resetMenu_t s_reset; 47 48 49 /* 50 ================= 51 Reset_MenuEvent 52 ================= 53 */ 54 void Reset_MenuEvent(void* ptr, int event) { 55 if( event != QM_ACTIVATED ) { 56 return; 57 } 58 59 UI_PopMenu(); 60 61 if( ((menucommon_s*)ptr)->id == ID_NO ) { 62 return; 63 } 64 65 // reset the game, pop the level menu and restart it so it updates 66 UI_NewGame(); 67 trap_Cvar_SetValue( "ui_spSelection", 0 ); 68 UI_PopMenu(); 69 UI_SPLevelMenu(); 70 } 71 72 73 /* 74 ================= 75 Reset_MenuKey 76 ================= 77 */ 78 static sfxHandle_t Reset_MenuKey( int key ) { 79 switch ( key ) { 80 case K_KP_LEFTARROW: 81 case K_LEFTARROW: 82 case K_KP_RIGHTARROW: 83 case K_RIGHTARROW: 84 key = K_TAB; 85 break; 86 87 case 'n': 88 case 'N': 89 Reset_MenuEvent( &s_reset.no, QM_ACTIVATED ); 90 break; 91 92 case 'y': 93 case 'Y': 94 Reset_MenuEvent( &s_reset.yes, QM_ACTIVATED ); 95 break; 96 } 97 98 return Menu_DefaultKey( &s_reset.menu, key ); 99 } 100 101 102 /* 103 ================= 104 Reset_MenuDraw 105 ================= 106 */ 107 static void Reset_MenuDraw( void ) { 108 UI_DrawNamedPic( 142, 118, 359, 256, ART_FRAME ); 109 UI_DrawProportionalString( 320, 194 + 10, "RESET GAME?", UI_CENTER|UI_INVERSE, color_red ); 110 UI_DrawProportionalString( s_reset.slashX, 265, "/", UI_LEFT|UI_INVERSE, color_red ); 111 Menu_Draw( &s_reset.menu ); 112 113 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 0, "WARNING: This resets all of the", UI_CENTER|UI_SMALLFONT, color_yellow ); 114 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 1, "single player game variables.", UI_CENTER|UI_SMALLFONT, color_yellow ); 115 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 2, "Do this only if you want to", UI_CENTER|UI_SMALLFONT, color_yellow ); 116 UI_DrawProportionalString( SCREEN_WIDTH/2, 356 + PROP_HEIGHT * 3, "start over from the beginning.", UI_CENTER|UI_SMALLFONT, color_yellow ); 117 } 118 119 120 /* 121 ================= 122 Reset_Cache 123 ================= 124 */ 125 void Reset_Cache( void ) { 126 trap_R_RegisterShaderNoMip( ART_FRAME ); 127 } 128 129 130 /* 131 ================= 132 UI_ResetMenu 133 ================= 134 */ 135 void UI_ResetMenu(void) { 136 uiClientState_t cstate; 137 int n1, n2, n3; 138 int l1, l2, l3; 139 140 // zero set all our globals 141 memset( &s_reset, 0, sizeof(s_reset) ); 142 143 Reset_Cache(); 144 145 n1 = UI_ProportionalStringWidth( "YES/NO" ); 146 n2 = UI_ProportionalStringWidth( "YES" ) + PROP_GAP_WIDTH; 147 n3 = UI_ProportionalStringWidth( "/" ) + PROP_GAP_WIDTH; 148 l1 = 320 - ( n1 / 2 ); 149 l2 = l1 + n2; 150 l3 = l2 + n3; 151 s_reset.slashX = l2; 152 153 s_reset.menu.draw = Reset_MenuDraw; 154 s_reset.menu.key = Reset_MenuKey; 155 s_reset.menu.wrapAround = qtrue; 156 157 trap_GetClientState( &cstate ); 158 159 if ( cstate.connState >= CA_CONNECTED ) { 160 // float on top of running game 161 s_reset.menu.fullscreen = qfalse; 162 } 163 else { 164 // game not running 165 s_reset.menu.fullscreen = qtrue; 166 } 167 168 s_reset.yes.generic.type = MTYPE_PTEXT; 169 s_reset.yes.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; 170 s_reset.yes.generic.callback = Reset_MenuEvent; 171 s_reset.yes.generic.id = ID_YES; 172 s_reset.yes.generic.x = l1; 173 s_reset.yes.generic.y = 264; 174 s_reset.yes.string = "YES"; 175 s_reset.yes.color = color_red; 176 s_reset.yes.style = UI_LEFT; 177 178 s_reset.no.generic.type = MTYPE_PTEXT; 179 s_reset.no.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS; 180 s_reset.no.generic.callback = Reset_MenuEvent; 181 s_reset.no.generic.id = ID_NO; 182 s_reset.no.generic.x = l3; 183 s_reset.no.generic.y = 264; 184 s_reset.no.string = "NO"; 185 s_reset.no.color = color_red; 186 s_reset.no.style = UI_LEFT; 187 188 Menu_AddItem( &s_reset.menu, &s_reset.yes ); 189 Menu_AddItem( &s_reset.menu, &s_reset.no ); 190 191 UI_PushMenu( &s_reset.menu ); 192 193 Menu_SetCursorToItem( &s_reset.menu, &s_reset.no ); 194 }