mirror of
https://github.com/nzp-team/quakec.git
synced 2024-12-11 05:00:52 +00:00
186 lines
5.7 KiB
C++
186 lines
5.7 KiB
C++
// Since these are built on-the-fly, do not populate here
|
|
string menu_maps_buttons[13];
|
|
|
|
float menu_maps_init;
|
|
|
|
//
|
|
// Menu_Maps_Init()
|
|
// Array lookup optimization that stores
|
|
// the array index of Stock NZ:P maps
|
|
// from the user_maps struct.
|
|
//
|
|
void() Menu_Maps_Init =
|
|
{
|
|
menu_maps_init = true;
|
|
user_maps_page = 0;
|
|
|
|
for(int i = 0; i < stock_maps.length; i++) {
|
|
for(int j = 0; j < user_maps_count; j++) {
|
|
if (user_maps[j].map_name == stock_maps[i].bsp_name)
|
|
stock_maps[i].array_index = j;
|
|
}
|
|
}
|
|
};
|
|
|
|
void() Menu_Maps_NextPage =
|
|
{
|
|
Menu_PlaySound(MENU_SND_ENTER);
|
|
user_maps_page++;
|
|
}
|
|
|
|
void() Menu_Maps_PrevPage =
|
|
{
|
|
Menu_PlaySound(MENU_SND_ENTER);
|
|
user_maps_page--;
|
|
}
|
|
|
|
void(string bsp_name) Menu_Maps_LoadMap =
|
|
{
|
|
localcmd(sprintf("map %s\n", bsp_name));
|
|
current_menu = MENU_MAIN;
|
|
};
|
|
|
|
string(string prev_id) Menu_Maps_GetNextButton =
|
|
{
|
|
if (prev_id == "")
|
|
return menu_maps_buttons[0];
|
|
|
|
string ret = menu_maps_buttons[0];
|
|
|
|
for(float i = 0; i < menu_maps_buttons.length; i++) {
|
|
if (menu_maps_buttons[i] == prev_id) {
|
|
if (i + 1 >= menu_maps_buttons.length)
|
|
break;
|
|
|
|
ret = menu_maps_buttons[i + 1];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (ret == "")
|
|
return menu_maps_buttons[0];
|
|
|
|
return ret;
|
|
};
|
|
|
|
string(string next_id) Menu_Maps_GetPreviousButton =
|
|
{
|
|
// Get the last populated entry.
|
|
string last_populated_entry = "";
|
|
for(float j = menu_maps_buttons.length - 1; j > 0; j--) {
|
|
if (menu_maps_buttons[j] != "") {
|
|
last_populated_entry = menu_maps_buttons[j];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (next_id == "")
|
|
return last_populated_entry;
|
|
|
|
string ret = last_populated_entry;
|
|
|
|
for(float i = menu_maps_buttons.length - 1; i > 0; i--) {
|
|
if (menu_maps_buttons[i] == next_id) {
|
|
if (i - 1 < 0)
|
|
break;
|
|
|
|
ret = menu_maps_buttons[i - 1];
|
|
break;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
};
|
|
|
|
void() Menu_Maps =
|
|
{
|
|
if (!menu_maps_init)
|
|
Menu_Maps_Init();
|
|
|
|
Menu_DrawBackground();
|
|
|
|
string back_string = "";
|
|
float back_menudest = 0;
|
|
|
|
switch(menu_map_mode) {
|
|
case MAP_SOLOSTOCK: Menu_DrawTitle("SELECT MAP: SOLO"); back_string = "Return to Main Menu."; back_menudest = MENU_MAIN; break;
|
|
case MAP_SOLOUSER: Menu_DrawTitle("USER MAPS: SOLO"); back_string = "Return to Stock Map selection."; back_menudest = MENU_SOLO; break;
|
|
case MAP_COOPSTOCK: Menu_DrawTitle("SELECT MAP: COOP"); back_string = "Return to Create Game Menu."; back_menudest = MENU_COOPCREATE; break;
|
|
case MAP_COOPUSER: Menu_DrawTitle("USER MAPS: COOP"); back_string = "Return to Stock Map selection."; back_menudest = MENU_COOPSTOCK; break;
|
|
default: break;
|
|
}
|
|
|
|
Menu_DrawMapPanel();
|
|
|
|
int i;
|
|
|
|
// Reset map button registry
|
|
for(int h = 0; h < 13; h++) {
|
|
menu_maps_buttons[h] = "";
|
|
}
|
|
|
|
// Stock Maps
|
|
if (menu_map_mode == MAP_SOLOSTOCK || menu_map_mode == MAP_COOPSTOCK) {
|
|
for(i = 0; i < stock_maps.length; i++) {
|
|
// Build the map strings
|
|
menu_maps_buttons[i] = sprintf("map_%s", stock_maps[i].bsp_name);
|
|
|
|
Menu_MapButton(i + 1, sprintf("map_%s", stock_maps[i].bsp_name), stock_maps[i].bsp_name, -1) ? Menu_Maps_LoadMap(stock_maps[i].bsp_name) : 0;
|
|
}
|
|
Menu_DrawDivider(i + 1.25);
|
|
|
|
if (menu_map_mode == MAP_SOLOSTOCK) {
|
|
Menu_Button(i + 1.5, "map_nzpusermaps", "USER MAPS", "View User-Created Maps.") ? current_menu = MENU_SOLOUSER : 0;
|
|
} else if (menu_map_mode == MAP_COOPSTOCK) {
|
|
Menu_Button(i + 1.5, "map_nzpusermaps", "USER MAPS", "View User-Created Maps.") ? current_menu = MENU_COOPUSER : 0;
|
|
}
|
|
|
|
// Usermaps and back button registry
|
|
menu_maps_buttons[i] = "map_nzpusermaps";
|
|
menu_maps_buttons[i + 1] = "map_back";
|
|
} else {
|
|
// calculate the amount of usermaps we can display on this page.
|
|
int maps_on_page = 10; // default to 10, all that will fit on the UI.
|
|
int maps_start_position = (user_maps_page * 10);
|
|
|
|
// Not all 10 slots can be filled..
|
|
if (maps_on_page > user_maps_count - maps_start_position)
|
|
maps_on_page = user_maps_count - maps_start_position;
|
|
|
|
for (i = maps_start_position; i < maps_on_page + maps_start_position; i++) {
|
|
int menu_position = (i + 1) - (user_maps_page * 10);
|
|
string bsp_name = user_maps[i].map_name;
|
|
|
|
// Build the map strings
|
|
menu_maps_buttons[menu_position - 1] = sprintf("map_%s", bsp_name);
|
|
|
|
Menu_MapButton(menu_position, sprintf("map_%s", bsp_name), bsp_name, i) ? localcmd(sprintf("map %s\n", bsp_name)) : 0;
|
|
}
|
|
|
|
int current_registry_position = ((i + 1) - (user_maps_page * 10)) - 1;
|
|
|
|
Menu_DrawDivider(11.25);
|
|
|
|
if (maps_on_page + maps_start_position < user_maps_count) {
|
|
menu_maps_buttons[current_registry_position] = "map_usernext";
|
|
current_registry_position++;
|
|
Menu_Button(-3, "map_usernext", "NEXT PAGE", "Advance to next User Map page.") ? Menu_Maps_NextPage() : 0;
|
|
} else {
|
|
Menu_GreyButton(-3, "NEXT PAGE");
|
|
}
|
|
|
|
if (user_maps_page != 0) {
|
|
menu_maps_buttons[current_registry_position] = "map_userprev";
|
|
current_registry_position++;
|
|
Menu_Button(-2, "map_userprev", "PREVIOUS PAGE", "Return to last User Map page.") ? Menu_Maps_PrevPage() : 0;
|
|
} else {
|
|
Menu_GreyButton(-2, "PREVIOUS PAGE");
|
|
}
|
|
|
|
menu_maps_buttons[current_registry_position] = "map_back";
|
|
}
|
|
|
|
Menu_Button(-1, "map_back", "BACK", back_string) ? current_menu = back_menudest : 0;
|
|
|
|
sui_pop_frame();
|
|
};
|