mirror of
https://github.com/GearsProgress/Poke_Transporter_GB.git
synced 2026-03-21 17:34:42 -05:00
129 lines
3.0 KiB
C++
129 lines
3.0 KiB
C++
#include "select_menu.h"
|
|
#include "sprite_data.h"
|
|
|
|
Select_Menu::Select_Menu(bool enable_cancel, int nMenu_type)
|
|
{
|
|
cancel_enabled = enable_cancel;
|
|
menu_type = nMenu_type;
|
|
}
|
|
|
|
void Select_Menu::add_option(std::string option, int return_value)
|
|
{
|
|
menu_options.push_back(option);
|
|
return_values.push_back(return_value);
|
|
}
|
|
|
|
int Select_Menu::select_menu_main()
|
|
{
|
|
show_menu();
|
|
curr_selection = 0;
|
|
|
|
key_poll(); // Reset the buttons
|
|
|
|
bool update = true;
|
|
bool first = true;
|
|
while (true)
|
|
{
|
|
update = true;
|
|
if (key_hit(KEY_DOWN))
|
|
{
|
|
curr_selection = ((curr_selection + 1) % menu_options.size());
|
|
}
|
|
else if (key_hit(KEY_UP))
|
|
{
|
|
curr_selection = ((curr_selection + (menu_options.size() - 1)) % menu_options.size());
|
|
}
|
|
else if (key_hit(KEY_A))
|
|
{
|
|
hide_menu();
|
|
return return_values[curr_selection];
|
|
}
|
|
else if (cancel_enabled && key_hit(KEY_B))
|
|
{
|
|
hide_menu();
|
|
return -1;
|
|
}
|
|
else if (!first)
|
|
{
|
|
update = false;
|
|
}
|
|
update_y_offset();
|
|
obj_set_pos(point_arrow, 19 * 8, (2 + curr_selection) * 8);
|
|
global_next_frame();
|
|
|
|
if (update)
|
|
{
|
|
if (return_values[curr_selection] == -1)
|
|
{
|
|
switch (menu_type)
|
|
{
|
|
case CART_MENU:
|
|
obj_hide(cart_shell);
|
|
obj_hide(cart_label);
|
|
break;
|
|
case LANG_MENU:
|
|
obj_hide(flag);
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (menu_type)
|
|
{
|
|
case CART_MENU:
|
|
load_select_sprites(return_values[curr_selection], lang);
|
|
obj_unhide(cart_shell, 0);
|
|
obj_unhide(cart_label, 0);
|
|
break;
|
|
case LANG_MENU:
|
|
load_select_sprites(0, return_values[curr_selection]);
|
|
obj_unhide(flag, 0);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void Select_Menu::show_menu()
|
|
{
|
|
add_menu_box(menu_options.size());
|
|
for (unsigned int i = 0; i < menu_options.size(); i++)
|
|
{
|
|
tte_set_pos(20 * 8, (2 + i) * 8);
|
|
tte_write(menu_options[i].c_str());
|
|
}
|
|
obj_unhide(point_arrow, 0);
|
|
obj_set_pos(point_arrow, 19 * 8, 2 * 8);
|
|
}
|
|
|
|
void Select_Menu::hide_menu()
|
|
{
|
|
obj_hide(point_arrow);
|
|
tte_erase_rect(20 * 8, 2 * 8, (20 + 8) * 8, (2 + menu_options.size()) * 8);
|
|
reload_textbox_background();
|
|
clear_options();
|
|
obj_hide(point_arrow);
|
|
switch (menu_type)
|
|
{
|
|
case CART_MENU:
|
|
obj_hide(cart_shell);
|
|
obj_hide(cart_label);
|
|
break;
|
|
case LANG_MENU:
|
|
obj_hide(flag);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Select_Menu::clear_options()
|
|
{
|
|
menu_options.clear();
|
|
return_values.clear();
|
|
}
|
|
|
|
void Select_Menu::set_lang(int nLang)
|
|
{
|
|
lang = nLang;
|
|
} |