Update menu

This commit is contained in:
Alibek Omarov (a1batross) 2017-03-31 19:54:29 +03:00
parent 3f021e4dcd
commit ff7d8951ab
17 changed files with 426 additions and 569 deletions

View File

@ -1475,7 +1475,6 @@ void UI_Precache( void )
UI_Audio_Precache();
UI_Video_Precache();
UI_VidOptions_Precache();
UI_VidModes_Precache();
UI_Credits_Precache();
UI_Touch_Precache();
UI_TouchOptions_Precache();
@ -1679,6 +1678,8 @@ int UI_VidInit( void )
return 1;
}
void UI_ShowMessageBox( void );
/*
=================
UI_Init
@ -1705,9 +1706,8 @@ void UI_Init( void )
Cmd_AddCommand( "menu_creategame", UI_CreateGame_Menu );
Cmd_AddCommand( "menu_gamepad", UI_GamePad_Menu );
Cmd_AddCommand( "menu_audio", UI_Audio_Menu );
Cmd_AddCommand( "menu_video", UI_Video_Menu );
Cmd_AddCommand( "menu_video", UI_VidOptions_Menu );
Cmd_AddCommand( "menu_vidoptions", UI_VidOptions_Menu );
Cmd_AddCommand( "menu_vidmodes", UI_VidModes_Menu );
Cmd_AddCommand( "menu_touch", UI_Touch_Menu );
Cmd_AddCommand( "menu_touchoptions", UI_TouchOptions_Menu );
Cmd_AddCommand( "menu_touchbuttons", UI_TouchButtons_Menu );
@ -1716,6 +1716,7 @@ void UI_Init( void )
Cmd_AddCommand( "menu_playrec", UI_PlayRec_Menu );
Cmd_AddCommand( "menu_playdemo", UI_PlayDemo_Menu );
Cmd_AddCommand( "menu_recdemo", UI_RecDemo_Menu );
Cmd_AddCommand( "menu_showmessagebox", UI_ShowMessageBox );
#ifdef __ANDROID__
Cmd_RemoveCommand( "evdev_mouseopen" );
@ -1770,6 +1771,7 @@ void UI_Shutdown( void )
Cmd_RemoveCommand( "menu_playrec" );
Cmd_RemoveCommand( "menu_playdemo" );
Cmd_RemoveCommand( "menu_recdemo" );
Cmd_RemoveCommand( "menu_showmessagebox" );
memset( &uiStatic, 0, sizeof( uiStatic_t ));
}

View File

@ -471,7 +471,6 @@ void UI_CreateGame_Precache( void );
void UI_Audio_Precache( void );
void UI_Video_Precache( void );
void UI_VidOptions_Precache( void );
void UI_VidModes_Precache( void );
void UI_CustomGame_Precache( void );
void UI_Credits_Precache( void );
void UI_GoToSite_Precache( void );
@ -501,7 +500,6 @@ void UI_AdvControls_Menu( void );
void UI_GameOptions_Menu( void );
void UI_CreateGame_Menu( void );
void UI_Audio_Menu( void );
void UI_Video_Menu( void );
void UI_VidOptions_Menu( void );
void UI_VidModes_Menu( void );
void UI_CustomGame_Menu( void );

View File

@ -175,6 +175,7 @@ static void UI_AdvControls_Callback( void *self, int event )
switch( item->id )
{
case ID_DONE:
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
UI_PopMenu();
break;
}

View File

@ -167,6 +167,7 @@ static void UI_Audio_Callback( void *self, int event )
switch( item->id )
{
case ID_DONE:
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
UI_PopMenu();
break;
}

View File

@ -134,7 +134,7 @@ static void UI_Options_Callback( void *self, int event )
UI_Audio_Menu();
break;
case ID_VIDEO:
UI_Video_Menu();
UI_VidOptions_Menu();
break;
case ID_TOUCH:
UI_Touch_Menu();

View File

@ -423,6 +423,7 @@ static void UI_Controls_Callback( void *self, int event )
switch( item->id )
{
case ID_DONE:
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
case ID_CANCEL:
UI_PopMenu();
break;

View File

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_MAXCLIENTS 7
#define ID_HOSTNAME 8
#define ID_PASSWORD 9
#define ID_HLTV 10
#define ID_NAT 10
#define ID_DEDICATED 11
#define ID_MSGBOX 12
@ -64,7 +64,7 @@ typedef struct
menuField_s maxClients;
menuField_s hostName;
menuField_s password;
menuCheckBox_s hltv;
menuCheckBox_s nat;
menuCheckBox_s dedicatedServer;
// newgame prompt dialog
@ -103,7 +103,7 @@ static void UI_CreateGame_Begin( void )
CVAR_SET_FLOAT( "maxplayers", atoi( uiCreateGame.maxClients.buffer ));
CVAR_SET_STRING( "hostname", uiCreateGame.hostName.buffer );
CVAR_SET_STRING( "defaultmap", uiCreateGame.mapName[uiCreateGame.mapsList.curItem] );
CVAR_SET_FLOAT( "hltv", uiCreateGame.hltv.enabled );
CVAR_SET_FLOAT( "sv_nat", CVAR_GET_FLOAT("public")?uiCreateGame.nat.enabled:0 );
BACKGROUND_TRACK( NULL, NULL );
@ -125,14 +125,14 @@ static void UI_CreateGame_Begin( void )
char cmd[128];
sprintf( cmd, "exec %s\n", CVAR_GET_STRING( "lservercfgfile" ) );
CLIENT_COMMAND( TRUE, cmd );
// dirty listenserver config form old xash may rewrite maxplayers
CVAR_SET_FLOAT( "maxplayers", atoi( uiCreateGame.maxClients.buffer ));
// hack: wait three frames allowing server to completely shutdown, reapply maxplayers and start new map
sprintf( cmd, "host_endgame;wait;wait;wait;maxplayers %i;latch;map %s\n", atoi( uiCreateGame.maxClients.buffer ), CVAR_GET_STRING( "defaultmap" ) );
sprintf( cmd, "host_endgame;wait;wait;wait;maxplayers %i;latch;map %s\n", atoi( uiCreateGame.maxClients.buffer ), uiCreateGame.mapName[uiCreateGame.mapsList.curItem] );
CLIENT_COMMAND( FALSE, cmd );
}
@ -145,17 +145,17 @@ static void UI_PromptDialog( void )
UI_CreateGame_Begin();
return;
}
// toggle main menu between active\inactive
// show\hide quit dialog
uiCreateGame.advOptions.generic.flags ^= QMF_INACTIVE;
uiCreateGame.advOptions.generic.flags ^= QMF_INACTIVE;
uiCreateGame.done.generic.flags ^= QMF_INACTIVE;
uiCreateGame.cancel.generic.flags ^= QMF_INACTIVE;
uiCreateGame.maxClients.generic.flags ^= QMF_INACTIVE;
uiCreateGame.hostName.generic.flags ^= QMF_INACTIVE;
uiCreateGame.password.generic.flags ^= QMF_INACTIVE;
uiCreateGame.dedicatedServer.generic.flags ^= QMF_INACTIVE;
uiCreateGame.hltv.generic.flags ^= QMF_INACTIVE;
uiCreateGame.nat.generic.flags ^= QMF_INACTIVE;
uiCreateGame.mapsList.generic.flags ^= QMF_INACTIVE;
uiCreateGame.msgBox.generic.flags ^= QMF_HIDDEN;
@ -213,7 +213,7 @@ static void UI_CreateGame_GetMapsList( void )
char *pfile = afile;
char token[1024];
int numMaps = 0;
while(( pfile = COM_ParseFile( pfile, token )) != NULL )
{
if( numMaps >= UI_MAXGAMES ) break;
@ -245,7 +245,7 @@ static void UI_CreateGame_Callback( void *self, int event )
switch( item->id )
{
case ID_HLTV:
case ID_NAT:
case ID_DEDICATED:
if( event == QM_PRESSED )
((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_PRESSED;
@ -353,14 +353,15 @@ static void UI_CreateGame_Init( void )
uiCreateGame.dedicatedServer.generic.callback = UI_CreateGame_Callback;
uiCreateGame.dedicatedServer.generic.statusText = "faster, but you can't join the server from this machine";
uiCreateGame.hltv.generic.id = ID_HLTV;
uiCreateGame.hltv.generic.type = QMTYPE_CHECKBOX;
uiCreateGame.hltv.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiCreateGame.hltv.generic.name = "HLTV";
uiCreateGame.hltv.generic.x = 72;
uiCreateGame.hltv.generic.y = 635;
uiCreateGame.hltv.generic.callback = UI_CreateGame_Callback;
uiCreateGame.hltv.generic.statusText = "enable hltv mode in multiplayer";
uiCreateGame.nat.generic.id = ID_NAT;
uiCreateGame.nat.generic.type = QMTYPE_CHECKBOX;
uiCreateGame.nat.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiCreateGame.nat.generic.name = "NAT";
uiCreateGame.nat.generic.x = 72;
uiCreateGame.nat.generic.y = 635;
uiCreateGame.nat.generic.callback = UI_CreateGame_Callback;
uiCreateGame.nat.generic.statusText = "Use NAT Bypass instead of direct mode";
uiCreateGame.nat.enabled = true;
uiCreateGame.hintMessage.generic.id = ID_TABLEHINT;
uiCreateGame.hintMessage.generic.type = QMTYPE_ACTION;
@ -470,7 +471,8 @@ static void UI_CreateGame_Init( void )
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.hostName );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.password );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.dedicatedServer );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.hltv );
if( CVAR_GET_FLOAT("public") )
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.nat );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.hintMessage );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.mapsList );
UI_AddItem( &uiCreateGame.menu, (void *)&uiCreateGame.msgBox );

View File

@ -24,7 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static const char *uiCreditsDefault[] =
{
"CS16Client v1.3",
"CS16Client v1.32",
"Build Date:" __DATE__ " " __TIME__ ,
"",
"Developers: ",

View File

@ -251,6 +251,7 @@ static void UI_GameOptions_Callback( void *self, int event )
switch( item->id )
{
case ID_DONE:
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
UI_PopMenu();
break;
case ID_CANCEL:

View File

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@ -46,7 +46,9 @@ enum
ID_AXIS_BIND3,
ID_AXIS_BIND4,
ID_AXIS_BIND5,
ID_AXIS_BIND6
ID_AXIS_BIND6,
ID_JOY_ENABLE,
ID_CONTROLS
};
enum engineAxis_t
@ -79,8 +81,10 @@ typedef struct
menuBitmap_s banner;
menuPicButton_s done;
menuPicButton_s controls;
menuSlider_s side, forward, pitch, yaw;
menuCheckBox_s invSide, invFwd, invPitch, invYaw;
menuCheckBox_s joyEnable;
menuSpinControl_s axisBind[6];
@ -116,8 +120,10 @@ static void UI_GamePad_GetConfig( void )
uiGamePad.invPitch.enabled = pitch < 0.0f ? true: false;
uiGamePad.invYaw.enabled = yaw < 0.0f ? true: false;
uiGamePad.joyEnable.enabled = (int)CVAR_GET_FLOAT( "joy_enable" );
// I made a monster...
for( size_t i = 0; i < sizeof( binding ) - 1; i++ )
for( unsigned int i = 0; i < sizeof( binding ) - 1; i++ )
{
switch( binding[i] )
{
@ -196,7 +202,9 @@ static void UI_GamePad_SetConfig( void )
CVAR_SET_FLOAT( "joy_forward", forward );
CVAR_SET_FLOAT( "joy_pitch", pitch );
CVAR_SET_FLOAT( "joy_yaw", yaw );
CVAR_SET_FLOAT( "joy_enable", uiGamePad.joyEnable.enabled );
CVAR_SET_STRING( "joy_axis_binding", binding );
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
}
/*
@ -225,6 +233,7 @@ static void UI_GamePad_Callback( void *self, int event )
case ID_INVERT_FORWARD:
case ID_INVERT_PITCH:
case ID_INVERT_YAW:
case ID_JOY_ENABLE:
if( event == QM_PRESSED )
((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_PRESSED;
else ((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_FOCUS;
@ -242,7 +251,11 @@ static void UI_GamePad_Callback( void *self, int event )
switch( item->id )
{
case ID_CONTROLS:
UI_Controls_Menu();
break;
case ID_DONE:
CLIENT_COMMAND( FALSE, "trysaveconfig\n" );
UI_PopMenu();
break;
}
@ -290,7 +303,7 @@ static void UI_GamePad_Init( void )
uiGamePad.axisBind_label.generic.type = QMTYPE_ACTION;
uiGamePad.axisBind_label.generic.flags = QMF_CENTER_JUSTIFY|QMF_INACTIVE|QMF_DROPSHADOW;
uiGamePad.axisBind_label.generic.x = 52;
uiGamePad.axisBind_label.generic.x = 72;
uiGamePad.axisBind_label.generic.y = 180;
uiGamePad.axisBind_label.generic.color = uiColorHelp;
uiGamePad.axisBind_label.generic.height = 26;
@ -306,7 +319,7 @@ static void UI_GamePad_Init( void )
uiGamePad.axisBind[i].generic.id = ID_AXIS_BIND1 + i;
uiGamePad.axisBind[i].generic.type = QMTYPE_SPINCONTROL;
uiGamePad.axisBind[i].generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiGamePad.axisBind[i].generic.x = 72;
uiGamePad.axisBind[i].generic.x = 104;
uiGamePad.axisBind[i].generic.y = y;
uiGamePad.axisBind[i].generic.height = 26;
uiGamePad.axisBind[i].generic.width = 256;
@ -322,7 +335,7 @@ static void UI_GamePad_Init( void )
uiGamePad.side.generic.id = ID_SIDE;
uiGamePad.side.generic.type = QMTYPE_SLIDER;
uiGamePad.side.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiGamePad.side.generic.x = 400;
uiGamePad.side.generic.x = 432;
uiGamePad.side.generic.y = 250;
uiGamePad.side.generic.callback = UI_GamePad_Callback;
uiGamePad.side.generic.name = "Side";
@ -335,7 +348,7 @@ static void UI_GamePad_Init( void )
uiGamePad.invSide.generic.type = QMTYPE_CHECKBOX;
uiGamePad.invSide.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiGamePad.invSide.generic.name = "Invert";
uiGamePad.invSide.generic.x = 620;
uiGamePad.invSide.generic.x = 652;
uiGamePad.invSide.generic.y = 230;
uiGamePad.invSide.generic.callback = UI_GamePad_Callback;
uiGamePad.invSide.generic.statusText = "Invert side movement axis";
@ -343,7 +356,7 @@ static void UI_GamePad_Init( void )
uiGamePad.forward.generic.id = ID_FORWARD;
uiGamePad.forward.generic.type = QMTYPE_SLIDER;
uiGamePad.forward.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiGamePad.forward.generic.x = 400;
uiGamePad.forward.generic.x = 432;
uiGamePad.forward.generic.y = 300;
uiGamePad.forward.generic.callback = UI_GamePad_Callback;
uiGamePad.forward.generic.name = "Forward";
@ -356,7 +369,7 @@ static void UI_GamePad_Init( void )
uiGamePad.invFwd.generic.type = QMTYPE_CHECKBOX;
uiGamePad.invFwd.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiGamePad.invFwd.generic.name = "Invert";
uiGamePad.invFwd.generic.x = 620;
uiGamePad.invFwd.generic.x = 652;
uiGamePad.invFwd.generic.y = 280;
uiGamePad.invFwd.generic.callback = UI_GamePad_Callback;
uiGamePad.invFwd.generic.statusText = "Invert forward movement axis";
@ -364,7 +377,7 @@ static void UI_GamePad_Init( void )
uiGamePad.pitch.generic.id = ID_PITCH;
uiGamePad.pitch.generic.type = QMTYPE_SLIDER;
uiGamePad.pitch.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiGamePad.pitch.generic.x = 400;
uiGamePad.pitch.generic.x = 432;
uiGamePad.pitch.generic.y = 350;
uiGamePad.pitch.generic.callback = UI_GamePad_Callback;
uiGamePad.pitch.generic.name = "Pitch";
@ -377,7 +390,7 @@ static void UI_GamePad_Init( void )
uiGamePad.invPitch.generic.type = QMTYPE_CHECKBOX;
uiGamePad.invPitch.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiGamePad.invPitch.generic.name = "Invert";
uiGamePad.invPitch.generic.x = 620;
uiGamePad.invPitch.generic.x = 652;
uiGamePad.invPitch.generic.y = 330;
uiGamePad.invPitch.generic.callback = UI_GamePad_Callback;
uiGamePad.invPitch.generic.statusText = "Invert pitch axis";
@ -385,7 +398,7 @@ static void UI_GamePad_Init( void )
uiGamePad.yaw.generic.id = ID_YAW;
uiGamePad.yaw.generic.type = QMTYPE_SLIDER;
uiGamePad.yaw.generic.flags = QMF_CENTER_JUSTIFY|QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiGamePad.yaw.generic.x = 400;
uiGamePad.yaw.generic.x = 432;
uiGamePad.yaw.generic.y = 400;
uiGamePad.yaw.generic.callback = UI_GamePad_Callback;
uiGamePad.yaw.generic.name = "Yaw";
@ -398,11 +411,30 @@ static void UI_GamePad_Init( void )
uiGamePad.invYaw.generic.type = QMTYPE_CHECKBOX;
uiGamePad.invYaw.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiGamePad.invYaw.generic.name = "Invert";
uiGamePad.invYaw.generic.x = 620;
uiGamePad.invYaw.generic.x = 652;
uiGamePad.invYaw.generic.y = 380;
uiGamePad.invYaw.generic.callback = UI_GamePad_Callback;
uiGamePad.invYaw.generic.statusText = "Invert yaw axis";
uiGamePad.joyEnable.generic.id = ID_JOY_ENABLE;
uiGamePad.joyEnable.generic.type = QMTYPE_CHECKBOX;
uiGamePad.joyEnable.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiGamePad.joyEnable.generic.name = "Enable gamepad";
uiGamePad.joyEnable.generic.x = 72;
uiGamePad.joyEnable.generic.y = 530;
uiGamePad.joyEnable.generic.callback = UI_GamePad_Callback;
uiGamePad.joyEnable.generic.statusText = "Enable gamepad input in game";
uiGamePad.controls.generic.id = ID_CONTROLS;
uiGamePad.controls.generic.type = QMTYPE_BM_BUTTON;
uiGamePad.controls.generic.flags= QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiGamePad.controls.generic.x = 72;
uiGamePad.controls.generic.y = 580;
uiGamePad.controls.generic.name = "Controls";
uiGamePad.controls.generic.callback = UI_GamePad_Callback;
uiGamePad.controls.generic.statusText = "Set gamepad key bindings";
UI_UtilSetupPicButton( &uiGamePad.controls, PC_CONTROLS );
UI_GamePad_GetConfig();
UI_AddItem( &uiGamePad.menu, &uiGamePad.background );
@ -421,6 +453,8 @@ static void UI_GamePad_Init( void )
UI_AddItem( &uiGamePad.menu, &uiGamePad.yaw );
UI_AddItem( &uiGamePad.menu, &uiGamePad.invYaw );
UI_AddItem( &uiGamePad.menu, &uiGamePad.axisBind_label );
UI_AddItem( &uiGamePad.menu, &uiGamePad.joyEnable );
UI_AddItem( &uiGamePad.menu, &uiGamePad.controls );
}
/*

View File

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@ -35,6 +35,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_DONE 6
#define ID_SERVERSLIST 7
#define ID_TABLEHINT 8
#define ID_NAT 11
#define ID_DIRECT 12
#define ID_MSGBOX 9
#define ID_MSGTEXT 10
@ -55,6 +57,8 @@ typedef struct
menuPicButton_s gameInfo;
menuPicButton_s refresh;
menuPicButton_s done;
menuPicButton_s direct;
menuPicButton_s nat;
// joingame prompt dialog
menuAction_s msgBox;
@ -67,6 +71,7 @@ typedef struct
menuAction_s hintMessage;
char hintText[MAX_HINT_TEXT];
int refreshTime;
int refreshTime2;
} uiInternetGames_t;
static uiInternetGames_t uiInternetGames;
@ -75,12 +80,14 @@ static void UI_PromptDialog( void )
{
// toggle main menu between active\inactive
// show\hide quit dialog
uiInternetGames.joinGame.generic.flags ^= QMF_INACTIVE;
uiInternetGames.joinGame.generic.flags ^= QMF_INACTIVE;
uiInternetGames.createGame.generic.flags ^= QMF_INACTIVE;
uiInternetGames.gameInfo.generic.flags ^= QMF_INACTIVE;
uiInternetGames.refresh.generic.flags ^= QMF_INACTIVE;
uiInternetGames.done.generic.flags ^= QMF_INACTIVE;
uiInternetGames.gameList.generic.flags ^= QMF_INACTIVE;
uiInternetGames.nat.generic.flags ^= QMF_INACTIVE;
uiInternetGames.direct.generic.flags ^= QMF_INACTIVE;
uiInternetGames.msgBox.generic.flags ^= QMF_HIDDEN;
uiInternetGames.dlgMessage1.generic.flags ^= QMF_HIDDEN;
@ -180,7 +187,17 @@ static void UI_InternetGames_JoinGame( void )
CLIENT_JOIN( uiStatic.serverAddresses[uiInternetGames.gameList.curItem] );
// prevent refresh durning connect
uiInternetGames.refreshTime = uiStatic.realTime + 999999999;
uiInternetGames.refreshTime = uiStatic.realTime + 999999;
}
#define REFRESH_LIST() \
if( uiStatic.realTime > uiInternetGames.refreshTime2 ) \
{ \
UI_RefreshInternetServerList(); \
uiInternetGames.refreshTime2 = uiStatic.realTime + (CVAR_GET_FLOAT("cl_nat")?4000:1000); \
uiInternetGames.refresh.generic.flags |= QMF_GRAYED; \
if( uiStatic.realTime + 20000 < uiInternetGames.refreshTime ) \
uiInternetGames.refreshTime = uiStatic.realTime + 20000; \
}
/*
@ -193,10 +210,14 @@ static void UI_Background_Ownerdraw( void *self )
if( !CVAR_GET_FLOAT( "cl_background" ))
UI_DrawBackground_Callback( self );
if( uiStatic.realTime > uiInternetGames.refreshTime )
if( !CVAR_GET_FLOAT( "cl_nat" ) && uiStatic.realTime > uiInternetGames.refreshTime )
{
uiInternetGames.refreshTime = uiStatic.realTime + 20000; // refresh every 10 secs
UI_RefreshInternetServerList();
REFRESH_LIST();
uiInternetGames.refreshTime = uiStatic.realTime + 20000;
}
if( uiStatic.realTime > uiInternetGames.refreshTime2 )
{
uiInternetGames.refresh.generic.flags &= ~QMF_GRAYED;
}
// serverinfo has been changed update display
@ -205,6 +226,31 @@ static void UI_Background_Ownerdraw( void *self )
UI_InternetGames_GetGamesList ();
uiStatic.updateServers = false;
}
UI_FillRect( 780 * uiStatic.scaleX, 184 * uiStatic.scaleY, (1000-780) * uiStatic.scaleX, 38 * uiStatic.scaleY, 0x80000000 );
UI_FillRect( 777 * uiStatic.scaleX, 180 * uiStatic.scaleY, (1000-780+6) * uiStatic.scaleX, 4 * uiStatic.scaleY, 0xFF555555 );
UI_FillRect( 777 * uiStatic.scaleX, 184 * uiStatic.scaleY, 4 * uiStatic.scaleX, 38 * uiStatic.scaleY, 0xFF555555 );
if( !CVAR_GET_FLOAT( "cl_nat") )
{
uiInternetGames.nat.generic.flags &= ~QMF_GRAYED;
uiInternetGames.direct.generic.flags |= QMF_GRAYED;
UI_FillRect( 780 * uiStatic.scaleX, 184 * uiStatic.scaleY, 120 * uiStatic.scaleX, 38 * uiStatic.scaleY, 0xFF555555 );
}
else
{
uiInternetGames.direct.generic.flags &= ~QMF_GRAYED;
uiInternetGames.nat.generic.flags |= QMF_GRAYED;
UI_FillRect( 900 * uiStatic.scaleX, 184 * uiStatic.scaleY, 102 * uiStatic.scaleX, 38 * uiStatic.scaleY, 0xFF555555 );
}
UI_FillRect( 338 * uiStatic.scaleX, 223 * uiStatic.scaleY, 662 * uiStatic.scaleX, 34 * uiStatic.scaleY, 0x80000000 );
UI_FillRect( 340 * uiStatic.scaleX, 221 * uiStatic.scaleY, 662 * uiStatic.scaleX, 4 * uiStatic.scaleY, 0xFF555555 );
UI_FillRect( 336 * uiStatic.scaleX, 221 * uiStatic.scaleY, 4 * uiStatic.scaleX, 36 * uiStatic.scaleY, 0xFF555555);
UI_FillRect( (339+660) * uiStatic.scaleX, 184 * uiStatic.scaleY, 4 * uiStatic.scaleX, 72 * uiStatic.scaleY, 0xFF555555);
//UI_FillRect( 340, 225, 660, 30, 0x80404040 );
}
/*
@ -246,9 +292,12 @@ static void UI_InternetGames_Callback( void *self, int event )
// UNDONE: not implemented
break;
case ID_REFRESH:
UI_RefreshInternetServerList();
if( uiStatic.realTime > uiInternetGames.refreshTime2 )
REFRESH_LIST();
uiInternetGames.refresh.generic.flags |= QMF_GRAYED;
break;
case ID_DONE:
CVAR_SET_FLOAT( "cl_nat", 0 );
UI_PopMenu();
break;
case ID_YES:
@ -257,6 +306,34 @@ static void UI_InternetGames_Callback( void *self, int event )
case ID_NO:
UI_PromptDialog();
break;
case ID_DIRECT:
CVAR_SET_FLOAT( "cl_nat", 0 );
uiInternetGames.nat.generic.flags &= ~QMF_GRAYED;
uiInternetGames.direct.generic.flags |= QMF_GRAYED;
UI_RefreshInternetServerList();
uiInternetGames.refreshTime2 = uiStatic.realTime + 1000;
uiStatic.numServers = 0;
uiInternetGames.gameList.numItems = 0; // reset it
uiInternetGames.gameList.curItem = 0; // reset it
uiInternetGames.gameList.numRows = 0;
for( int i = 0 ; i < UI_MAX_SERVERS; i++ )
uiInternetGames.gameDescriptionPtr[i] = NULL;
break;
case ID_NAT:
if( uiInternetGames.refreshTime2 > uiStatic.realTime )
break;
CVAR_SET_FLOAT( "cl_nat", 1 );
uiInternetGames.direct.generic.flags &= ~QMF_GRAYED;
uiInternetGames.nat.generic.flags |= QMF_GRAYED;
UI_RefreshInternetServerList();
uiInternetGames.refreshTime2 = uiStatic.realTime + 4000;
uiStatic.numServers = 0;
uiInternetGames.gameList.numItems = 0; // reset it
uiInternetGames.gameList.curItem = 0; // reset it
uiInternetGames.gameList.numRows = 0;
for( int i = 0 ; i < UI_MAX_SERVERS; i++ )
uiInternetGames.gameDescriptionPtr[i] = NULL;
break;
}
}
@ -344,6 +421,24 @@ static void UI_InternetGames_Init( void )
UI_UtilSetupPicButton( &uiInternetGames.refresh, PC_REFRESH );
uiInternetGames.nat.generic.id = ID_NAT;
uiInternetGames.nat.generic.type = QMTYPE_BM_BUTTON;
uiInternetGames.nat.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiInternetGames.nat.generic.x = 920;
uiInternetGames.nat.generic.y = 190;
uiInternetGames.nat.generic.name = "NAT";
uiInternetGames.nat.generic.statusText = "NAT-bypassed servers";
uiInternetGames.nat.generic.callback = UI_InternetGames_Callback;
uiInternetGames.direct.generic.id = ID_DIRECT;
uiInternetGames.direct.generic.type = QMTYPE_BM_BUTTON;
uiInternetGames.direct.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_GRAYED;
uiInternetGames.direct.generic.x = 785;
uiInternetGames.direct.generic.y = 190;
uiInternetGames.direct.generic.name = "Direct";
uiInternetGames.direct.generic.statusText = "Main servers";
uiInternetGames.direct.generic.callback = UI_InternetGames_Callback;
uiInternetGames.done.generic.id = ID_DONE;
uiInternetGames.done.generic.type = QMTYPE_BM_BUTTON;
uiInternetGames.done.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
@ -421,19 +516,21 @@ static void UI_InternetGames_Init( void )
uiInternetGames.createGame.generic.flags |= QMF_GRAYED; // server.dll is missed - remote servers only
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.background );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.banner );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.joinGame );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.createGame );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.gameInfo );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.refresh );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.done );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.hintMessage );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.gameList );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.msgBox );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.dlgMessage1 );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.dlgMessage2 );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.no );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.yes );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.banner );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.joinGame );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.createGame );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.gameInfo );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.refresh );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.done );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.direct );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.nat );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.hintMessage );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.gameList );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.msgBox );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.dlgMessage1 );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.dlgMessage2 );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.no );
UI_AddItem( &uiInternetGames.menu, (void *)&uiInternetGames.yes );
uiInternetGames.refreshTime = uiStatic.realTime + 500; // delay before update 0.5 sec
}

View File

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@ -36,12 +36,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_CONSOLE 1
#define ID_RESUME 2
#define ID_NEWGAME 3
#define ID_HAZARDCOURSE 4
#define ID_CONFIGURATION 5
#define ID_SAVERESTORE 6
#define ID_CONFIGURATION 5
#define ID_MULTIPLAYER 7
#define ID_CUSTOMGAME 8
#define ID_credits 9
#define ID_PREVIEWS 9
#define ID_QUIT 10
#define ID_QUIT_BUTTON 11
#define ID_MINIMIZE 12
@ -50,6 +47,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_DISCONNECT 15
#define ID_YES 130
#define ID_NO 131
#define ID_OK 132
typedef struct
{
@ -59,6 +57,7 @@ typedef struct
menuPicButton_s console;
menuPicButton_s resumeGame;
menuPicButton_s disconnect;
menuPicButton_s newGame;
menuPicButton_s configuration;
menuPicButton_s multiPlayer;
menuPicButton_s credits;
@ -73,6 +72,9 @@ typedef struct
menuAction_s dlgMessage1;
menuPicButton_s yes;
menuPicButton_s no;
menuPicButton_s ok;
void ( *promptAction )( void );
int promptAlert; // no cancel button
} uiMain_t;
static uiMain_t uiMain;
@ -125,9 +127,10 @@ static void UI_QuitDialog( void )
{
// toggle main menu between active\inactive
// show\hide quit dialog
uiMain.console.generic.flags ^= QMF_INACTIVE;
uiMain.console.generic.flags ^= QMF_INACTIVE;
uiMain.resumeGame.generic.flags ^= QMF_INACTIVE;
uiMain.disconnect.generic.flags ^= QMF_INACTIVE;
uiMain.newGame.generic.flags ^= QMF_INACTIVE;
uiMain.configuration.generic.flags ^= QMF_INACTIVE;
uiMain.multiPlayer.generic.flags ^= QMF_INACTIVE;
uiMain.credits.generic.flags ^= QMF_INACTIVE;
@ -146,9 +149,10 @@ static void UI_PromptDialog( void )
{
// toggle main menu between active\inactive
// show\hide quit dialog
uiMain.console.generic.flags ^= QMF_INACTIVE;
uiMain.console.generic.flags ^= QMF_INACTIVE;
uiMain.resumeGame.generic.flags ^= QMF_INACTIVE;
uiMain.disconnect.generic.flags ^= QMF_INACTIVE;
uiMain.newGame.generic.flags ^= QMF_INACTIVE;
uiMain.configuration.generic.flags ^= QMF_INACTIVE;
uiMain.multiPlayer.generic.flags ^= QMF_INACTIVE;
uiMain.credits.generic.flags ^= QMF_INACTIVE;
@ -158,9 +162,35 @@ static void UI_PromptDialog( void )
uiMain.msgBox.generic.flags ^= QMF_HIDDEN;
uiMain.dlgMessage1.generic.flags ^= QMF_HIDDEN;
uiMain.no.generic.flags ^= QMF_HIDDEN;
uiMain.yes.generic.flags ^= QMF_HIDDEN;
if( uiMain.promptAlert )
uiMain.ok.generic.flags ^= QMF_HIDDEN;
else
{
uiMain.no.generic.flags ^= QMF_HIDDEN;
uiMain.yes.generic.flags ^= QMF_HIDDEN;
}
}
static void UI_ShowPrompt( void ( *action )( void ), const char *message )
{
uiMain.promptAction = action;
uiMain.dlgMessage1.generic.name = message;
UI_PromptDialog();
}
void UI_ShowMessageBox( void )
{
static char msg[1024];
strncpy( msg, CMD_ARGV(1), 1023 );
msg[1023] = 0;
UI_SetActiveMenu( TRUE );
UI_Main_Menu();
uiMain.dlgMessage1.generic.name = msg;
uiMain.promptAlert = 1;
UI_PromptDialog();
}
/*
@ -201,30 +231,18 @@ static void UI_Main_ActivateFunc( void )
if( gpGlobals->developer )
{
uiMain.console.generic.y = CL_IsActive() ? 330 : 430;
uiMain.console.generic.y = CL_IsActive() ? 280 : 380;
UI_ScaleCoords( NULL, &uiMain.console.generic.y, NULL, NULL );
}
}
/*
=================
UI_Main_HazardCourse
=================
*/
static void UI_Main_HazardCourse( void )
static void UI_Main_Disconnect( void )
{
if( CVAR_GET_FLOAT( "host_serverstate" ) && CVAR_GET_FLOAT( "maxplayers" ) > 1 )
HOST_ENDGAME( "end of the game" );
CVAR_SET_FLOAT( "skill", 1.0f );
CVAR_SET_FLOAT( "deathmatch", 0.0f );
CVAR_SET_FLOAT( "teamplay", 0.0f );
CVAR_SET_FLOAT( "pausable", 1.0f ); // singleplayer is always allowing pause
CVAR_SET_FLOAT( "coop", 0.0f );
BACKGROUND_TRACK( NULL, NULL );
CLIENT_COMMAND( FALSE, "hazardcourse\n" );
if( CVAR_GET_FLOAT( "host_serverstate" ) )
CLIENT_COMMAND( TRUE, "endgame;wait;wait;wait;menu_options;menu_main\n");
else
CLIENT_COMMAND( TRUE, "cmd disconnect;wait;wait;wait;menu_options;menu_main\n");
UI_Main_Menu();
}
/*
@ -263,11 +281,11 @@ static void UI_Main_Callback( void *self, int event )
UI_CloseMenu();
break;
case ID_DISCONNECT:
if( CVAR_GET_FLOAT( "host_serverstate" ) )
CLIENT_COMMAND( TRUE, "endgame;wait;wait;wait;menu_options;menu_main\n");
else
CLIENT_COMMAND( TRUE, "cmd disconnect;wait;wait;wait;menu_options;menu_main\n");
UI_Main_Menu();
UI_ShowPrompt( UI_Main_Disconnect, "Really disconnect?" );
break;
case ID_NEWGAME:
CVAR_SET_FLOAT( "public", 0 );
UI_CreateGame_Menu();
break;
case ID_MULTIPLAYER:
UI_MultiPlayer_Menu();
@ -275,7 +293,7 @@ static void UI_Main_Callback( void *self, int event )
case ID_CONFIGURATION:
UI_Options_Menu();
break;
case ID_credits:
case ID_PREVIEWS:
UI_Credits_Menu();
break;
case ID_QUIT:
@ -288,7 +306,12 @@ static void UI_Main_Callback( void *self, int event )
case ID_YES:
if( !( uiMain.quitMessage.generic.flags & QMF_HIDDEN ))
CLIENT_COMMAND( FALSE, "quit\n" );
else UI_Main_HazardCourse();
else
uiMain.promptAction();
break;
case ID_OK:
UI_PromptDialog();
uiMain.promptAlert = 0;
break;
case ID_NO:
if( !( uiMain.quitMessage.generic.flags & QMF_HIDDEN ))
@ -329,7 +352,7 @@ static void UI_Main_Init( void )
uiMain.console.generic.name = "Console";
uiMain.console.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiMain.console.generic.x = 72;
uiMain.console.generic.y = CL_IsActive() ? 330 : 430;
uiMain.console.generic.y = CL_IsActive() ? 280 : 380;
uiMain.console.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.console, PC_CONSOLE );
@ -340,7 +363,7 @@ static void UI_Main_Init( void )
uiMain.resumeGame.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiMain.resumeGame.generic.statusText = MenuStrings[HINT_RESUME_GAME];
uiMain.resumeGame.generic.x = 72;
uiMain.resumeGame.generic.y = 380;
uiMain.resumeGame.generic.y = 330;
uiMain.resumeGame.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.resumeGame, PC_RESUME_GAME );
@ -351,11 +374,28 @@ static void UI_Main_Init( void )
uiMain.disconnect.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiMain.disconnect.generic.statusText = "Disconnect from server";
uiMain.disconnect.generic.x = 72;
uiMain.disconnect.generic.y = 430;
uiMain.disconnect.generic.y = 380;
uiMain.disconnect.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.disconnect, PC_DISCONNECT );
uiMain.newGame.generic.id = ID_NEWGAME;
uiMain.newGame.generic.type = QMTYPE_BM_BUTTON;
uiMain.newGame.generic.name = "Create game";
uiMain.newGame.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiMain.newGame.generic.statusText = "Start a local game server";
uiMain.newGame.generic.x = 72;
uiMain.newGame.generic.y = 430;
uiMain.newGame.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.newGame, PC_CREATE_GAME );
// server.dll needs for reading savefiles or startup newgame
if( !CheckGameDll( ))
{
uiMain.newGame.generic.flags |= QMF_GRAYED;
}
uiMain.configuration.generic.id = ID_CONFIGURATION;
uiMain.configuration.generic.type = QMTYPE_BM_BUTTON;
uiMain.configuration.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
@ -378,11 +418,11 @@ static void UI_Main_Init( void )
UI_UtilSetupPicButton( &uiMain.multiPlayer, PC_MULTIPLAYER );
uiMain.credits.generic.id = ID_credits;
uiMain.credits.generic.id = ID_PREVIEWS;
uiMain.credits.generic.type = QMTYPE_BM_BUTTON;
uiMain.credits.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiMain.credits.generic.name = "Credits";
uiMain.credits.generic.statusText = "Show developer credits";
uiMain.credits.generic.statusText = "Developer credits";
uiMain.credits.generic.x = 72;
uiMain.credits.generic.y = 580;
uiMain.credits.generic.callback = UI_Main_Callback;
@ -459,6 +499,16 @@ static void UI_Main_Init( void )
UI_UtilSetupPicButton( &uiMain.yes, PC_OK );
uiMain.ok.generic.id = ID_OK;
uiMain.ok.generic.type = QMTYPE_BM_BUTTON;
uiMain.ok.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_HIDDEN;
uiMain.ok.generic.name = "Ok";
uiMain.ok.generic.x = DLG_X + 490;
uiMain.ok.generic.y = 460;
uiMain.ok.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.ok, PC_OK );
uiMain.no.generic.id = ID_NO;
uiMain.no.generic.type = QMTYPE_BM_BUTTON;
uiMain.no.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_HIDDEN;
@ -466,7 +516,7 @@ static void UI_Main_Init( void )
uiMain.no.generic.x = DLG_X + 530;
uiMain.no.generic.y = 460;
uiMain.no.generic.callback = UI_Main_Callback;
UI_UtilSetupPicButton( &uiMain.no, PC_CANCEL );
UI_AddItem( &uiMain.menu, (void *)&uiMain.background );
@ -476,6 +526,7 @@ static void UI_Main_Init( void )
UI_AddItem( &uiMain.menu, (void *)&uiMain.disconnect );
UI_AddItem( &uiMain.menu, (void *)&uiMain.resumeGame );
UI_AddItem( &uiMain.menu, (void *)&uiMain.newGame );
UI_AddItem( &uiMain.menu, (void *)&uiMain.configuration );
UI_AddItem( &uiMain.menu, (void *)&uiMain.multiPlayer );
UI_AddItem( &uiMain.menu, (void *)&uiMain.credits );
@ -487,6 +538,7 @@ static void UI_Main_Init( void )
UI_AddItem( &uiMain.menu, (void *)&uiMain.dlgMessage1 );
UI_AddItem( &uiMain.menu, (void *)&uiMain.no );
UI_AddItem( &uiMain.menu, (void *)&uiMain.yes );
UI_AddItem( &uiMain.menu, (void *)&uiMain.ok );
}
/*

View File

@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@ -36,6 +36,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_CONTROLS 6
#define ID_DONE 7
#define ID_MSGBOX 8
#define ID_MSGTEXT 9
#define ID_YES 130
#define ID_NO 131
typedef struct
{
menuFramework_s menu;
@ -49,6 +54,14 @@ typedef struct
menuPicButton_s Customize; // playersetup
menuPicButton_s Controls;
menuPicButton_s done;
// prompt dialog
menuAction_s msgBox;
menuAction_s promptMessage;
menuAction_s promptMessage2;
menuAction_s promptMessage3;
menuPicButton_s yes;
menuPicButton_s no;
} uiMultiPlayer_t;
static uiMultiPlayer_t uiMultiPlayer;
@ -65,6 +78,42 @@ static void UI_MsgBox_Ownerdraw( void *self )
UI_FillRect( item->x, item->y, item->width, item->height, uiPromptBgColor );
}
static void UI_PredictDialog( void )
{
// toggle main menu between active\inactive
// show\hide remove dialog
uiMultiPlayer.internetGames.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.spectateGames.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.LANGame.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.Customize.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.Controls.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.done.generic.flags ^= QMF_INACTIVE;
uiMultiPlayer.msgBox.generic.flags ^= QMF_HIDDEN;
uiMultiPlayer.promptMessage.generic.flags ^= QMF_HIDDEN;
uiMultiPlayer.promptMessage2.generic.flags ^= QMF_HIDDEN;
uiMultiPlayer.promptMessage3.generic.flags ^= QMF_HIDDEN;
uiMultiPlayer.no.generic.flags ^= QMF_HIDDEN;
uiMultiPlayer.yes.generic.flags ^= QMF_HIDDEN;
}
/*
=================
UI_Multiplayer_KeyFunc
=================
*/
static const char *UI_Multiplayer_KeyFunc( int key, int down )
{
if( down && key == K_ESCAPE && !( uiMultiPlayer.promptMessage.generic.flags & QMF_HIDDEN ))
{
UI_PredictDialog();
return uiSoundNull;
}
return UI_DefaultKey( &uiMultiPlayer.menu, key, down );
}
/*
=================
UI_MultiPlayer_Callback
@ -97,6 +146,12 @@ static void UI_MultiPlayer_Callback( void *self, int event )
case ID_DONE:
UI_PopMenu();
break;
case ID_YES:
CVAR_SET_FLOAT( "cl_predict", 1 );
case ID_NO:
CVAR_SET_FLOAT( "menu_mp_firsttime", 0 );
UI_PredictDialog();
break;
}
}
@ -108,6 +163,7 @@ UI_MultiPlayer_Init
static void UI_MultiPlayer_Init( void )
{
memset( &uiMultiPlayer, 0, sizeof( uiMultiPlayer_t ));
uiMultiPlayer.menu.keyFunc = UI_Multiplayer_KeyFunc;
uiMultiPlayer.menu.vidInitFunc = UI_MultiPlayer_Init;
@ -181,7 +237,7 @@ static void UI_MultiPlayer_Init( void )
uiMultiPlayer.Controls.generic.name = "Controls";
uiMultiPlayer.Controls.generic.statusText = "Change keyboard and mouse settings";
uiMultiPlayer.Controls.generic.callback = UI_MultiPlayer_Callback;
UI_UtilSetupPicButton( &uiMultiPlayer.Controls, PC_CONTROLS );
uiMultiPlayer.done.generic.id = ID_DONE;
@ -195,6 +251,55 @@ static void UI_MultiPlayer_Init( void )
UI_UtilSetupPicButton( &uiMultiPlayer.done, PC_DONE );
uiMultiPlayer.msgBox.generic.id = ID_MSGBOX;
uiMultiPlayer.msgBox.generic.type = QMTYPE_ACTION;
uiMultiPlayer.msgBox.generic.flags = QMF_INACTIVE|QMF_HIDDEN;
uiMultiPlayer.msgBox.generic.ownerdraw = UI_MsgBox_Ownerdraw; // just a fill rectangle
uiMultiPlayer.msgBox.generic.x = DLG_X + 192;
uiMultiPlayer.msgBox.generic.y = 256;
uiMultiPlayer.msgBox.generic.width = 640;
uiMultiPlayer.msgBox.generic.height = 256;
uiMultiPlayer.promptMessage.generic.id = ID_MSGBOX;
uiMultiPlayer.promptMessage.generic.type = QMTYPE_ACTION;
uiMultiPlayer.promptMessage.generic.flags = QMF_INACTIVE|QMF_DROPSHADOW|QMF_HIDDEN;
uiMultiPlayer.promptMessage.generic.name = "It is recomended to enable\nclient movement prediction";
uiMultiPlayer.promptMessage.generic.x = DLG_X + 270;
uiMultiPlayer.promptMessage.generic.y = 280;
uiMultiPlayer.promptMessage2.generic.id = ID_MSGBOX;
uiMultiPlayer.promptMessage2.generic.type = QMTYPE_ACTION;
uiMultiPlayer.promptMessage2.generic.flags = QMF_INACTIVE|QMF_DROPSHADOW|QMF_HIDDEN;
uiMultiPlayer.promptMessage2.generic.name = " Or enable it later in\n^5(Multiplayer/Customize)";
uiMultiPlayer.promptMessage2.generic.x = DLG_X + 310;
uiMultiPlayer.promptMessage2.generic.y = 340;
uiMultiPlayer.promptMessage3.generic.id = ID_MSGBOX;
uiMultiPlayer.promptMessage3.generic.type = QMTYPE_ACTION;
uiMultiPlayer.promptMessage3.generic.flags = QMF_INACTIVE|QMF_DROPSHADOW|QMF_HIDDEN;
uiMultiPlayer.promptMessage3.generic.name = "Press OK to enable it now";
uiMultiPlayer.promptMessage3.generic.x = DLG_X + 290;
uiMultiPlayer.promptMessage3.generic.y = 400;
uiMultiPlayer.yes.generic.id = ID_YES;
uiMultiPlayer.yes.generic.type = QMTYPE_BM_BUTTON;
uiMultiPlayer.yes.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_HIDDEN;
uiMultiPlayer.yes.generic.name = "Ok";
uiMultiPlayer.yes.generic.x = DLG_X + 380;
uiMultiPlayer.yes.generic.y = 460;
uiMultiPlayer.yes.generic.callback = UI_MultiPlayer_Callback;
UI_UtilSetupPicButton( &uiMultiPlayer.yes, PC_OK );
uiMultiPlayer.no.generic.id = ID_NO;
uiMultiPlayer.no.generic.type = QMTYPE_BM_BUTTON;
uiMultiPlayer.no.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_HIDDEN;
uiMultiPlayer.no.generic.name = "Cancel";
uiMultiPlayer.no.generic.x = DLG_X + 530;
uiMultiPlayer.no.generic.y = 460;
uiMultiPlayer.no.generic.callback = UI_MultiPlayer_Callback;
UI_UtilSetupPicButton( &uiMultiPlayer.no, PC_CANCEL );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.background );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.banner );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.internetGames );
@ -203,6 +308,12 @@ static void UI_MultiPlayer_Init( void )
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.Customize );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.Controls );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.done );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.msgBox );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.promptMessage );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.promptMessage2 );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.promptMessage3 );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.no );
UI_AddItem( &uiMultiPlayer.menu, (void *)&uiMultiPlayer.yes );
}
/*

View File

@ -385,8 +385,10 @@ static void UI_TouchButtons_Callback( void *self, int event )
uiTouchButtons.dialogAction = UI_DeleteButton;
break;
case ID_YES:
if( uiTouchButtons.dialogAction )
uiTouchButtons.dialogAction();
if( uiTouchButtons.dialogAction )
{
uiTouchButtons.dialogAction();
}
case ID_NO:
UI_TouchButtons_EnableButtons();

View File

@ -1,166 +0,0 @@
/*
Copyright (C) 1997-2001 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "extdll.h"
#include "basemenu.h"
#include "utils.h"
#include "menu_btnsbmp_table.h"
#define ART_BANNER "gfx/shell/head_video"
#define ID_BACKGROUND 0
#define ID_BANNER 1
#define ID_VIDOPTIONS 2
#define ID_VIDMODES 3
#define ID_DONE 4
typedef struct
{
menuFramework_s menu;
menuBitmap_s background;
menuBitmap_s banner;
menuPicButton_s vidOptions;
menuPicButton_s vidModes;
menuPicButton_s done;
} uiVideo_t;
static uiVideo_t uiVideo;
/*
=================
UI_Video_Callback
=================
*/
static void UI_Video_Callback( void *self, int event )
{
menuCommon_s *item = (menuCommon_s *)self;
if( event != QM_ACTIVATED )
return;
switch( item->id )
{
case ID_VIDOPTIONS:
UI_VidOptions_Menu();
break;
case ID_VIDMODES:
UI_VidModes_Menu();
break;
case ID_DONE:
UI_PopMenu();
break;
}
}
/*
=================
UI_Video_Init
=================
*/
static void UI_Video_Init( void )
{
memset( &uiVideo, 0, sizeof( uiVideo_t ));
uiVideo.menu.vidInitFunc = UI_Video_Init;
uiVideo.background.generic.id = ID_BACKGROUND;
uiVideo.background.generic.type = QMTYPE_BITMAP;
uiVideo.background.generic.flags = QMF_INACTIVE;
uiVideo.background.generic.x = 0;
uiVideo.background.generic.y = 0;
uiVideo.background.generic.width = uiStatic.width;
uiVideo.background.generic.height = 768;
uiVideo.background.pic = ART_BACKGROUND;
uiVideo.banner.generic.id = ID_BANNER;
uiVideo.banner.generic.type = QMTYPE_BITMAP;
uiVideo.banner.generic.flags = QMF_INACTIVE|QMF_DRAW_ADDITIVE;
uiVideo.banner.generic.x = UI_BANNER_POSX;
uiVideo.banner.generic.y = UI_BANNER_POSY;
uiVideo.banner.generic.width = UI_BANNER_WIDTH;
uiVideo.banner.generic.height = UI_BANNER_HEIGHT;
uiVideo.banner.pic = ART_BANNER;
uiVideo.vidOptions.generic.id = ID_VIDOPTIONS;
uiVideo.vidOptions.generic.type = QMTYPE_BM_BUTTON;
uiVideo.vidOptions.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiVideo.vidOptions.generic.name = "Video options";
uiVideo.vidOptions.generic.statusText = "Set video options such as screen size, gamma and image quality.";
uiVideo.vidOptions.generic.x = 72;
uiVideo.vidOptions.generic.y = 230;
uiVideo.vidOptions.generic.callback = UI_Video_Callback;
UI_UtilSetupPicButton( &uiVideo.vidOptions, PC_VID_OPT );
uiVideo.vidModes.generic.id = ID_VIDMODES;
uiVideo.vidModes.generic.type = QMTYPE_BM_BUTTON;
uiVideo.vidModes.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiVideo.vidModes.generic.name = "Video modes";
uiVideo.vidModes.generic.statusText = "Set video modes and configure 3D accelerators.";
uiVideo.vidModes.generic.x = 72;
uiVideo.vidModes.generic.y = 280;
uiVideo.vidModes.generic.callback = UI_Video_Callback;
UI_UtilSetupPicButton( &uiVideo.vidModes, PC_VID_MODES);
uiVideo.done.generic.id = ID_DONE;
uiVideo.done.generic.type = QMTYPE_BM_BUTTON;
uiVideo.done.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW|QMF_NOTIFY;
uiVideo.done.generic.name = "Done";
uiVideo.done.generic.statusText = "Go back to the previous menu";
uiVideo.done.generic.x = 72;
uiVideo.done.generic.y = 330;
uiVideo.done.generic.callback = UI_Video_Callback;
UI_UtilSetupPicButton( &uiVideo.done, PC_DONE );
UI_AddItem( &uiVideo.menu, (void *)&uiVideo.background );
UI_AddItem( &uiVideo.menu, (void *)&uiVideo.banner );
UI_AddItem( &uiVideo.menu, (void *)&uiVideo.vidOptions );
UI_AddItem( &uiVideo.menu, (void *)&uiVideo.vidModes );
UI_AddItem( &uiVideo.menu, (void *)&uiVideo.done );
}
/*
=================
UI_Video_Precache
=================
*/
void UI_Video_Precache( void )
{
PIC_Load( ART_BACKGROUND );
PIC_Load( ART_BANNER );
}
/*
=================
UI_Video_Menu
=================
*/
void UI_Video_Menu( void )
{
UI_Video_Precache();
UI_Video_Init();
UI_PushMenu( &uiVideo.menu );
}

View File

@ -1,296 +0,0 @@
/*
Copyright (C) 1997-2001 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "extdll.h"
#include "basemenu.h"
#include "utils.h"
#include "menu_btnsbmp_table.h"
#include "menu_strings.h"
#define ART_BANNER "gfx/shell/head_vidmodes"
#define ID_BACKGROUND 0
#define ID_BANNER 1
#define ID_APPLY 2
#define ID_DONE 3
#define ID_VIDMODELIST 4
#define ID_FULLSCREEN 5
#define ID_VERTICALSYNC 6
#define ID_TABLEHINT 7
#define MAX_VIDMODES (sizeof( uiVideoModes ) / sizeof( uiVideoModes[0] )) + 1
static const char *uiVideoModes[] =
{
"640 x 480",
"800 x 600",
"960 x 720",
"1024 x 768",
"1152 x 864",
"1280 x 800",
"1280 x 960",
"1280 x 1024",
"1600 x 1200",
"2048 x 1536",
"800 x 480 (wide)",
"856 x 480 (wide)",
"960 x 540 (wide)",
"1024 x 576 (wide)",
"1024 x 600 (wide)",
"1280 x 720 (wide)",
"1360 x 768 (wide)",
"1366 x 768 (wide)",
"1440 x 900 (wide)",
"1680 x 1050 (wide)",
"1920 x 1080 (wide)",
"1920 x 1200 (wide)",
"2560 x 1600 (wide)",
"1600 x 900 (wide)",
};
typedef struct
{
const char *videoModesPtr[MAX_VIDMODES];
menuFramework_s menu;
menuBitmap_s background;
menuBitmap_s banner;
menuPicButton_s ok;
menuPicButton_s cancel;
menuCheckBox_s windowed;
menuCheckBox_s vsync;
menuScrollList_s vidList;
menuAction_s listCaption;
} uiVidModes_t;
static uiVidModes_t uiVidModes;
/*
=================
UI_VidModes_GetModesList
=================
*/
static void UI_VidModes_GetConfig( void )
{
unsigned int i;
for( i = 0; i < MAX_VIDMODES-1; i++ )
uiVidModes.videoModesPtr[i] = uiVideoModes[i];
uiVidModes.videoModesPtr[i] = NULL; // terminator
uiVidModes.vidList.itemNames = uiVidModes.videoModesPtr;
uiVidModes.vidList.curItem = CVAR_GET_FLOAT( "vid_mode" );
if( !CVAR_GET_FLOAT( "fullscreen" ))
uiVidModes.windowed.enabled = 1;
if( CVAR_GET_FLOAT( "gl_swapInterval" ))
uiVidModes.vsync.enabled = 1;
}
/*
=================
UI_VidModes_SetConfig
=================
*/
static void UI_VidOptions_SetConfig( void )
{
CVAR_SET_FLOAT( "vid_mode", uiVidModes.vidList.curItem );
CVAR_SET_FLOAT( "fullscreen", !uiVidModes.windowed.enabled );
CVAR_SET_FLOAT( "gl_swapInterval", uiVidModes.vsync.enabled );
}
/*
=================
UI_VidModes_UpdateConfig
=================
*/
static void UI_VidOptions_UpdateConfig( void )
{
CVAR_SET_FLOAT( "gl_swapInterval", uiVidModes.vsync.enabled );
}
/*
=================
UI_VidModes_Callback
=================
*/
static void UI_VidModes_Callback( void *self, int event )
{
menuCommon_s *item = (menuCommon_s *)self;
switch( item->id )
{
case ID_FULLSCREEN:
case ID_VERTICALSYNC:
if( event == QM_PRESSED )
((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_PRESSED;
else ((menuCheckBox_s *)self)->focusPic = UI_CHECKBOX_FOCUS;
break;
}
if( event == QM_CHANGED )
{
UI_VidOptions_UpdateConfig();
return;
}
if( event != QM_ACTIVATED )
return;
switch( item->id )
{
case ID_DONE:
UI_PopMenu();
break;
case ID_APPLY:
UI_VidOptions_SetConfig ();
UI_PopMenu();
break;
}
}
/*
=================
UI_VidModes_Init
=================
*/
static void UI_VidModes_Init( void )
{
memset( &uiVidModes, 0, sizeof( uiVidModes_t ));
uiVidModes.menu.vidInitFunc = UI_VidModes_Init;
uiVidModes.background.generic.id = ID_BACKGROUND;
uiVidModes.background.generic.type = QMTYPE_BITMAP;
uiVidModes.background.generic.flags = QMF_INACTIVE;
uiVidModes.background.generic.x = 0;
uiVidModes.background.generic.y = 0;
uiVidModes.background.generic.width = uiStatic.width;
uiVidModes.background.generic.height = 768;
uiVidModes.background.pic = ART_BACKGROUND;
uiVidModes.banner.generic.id = ID_BANNER;
uiVidModes.banner.generic.type = QMTYPE_BITMAP;
uiVidModes.banner.generic.flags = QMF_INACTIVE|QMF_DRAW_ADDITIVE;
uiVidModes.banner.generic.x = UI_BANNER_POSX;
uiVidModes.banner.generic.y = UI_BANNER_POSY;
uiVidModes.banner.generic.width = UI_BANNER_WIDTH;
uiVidModes.banner.generic.height = UI_BANNER_HEIGHT;
uiVidModes.banner.pic = ART_BANNER;
uiVidModes.ok.generic.id = ID_APPLY;
uiVidModes.ok.generic.type = QMTYPE_BM_BUTTON;
uiVidModes.ok.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiVidModes.ok.generic.x = 72;
uiVidModes.ok.generic.y = 230;
uiVidModes.ok.generic.name = "Apply";
uiVidModes.ok.generic.statusText = "Apply changes";
uiVidModes.ok.generic.callback = UI_VidModes_Callback;
UI_UtilSetupPicButton( &uiVidModes.ok, PC_OK );
uiVidModes.cancel.generic.id = ID_DONE;
uiVidModes.cancel.generic.type = QMTYPE_BM_BUTTON;
uiVidModes.cancel.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_DROPSHADOW;
uiVidModes.cancel.generic.x = 72;
uiVidModes.cancel.generic.y = 280;
uiVidModes.cancel.generic.name = "Done";
uiVidModes.cancel.generic.statusText = "Return back to previous menu";
uiVidModes.cancel.generic.callback = UI_VidModes_Callback;
UI_UtilSetupPicButton( &uiVidModes.cancel, PC_CANCEL );
uiVidModes.listCaption.generic.id = ID_TABLEHINT;
uiVidModes.listCaption.generic.type = QMTYPE_BM_BUTTON;
uiVidModes.listCaption.generic.flags = QMF_INACTIVE|QMF_SMALLFONT;
uiVidModes.listCaption.generic.color = uiColorHelp;
uiVidModes.listCaption.generic.name = MenuStrings[HINT_DISPLAYMODE];
uiVidModes.listCaption.generic.x = 400;
uiVidModes.listCaption.generic.y = 270;
uiVidModes.vidList.generic.id = ID_VIDMODELIST;
uiVidModes.vidList.generic.type = QMTYPE_SCROLLLIST;
uiVidModes.vidList.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_SMALLFONT;
uiVidModes.vidList.generic.x = 400;
uiVidModes.vidList.generic.y = 300;
uiVidModes.vidList.generic.width = 560;
uiVidModes.vidList.generic.height = 300;
uiVidModes.vidList.generic.callback = UI_VidModes_Callback;
#if defined(__ANDROID__) // it's impossible to change resolution on Android, so grey it out
uiVidModes.vidList.generic.flags = QMF_INACTIVE;
uiVidModes.vidList.generic.color = uiColorDkGrey;
#endif
uiVidModes.windowed.generic.id = ID_FULLSCREEN;
uiVidModes.windowed.generic.type = QMTYPE_CHECKBOX;
uiVidModes.windowed.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiVidModes.windowed.generic.name = "Run in a window";
uiVidModes.windowed.generic.x = 400;
uiVidModes.windowed.generic.y = 620;
uiVidModes.windowed.generic.callback = UI_VidModes_Callback;
uiVidModes.windowed.generic.statusText = "Run game in window mode";
uiVidModes.vsync.generic.id = ID_VERTICALSYNC;
uiVidModes.vsync.generic.type = QMTYPE_CHECKBOX;
uiVidModes.vsync.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiVidModes.vsync.generic.name = "Vertical sync";
uiVidModes.vsync.generic.x = 400;
uiVidModes.vsync.generic.y = 670;
uiVidModes.vsync.generic.callback = UI_VidModes_Callback;
uiVidModes.vsync.generic.statusText = "enable vertical synchronization";
UI_VidModes_GetConfig();
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.background );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.banner );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.ok );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.cancel );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.windowed );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.vsync );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.listCaption );
UI_AddItem( &uiVidModes.menu, (void *)&uiVidModes.vidList );
}
/*
=================
UI_VidModes_Precache
=================
*/
void UI_VidModes_Precache( void )
{
PIC_Load( ART_BACKGROUND );
PIC_Load( ART_BANNER );
}
/*
=================
UI_VidModes_Menu
=================
*/
void UI_VidModes_Menu( void )
{
UI_VidModes_Precache();
UI_VidModes_Init();
UI_PushMenu( &uiVidModes.menu );
}

View File

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "utils.h"
#include "menu_btnsbmp_table.h"
#define ART_BANNER "gfx/shell/head_vidoptions"
#define ART_BANNER "gfx/shell/head_video"
#define ART_GAMMA "gfx/shell/gamma"
#define ID_BACKGROUND 0
@ -34,6 +34,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define ID_GLARE_REDUCTION 5
#define ID_SIMPLE_SKY 6
#define ID_ALLOW_MATERIALS 7
#define ID_VERTICALSYNC 7
typedef struct
{
@ -51,6 +52,7 @@ typedef struct
menuSlider_s glareReduction;
menuCheckBox_s fastSky;
menuCheckBox_s hiTextures;
menuCheckBox_s vsync;
HIMAGE hTestImage;
} uiVidOptions_t;
@ -81,6 +83,9 @@ static void UI_VidOptions_GetConfig( void )
if( CVAR_GET_FLOAT( "host_allow_materials" ))
uiVidOptions.hiTextures.enabled = 1;
if( CVAR_GET_FLOAT( "gl_swapInterval" ))
uiVidOptions.vsync.enabled = 1;
uiVidOptions.outlineWidth = 2;
UI_ScaleCoords( NULL, NULL, &uiVidOptions.outlineWidth, NULL );
}
@ -96,6 +101,7 @@ static void UI_VidOptions_UpdateConfig( void )
CVAR_SET_FLOAT( "r_flaresize", (uiVidOptions.glareReduction.curValue * 200.0f ) + 100.0f );
CVAR_SET_FLOAT( "r_fastsky", uiVidOptions.fastSky.enabled );
CVAR_SET_FLOAT( "host_allow_materials", uiVidOptions.hiTextures.enabled );
CVAR_SET_FLOAT( "gl_swapInterval", uiVidOptions.vsync.enabled );
if( CVAR_GET_FLOAT( "gl_ignorehwgamma" ))
PIC_SetGamma( uiVidOptions.hTestImage, RemapVal( uiVidOptions.gammaIntensity.curValue, 0.0f, 1.0f, 1.8f, 7.0f ));
@ -108,6 +114,7 @@ static void UI_VidOptions_SetConfig( void )
CVAR_SET_FLOAT( "r_flaresize", (uiVidOptions.glareReduction.curValue * 200.0f ) + 100.0f );
CVAR_SET_FLOAT( "r_fastsky", uiVidOptions.fastSky.enabled );
CVAR_SET_FLOAT( "host_allow_materials", uiVidOptions.hiTextures.enabled );
CVAR_SET_FLOAT( "gl_swapInterval", uiVidOptions.vsync.enabled );
if( CVAR_GET_FLOAT( "gl_ignorehwgamma" ))
CVAR_SET_FLOAT( "gamma", RemapVal( uiVidOptions.gammaIntensity.curValue, 0.0f, 1.0f, 1.8f, 7.0f ));
@ -279,6 +286,15 @@ static void UI_VidOptions_Init( void )
uiVidOptions.glareReduction.maxValue = 1.0;
uiVidOptions.glareReduction.range = 0.05f;
uiVidOptions.vsync.generic.id = ID_VERTICALSYNC;
uiVidOptions.vsync.generic.type = QMTYPE_CHECKBOX;
uiVidOptions.vsync.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
uiVidOptions.vsync.generic.name = "Vertical sync";
uiVidOptions.vsync.generic.x = 72;
uiVidOptions.vsync.generic.y = 565;
uiVidOptions.vsync.generic.callback = UI_VidOptions_Callback;
uiVidOptions.vsync.generic.statusText = "enable vertical synchronization";
uiVidOptions.fastSky.generic.id = ID_SIMPLE_SKY;
uiVidOptions.fastSky.generic.type = QMTYPE_CHECKBOX;
uiVidOptions.fastSky.generic.flags = QMF_HIGHLIGHTIFFOCUS|QMF_ACT_ONRELEASE|QMF_DROPSHADOW;
@ -308,6 +324,7 @@ static void UI_VidOptions_Init( void )
UI_AddItem( &uiVidOptions.menu, (void *)&uiVidOptions.fastSky );
UI_AddItem( &uiVidOptions.menu, (void *)&uiVidOptions.hiTextures );
UI_AddItem( &uiVidOptions.menu, (void *)&uiVidOptions.testImage );
UI_AddItem( &uiVidOptions.menu, (void *)&uiVidOptions.vsync );
}
/*