static void NextEvent(void* ptr, int event) { int currentSet, levelSet, level, currentLevel; const char *arenaInfo; if(event != QM_ACTIVATED) return; UI_PopMenu(); /* handle specially if we just won the training map */ if(postgame.won == 0) level = 0; else level = postgame.level + 1; levelSet = level / ARENAS_PER_TIER; currentLevel = UI_GetCurrentGame(); if(currentLevel == -1) currentLevel = postgame.level; currentSet = currentLevel / ARENAS_PER_TIER; if(levelSet > currentSet || levelSet == UI_GetNumSPTiers()) level = currentLevel; arenaInfo = UI_GetArenaInfoByNumber(level); if(!arenaInfo) return; UI_SPArena_Start(arenaInfo); }
/* ================= UI_SPLevelMenu_LevelEvent ================= */ static void UI_SPLevelMenu_LevelEvent( void* ptr, int notification ) { if (notification != QM_ACTIVATED) { return; } if ( selectedArenaSet == trainingTier || selectedArenaSet == finalTier ) { return; } selectedArena = ((menucommon_s*)ptr)->id - ID_PICTURE0; levelMenuInfo.selectedArenaInfo = UI_GetArenaInfoByNumber( selectedArenaSet * ARENAS_PER_TIER + selectedArena ); UI_SPLevelMenu_SetBots(); trap_Cvar_SetValue( "ui_spSelection", selectedArenaSet * ARENAS_PER_TIER + selectedArena ); }
/* ================= UI_SPPostgameMenu_NextEvent ================= */ static void UI_SPPostgameMenu_NextEvent( void* ptr, int event ) { int currentSet; int levelSet; int level; int currentLevel; const char *arenaInfo; if (event != QM_ACTIVATED) { return; } UI_PopMenu(); // handle specially if we just won the training map if( postgameMenuInfo.won == 0 ) { level = 0; } else { level = postgameMenuInfo.level + 1; } levelSet = level / ARENAS_PER_TIER; currentLevel = UI_GetCurrentGame(); if( currentLevel == -1 ) { currentLevel = postgameMenuInfo.level; } currentSet = currentLevel / ARENAS_PER_TIER; if( levelSet > currentSet || levelSet == UI_GetNumSPTiers() ) { level = currentLevel; } arenaInfo = UI_GetArenaInfoByNumber( level ); if ( !arenaInfo ) { return; } UI_SPArena_Start( arenaInfo ); }
static void UI_SPLevelMenu_SetMenuItems( void ) { int n; int level; const char *arenaInfo; if ( selectedArenaSet > currentSet ) { selectedArena = -1; } else if ( selectedArena == -1 ) { selectedArena = 0; } if( selectedArenaSet == trainingTier || selectedArenaSet == finalTier ) { selectedArena = 0; } if( selectedArena != -1 ) { trap_Cvar_SetValue( "ui_spSelection", selectedArenaSet * ARENAS_PER_TIER + selectedArena ); } if( selectedArenaSet == trainingTier ) { arenaInfo = UI_GetSpecialArenaInfo( "training" ); level = atoi( Info_ValueForKey( arenaInfo, "num" ) ); UI_SPLevelMenu_SetMenuArena( 0, level, arenaInfo ); levelMenuInfo.selectedArenaInfo = arenaInfo; levelMenuInfo.item_maps[0].generic.x = 256; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 32; levelMenuInfo.numMaps = 1; levelMenuInfo.item_maps[1].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[2].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[3].generic.flags |= QMF_INACTIVE; levelMenuInfo.levelPicNames[1][0] = 0; levelMenuInfo.levelPicNames[2][0] = 0; levelMenuInfo.levelPicNames[3][0] = 0; levelMenuInfo.item_maps[1].shader = 0; levelMenuInfo.item_maps[2].shader = 0; levelMenuInfo.item_maps[3].shader = 0; } else if( selectedArenaSet == finalTier ) { arenaInfo = UI_GetSpecialArenaInfo( "final" ); level = atoi( Info_ValueForKey( arenaInfo, "num" ) ); UI_SPLevelMenu_SetMenuArena( 0, level, arenaInfo ); levelMenuInfo.selectedArenaInfo = arenaInfo; levelMenuInfo.item_maps[0].generic.x = 256; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 32; levelMenuInfo.numMaps = 1; levelMenuInfo.item_maps[1].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[2].generic.flags |= QMF_INACTIVE; levelMenuInfo.item_maps[3].generic.flags |= QMF_INACTIVE; levelMenuInfo.levelPicNames[1][0] = 0; levelMenuInfo.levelPicNames[2][0] = 0; levelMenuInfo.levelPicNames[3][0] = 0; levelMenuInfo.item_maps[1].shader = 0; levelMenuInfo.item_maps[2].shader = 0; levelMenuInfo.item_maps[3].shader = 0; } else { levelMenuInfo.item_maps[0].generic.x = 46; Bitmap_Init( &levelMenuInfo.item_maps[0] ); levelMenuInfo.item_maps[0].generic.bottom += 18; levelMenuInfo.numMaps = 4; for ( n = 0; n < 4; n++ ) { level = selectedArenaSet * ARENAS_PER_TIER + n; arenaInfo = UI_GetArenaInfoByNumber( level ); UI_SPLevelMenu_SetMenuArena( n, level, arenaInfo ); } if( selectedArena != -1 ) { levelMenuInfo.selectedArenaInfo = UI_GetArenaInfoByNumber( selectedArenaSet * ARENAS_PER_TIER + selectedArena ); } } // enable/disable arrows when they are valid/invalid if ( selectedArenaSet == minTier ) { levelMenuInfo.item_leftarrow.generic.flags |= ( QMF_INACTIVE | QMF_HIDDEN ); } else { levelMenuInfo.item_leftarrow.generic.flags &= ~( QMF_INACTIVE | QMF_HIDDEN ); } if ( selectedArenaSet == maxTier ) { levelMenuInfo.item_rightarrow.generic.flags |= ( QMF_INACTIVE | QMF_HIDDEN ); } else { levelMenuInfo.item_rightarrow.generic.flags &= ~( QMF_INACTIVE | QMF_HIDDEN ); } UI_SPLevelMenu_SetBots(); }