📄 ui_splevel.c
字号:
trap_R_RegisterShaderNoMip( ART_LEVELFRAME_SELECTED );
trap_R_RegisterShaderNoMip( ART_ARROW );
trap_R_RegisterShaderNoMip( ART_ARROW_FOCUS );
trap_R_RegisterShaderNoMip( ART_MAP_UNKNOWN );
trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE1 );
trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE2 );
trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE3 );
trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE4 );
trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE5 );
trap_R_RegisterShaderNoMip( ART_BACK0 );
trap_R_RegisterShaderNoMip( ART_BACK1 );
trap_R_RegisterShaderNoMip( ART_FIGHT0 );
trap_R_RegisterShaderNoMip( ART_FIGHT1 );
trap_R_RegisterShaderNoMip( ART_RESET0 );
trap_R_RegisterShaderNoMip( ART_RESET1 );
trap_R_RegisterShaderNoMip( ART_CUSTOM0 );
trap_R_RegisterShaderNoMip( ART_CUSTOM1 );
for( n = 0; n < 6; n++ ) {
trap_R_RegisterShaderNoMip( ui_medalPicNames[n] );
levelMenuInfo.awardSounds[n] = trap_S_RegisterSound( ui_medalSounds[n], qfalse );
}
levelMenuInfo.levelSelectedPic = trap_R_RegisterShaderNoMip( ART_LEVELFRAME_SELECTED );
levelMenuInfo.levelFocusPic = trap_R_RegisterShaderNoMip( ART_LEVELFRAME_FOCUS );
levelMenuInfo.levelCompletePic[0] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE1 );
levelMenuInfo.levelCompletePic[1] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE2 );
levelMenuInfo.levelCompletePic[2] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE3 );
levelMenuInfo.levelCompletePic[3] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE4 );
levelMenuInfo.levelCompletePic[4] = trap_R_RegisterShaderNoMip( ART_MAP_COMPLETE5 );
}
/*
=================
UI_SPLevelMenu_Init
=================
*/
static void UI_SPLevelMenu_Init( void ) {
int skill;
int n;
int x, y;
int count;
char buf[MAX_QPATH];
skill = (int)trap_Cvar_VariableValue( "g_spSkill" );
if( skill < 1 || skill > 5 ) {
trap_Cvar_Set( "g_spSkill", "2" );
skill = 2;
}
memset( &levelMenuInfo, 0, sizeof(levelMenuInfo) );
levelMenuInfo.menu.fullscreen = qtrue;
levelMenuInfo.menu.wrapAround = qtrue;
levelMenuInfo.menu.draw = UI_SPLevelMenu_MenuDraw;
UI_SPLevelMenu_Cache();
levelMenuInfo.item_banner.generic.type = MTYPE_BTEXT;
levelMenuInfo.item_banner.generic.x = 320;
levelMenuInfo.item_banner.generic.y = 16;
levelMenuInfo.item_banner.string = "CHOOSE LEVEL";
levelMenuInfo.item_banner.color = color_red;
levelMenuInfo.item_banner.style = UI_CENTER;
levelMenuInfo.item_leftarrow.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_leftarrow.generic.name = ART_ARROW;
levelMenuInfo.item_leftarrow.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_leftarrow.generic.x = 18;
levelMenuInfo.item_leftarrow.generic.y = 64;
levelMenuInfo.item_leftarrow.generic.callback = UI_SPLevelMenu_LeftArrowEvent;
levelMenuInfo.item_leftarrow.generic.id = ID_LEFTARROW;
levelMenuInfo.item_leftarrow.width = 16;
levelMenuInfo.item_leftarrow.height = 114;
levelMenuInfo.item_leftarrow.focuspic = ART_ARROW_FOCUS;
levelMenuInfo.item_maps[0].generic.type = MTYPE_BITMAP;
levelMenuInfo.item_maps[0].generic.name = levelMenuInfo.levelPicNames[0];
levelMenuInfo.item_maps[0].generic.flags = QMF_LEFT_JUSTIFY;
levelMenuInfo.item_maps[0].generic.x = 46;
levelMenuInfo.item_maps[0].generic.y = 64;
levelMenuInfo.item_maps[0].generic.id = ID_PICTURE0;
levelMenuInfo.item_maps[0].generic.callback = UI_SPLevelMenu_LevelEvent;
levelMenuInfo.item_maps[0].width = 128;
levelMenuInfo.item_maps[0].height = 96;
levelMenuInfo.item_maps[1].generic.type = MTYPE_BITMAP;
levelMenuInfo.item_maps[1].generic.name = levelMenuInfo.levelPicNames[1];
levelMenuInfo.item_maps[1].generic.flags = QMF_LEFT_JUSTIFY;
levelMenuInfo.item_maps[1].generic.x = 186;
levelMenuInfo.item_maps[1].generic.y = 64;
levelMenuInfo.item_maps[1].generic.id = ID_PICTURE1;
levelMenuInfo.item_maps[1].generic.callback = UI_SPLevelMenu_LevelEvent;
levelMenuInfo.item_maps[1].width = 128;
levelMenuInfo.item_maps[1].height = 96;
levelMenuInfo.item_maps[2].generic.type = MTYPE_BITMAP;
levelMenuInfo.item_maps[2].generic.name = levelMenuInfo.levelPicNames[2];
levelMenuInfo.item_maps[2].generic.flags = QMF_LEFT_JUSTIFY;
levelMenuInfo.item_maps[2].generic.x = 326;
levelMenuInfo.item_maps[2].generic.y = 64;
levelMenuInfo.item_maps[2].generic.id = ID_PICTURE2;
levelMenuInfo.item_maps[2].generic.callback = UI_SPLevelMenu_LevelEvent;
levelMenuInfo.item_maps[2].width = 128;
levelMenuInfo.item_maps[2].height = 96;
levelMenuInfo.item_maps[3].generic.type = MTYPE_BITMAP;
levelMenuInfo.item_maps[3].generic.name = levelMenuInfo.levelPicNames[3];
levelMenuInfo.item_maps[3].generic.flags = QMF_LEFT_JUSTIFY;
levelMenuInfo.item_maps[3].generic.x = 466;
levelMenuInfo.item_maps[3].generic.y = 64;
levelMenuInfo.item_maps[3].generic.id = ID_PICTURE3;
levelMenuInfo.item_maps[3].generic.callback = UI_SPLevelMenu_LevelEvent;
levelMenuInfo.item_maps[3].width = 128;
levelMenuInfo.item_maps[3].height = 96;
levelMenuInfo.item_rightarrow.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_rightarrow.generic.name = ART_ARROW;
levelMenuInfo.item_rightarrow.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_rightarrow.generic.x = 606;
levelMenuInfo.item_rightarrow.generic.y = 64;
levelMenuInfo.item_rightarrow.generic.callback = UI_SPLevelMenu_RightArrowEvent;
levelMenuInfo.item_rightarrow.generic.id = ID_RIGHTARROW;
levelMenuInfo.item_rightarrow.width = -16;
levelMenuInfo.item_rightarrow.height = 114;
levelMenuInfo.item_rightarrow.focuspic = ART_ARROW_FOCUS;
trap_Cvar_VariableStringBuffer( "model", levelMenuInfo.playerModel, sizeof(levelMenuInfo.playerModel) );
PlayerIcon( levelMenuInfo.playerModel, levelMenuInfo.playerPicName, sizeof(levelMenuInfo.playerPicName) );
levelMenuInfo.item_player.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_player.generic.name = levelMenuInfo.playerPicName;
levelMenuInfo.item_player.generic.flags = QMF_LEFT_JUSTIFY|QMF_MOUSEONLY;
levelMenuInfo.item_player.generic.x = 288;
levelMenuInfo.item_player.generic.y = AWARDS_Y;
levelMenuInfo.item_player.generic.id = ID_PLAYERPIC;
levelMenuInfo.item_player.generic.callback = UI_SPLevelMenu_PlayerEvent;
levelMenuInfo.item_player.width = 64;
levelMenuInfo.item_player.height = 64;
for( n = 0; n < 6; n++ ) {
levelMenuInfo.awardLevels[n] = UI_GetAwardLevel( n );
}
levelMenuInfo.awardLevels[AWARD_FRAGS] = 100 * (levelMenuInfo.awardLevels[AWARD_FRAGS] / 100);
y = AWARDS_Y;
count = 0;
for( n = 0; n < 6; n++ ) {
if( levelMenuInfo.awardLevels[n] ) {
if( count & 1 ) {
x = 224 - (count - 1 ) / 2 * (48 + 16);
}
else {
x = 368 + count / 2 * (48 + 16);
}
levelMenuInfo.item_awards[count].generic.type = MTYPE_BITMAP;
levelMenuInfo.item_awards[count].generic.name = ui_medalPicNames[n];
levelMenuInfo.item_awards[count].generic.flags = QMF_LEFT_JUSTIFY|QMF_SILENT|QMF_MOUSEONLY;
levelMenuInfo.item_awards[count].generic.x = x;
levelMenuInfo.item_awards[count].generic.y = y;
levelMenuInfo.item_awards[count].generic.id = ID_AWARD1 + n;
levelMenuInfo.item_awards[count].generic.callback = UI_SPLevelMenu_AwardEvent;
levelMenuInfo.item_awards[count].width = 48;
levelMenuInfo.item_awards[count].height = 48;
count++;
}
}
levelMenuInfo.item_back.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_back.generic.name = ART_BACK0;
levelMenuInfo.item_back.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_back.generic.x = 0;
levelMenuInfo.item_back.generic.y = 480-64;
levelMenuInfo.item_back.generic.callback = UI_SPLevelMenu_BackEvent;
levelMenuInfo.item_back.generic.id = ID_BACK;
levelMenuInfo.item_back.width = 128;
levelMenuInfo.item_back.height = 64;
levelMenuInfo.item_back.focuspic = ART_BACK1;
levelMenuInfo.item_reset.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_reset.generic.name = ART_RESET0;
levelMenuInfo.item_reset.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_reset.generic.x = 170;
levelMenuInfo.item_reset.generic.y = 480-64;
levelMenuInfo.item_reset.generic.callback = UI_SPLevelMenu_ResetEvent;
levelMenuInfo.item_reset.generic.id = ID_RESET;
levelMenuInfo.item_reset.width = 128;
levelMenuInfo.item_reset.height = 64;
levelMenuInfo.item_reset.focuspic = ART_RESET1;
levelMenuInfo.item_custom.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_custom.generic.name = ART_CUSTOM0;
levelMenuInfo.item_custom.generic.flags = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_custom.generic.x = 342;
levelMenuInfo.item_custom.generic.y = 480-64;
levelMenuInfo.item_custom.generic.callback = UI_SPLevelMenu_CustomEvent;
levelMenuInfo.item_custom.generic.id = ID_CUSTOM;
levelMenuInfo.item_custom.width = 128;
levelMenuInfo.item_custom.height = 64;
levelMenuInfo.item_custom.focuspic = ART_CUSTOM1;
levelMenuInfo.item_next.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_next.generic.name = ART_FIGHT0;
levelMenuInfo.item_next.generic.flags = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
levelMenuInfo.item_next.generic.x = 640;
levelMenuInfo.item_next.generic.y = 480-64;
levelMenuInfo.item_next.generic.callback = UI_SPLevelMenu_NextEvent;
levelMenuInfo.item_next.generic.id = ID_NEXT;
levelMenuInfo.item_next.width = 128;
levelMenuInfo.item_next.height = 64;
levelMenuInfo.item_next.focuspic = ART_FIGHT1;
levelMenuInfo.item_null.generic.type = MTYPE_BITMAP;
levelMenuInfo.item_null.generic.flags = QMF_LEFT_JUSTIFY|QMF_MOUSEONLY|QMF_SILENT;
levelMenuInfo.item_null.generic.x = 0;
levelMenuInfo.item_null.generic.y = 0;
levelMenuInfo.item_null.width = 640;
levelMenuInfo.item_null.height = 480;
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_banner );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_leftarrow );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_maps[0] );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_maps[1] );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_maps[2] );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_maps[3] );
levelMenuInfo.item_maps[0].generic.bottom += 18;
levelMenuInfo.item_maps[1].generic.bottom += 18;
levelMenuInfo.item_maps[2].generic.bottom += 18;
levelMenuInfo.item_maps[3].generic.bottom += 18;
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_rightarrow );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_player );
for( n = 0; n < count; n++ ) {
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_awards[n] );
}
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_back );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_reset );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_custom );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_next );
Menu_AddItem( &levelMenuInfo.menu, &levelMenuInfo.item_null );
trap_Cvar_VariableStringBuffer( "ui_spSelection", buf, sizeof(buf) );
if( *buf ) {
n = atoi( buf );
selectedArenaSet = n / ARENAS_PER_TIER;
selectedArena = n % ARENAS_PER_TIER;
}
else {
selectedArenaSet = currentSet;
selectedArena = currentGame;
}
UI_SPLevelMenu_SetMenuItems();
}
/*
=================
UI_SPLevelMenu
=================
*/
void UI_SPLevelMenu( void ) {
int level;
int trainingLevel;
const char *arenaInfo;
trainingTier = -1;
arenaInfo = UI_GetSpecialArenaInfo( "training" );
if( arenaInfo ) {
minTier = trainingTier;
trainingLevel = atoi( Info_ValueForKey( arenaInfo, "num" ) );
}
else {
minTier = 0;
trainingLevel = -2;
}
finalTier = UI_GetNumSPTiers();
arenaInfo = UI_GetSpecialArenaInfo( "final" );
if( arenaInfo ) {
maxTier = finalTier;
}
else {
maxTier = finalTier - 1;
if( maxTier < minTier ) {
maxTier = minTier;
}
}
level = UI_GetCurrentGame();
if ( level == -1 ) {
level = UI_GetNumSPArenas() - 1;
if( maxTier == finalTier ) {
level++;
}
}
if( level == trainingLevel ) {
currentSet = -1;
currentGame = 0;
}
else {
currentSet = level / ARENAS_PER_TIER;
currentGame = level % ARENAS_PER_TIER;
}
UI_SPLevelMenu_Init();
UI_PushMenu( &levelMenuInfo.menu );
Menu_SetCursorToItem( &levelMenuInfo.menu, &levelMenuInfo.item_next );
}
/*
=================
UI_SPLevelMenu_f
=================
*/
void UI_SPLevelMenu_f( void ) {
trap_Key_SetCatcher( KEYCATCH_UI );
uis.menusp = 0;
UI_SPLevelMenu();
}
/*
=================
UI_SPLevelMenu_ReInit
=================
*/
void UI_SPLevelMenu_ReInit( void ) {
levelMenuInfo.reinit = qtrue;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -