MenuAction menuaction = MENU_ACTION_NONE;
bool show_menu;
bool menu_change;
-texture_type checkbox, checkbox_checked, back, arrow_left, arrow_right;
+
+Surface* checkbox;
+Surface* checkbox_checked;
+Surface* back;
+Surface* arrow_left;
+Surface* arrow_right;
Menu* main_menu = 0;
Menu* game_menu = 0;
+Menu* worldmap_menu = 0;
Menu* options_menu = 0;
Menu* options_controls_menu = 0;
Menu* highscore_menu = 0;
{
pos_x = screen->w/2;
pos_y = screen->h/2;
+ has_backitem = false;
last_menu = 0;
arrange_left = 0;
active_item = 0;
void
Menu::additem(MenuItemKind kind_, const std::string& text_, int toggle_, Menu* menu_)
{
+ if(kind_ == MN_BACK)
+ has_backitem = true;
+
additem(MenuItem::create(kind_, text_.c_str(), toggle_, menu_));
}
void
Menu::additem(MenuItem* pmenu_item)
{
+ if(pmenu_item->kind == MN_BACK)
+ has_backitem = true;
+
item.push_back(*pmenu_item);
delete pmenu_item;
}
int text_width = strlen(pitem.text) * font_width;
int input_width = strlen(pitem.input) * font_width;
int list_width = strlen(string_list_active(pitem.list)) * font_width;
- text_type* text_font = &white_text;
+ Text* text_font = white_text;
if (arrange_left)
x_pos += 24 - menu_width/2 + (text_width + input_width + list_width)/2;
if(index == active_item)
{
shadow_size = 3;
- text_font = &blue_text;
+ text_font = blue_text;
}
switch (pitem.kind)
{
case MN_DEACTIVE:
{
- text_draw_align(&black_text, pitem.text,
- x_pos, y_pos,
- A_HMIDDLE, A_VMIDDLE, 2);
+ black_text->draw_align(pitem.text,
+ x_pos, y_pos,
+ A_HMIDDLE, A_VMIDDLE, 2);
break;
}
}
case MN_LABEL:
{
- text_draw_align(&white_big_text, pitem.text,
- x_pos, y_pos,
- A_HMIDDLE, A_VMIDDLE, 2);
+ white_big_text->draw_align(pitem.text,
+ x_pos, y_pos,
+ A_HMIDDLE, A_VMIDDLE, 2);
break;
}
case MN_TEXTFIELD:
input_width + font_width, 18,
0,0,0,128);
- text_draw_align(&gold_text, pitem.input,
- x_pos + text_pos, y_pos,
- A_HMIDDLE, A_VMIDDLE, 2);
+ gold_text->draw_align(pitem.input,
+ x_pos + text_pos, y_pos,
+ A_HMIDDLE, A_VMIDDLE, 2);
- text_draw_align(text_font, pitem.text,
- x_pos - (input_width + font_width)/2, y_pos,
- A_HMIDDLE, A_VMIDDLE, shadow_size);
+ text_font->draw_align(pitem.text,
+ x_pos - (input_width + font_width)/2, y_pos,
+ A_HMIDDLE, A_VMIDDLE, shadow_size);
break;
}
case MN_STRINGSELECT:
int text_pos = (text_width + font_width)/2;
/* Draw arrows */
- texture_draw(&arrow_left, x_pos - list_pos + text_pos - 17, y_pos - 8);
- texture_draw(&arrow_right, x_pos - list_pos + text_pos - 1 + list_pos_2, y_pos - 8);
+ arrow_left->draw( x_pos - list_pos + text_pos - 17, y_pos - 8);
+ arrow_right->draw( x_pos - list_pos + text_pos - 1 + list_pos_2, y_pos - 8);
/* Draw input background */
fillrect(x_pos - list_pos + text_pos - 1, y_pos - 10,
list_pos_2, 18,
0,0,0,128);
- text_draw_align(&gold_text, string_list_active(pitem.list),
+ gold_text->draw_align(string_list_active(pitem.list),
x_pos + text_pos, y_pos,
A_HMIDDLE, A_VMIDDLE,2);
- text_draw_align(text_font, pitem.text,
+ text_font->draw_align(pitem.text,
x_pos - list_pos_2/2, y_pos,
A_HMIDDLE, A_VMIDDLE, shadow_size);
break;
}
case MN_BACK:
{
- text_draw_align(text_font, pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
- texture_draw(&back, x_pos + text_width/2 + font_width, y_pos - 8);
+ text_font->draw_align(pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
+ back->draw( x_pos + text_width/2 + font_width, y_pos - 8);
break;
}
case MN_TOGGLE:
{
- text_draw_align(text_font, pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
+ text_font->draw_align(pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
if(pitem.toggled)
- texture_draw(&checkbox_checked,
+ checkbox_checked->draw(
x_pos + (text_width+font_width)/2,
y_pos - 8);
else
- texture_draw(&checkbox,
+ checkbox->draw(
x_pos + (text_width+font_width)/2,
y_pos - 8);
break;
}
case MN_ACTION:
- text_draw_align(text_font, pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
+ text_font->draw_align(pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
break;
case MN_GOTO:
- text_draw_align(text_font, pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
+ text_font->draw_align(pitem.text, x_pos, y_pos, A_HMIDDLE, A_VMIDDLE, shadow_size);
break;
}
}
/* Draw the current menu and execute the (menu)events */
void menu_process_current(void)
{
+ if(!show_menu)
+ return;
+
menu_change = false;
if(current_menu != NULL)
void
Menu::event(SDL_Event& event)
{
+ if(show_menu == false && event.key.keysym.sym != SDLK_ESCAPE)
+ return;
+
SDLKey key;
switch(event.type)
{
menu_change = true;
delete_character++;
break;
+ case SDLK_ESCAPE:
+ if(show_menu && has_backitem == true && last_menu != NULL)
+ Menu::set_current(last_menu);
+ else if(show_menu)
+ show_menu = false;
+ else
+ show_menu = true;
default:
if( (key >= SDLK_0 && key <= SDLK_9) || (key >= SDLK_a && key <= SDLK_z) || (key >= SDLK_SPACE && key <= SDLK_SLASH))
{