#include <stdio.h>
#include <stdlib.h>
+#include <math.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
quit = 1;
else if(show_menu)
{
- menu_set_current(&game_menu);
+ Menu::set_current(game_menu);
show_menu = 0;
st_pause_ticks_stop();
}
else
{
- menu_set_current(&game_menu);
+ Menu::set_current(game_menu);
show_menu = 1;
st_pause_ticks_start();
}
{
for (x = 0; x < 21; ++x)
{
- drawshape(x * 32 - ((int)scroll_x % 32), y * 32,
+ drawshape(32*x - fmodf(scroll_x, 32), y * 32,
current_level.tiles[(int)y][(int)x + (int)(scroll_x / 32)]);
}
}
if(show_menu)
{
- if(current_menu == &game_menu)
+ if(current_menu == game_menu)
{
- switch (menu_check(&game_menu))
+ switch (game_menu->check())
{
case 2:
st_pause_ticks_stop();
break;
case 3:
- update_load_save_game_menu(&save_game_menu, false);
+ update_load_save_game_menu(save_game_menu, false);
break;
case 4:
- update_load_save_game_menu(&load_game_menu, true);
+ update_load_save_game_menu(load_game_menu, true);
break;
case 7:
st_pause_ticks_stop();
break;
}
}
- else if(current_menu == &options_menu)
+ else if(current_menu == options_menu)
{
process_options_menu();
}
- else if(current_menu == &save_game_menu )
+ else if(current_menu == save_game_menu )
{
process_save_load_game_menu(true);
}
- else if(current_menu == &load_game_menu )
+ else if(current_menu == load_game_menu )
{
process_save_load_game_menu(false);
}
*pinfo = (char*) malloc(sizeof(char) * (strlen(tmp)+1));
strcpy(*pinfo,tmp);
-
}
hs_score = score;
menu_reset();
- menu_set_current(&highscore_menu);
+ Menu::set_current(highscore_menu);
- if(!highscore_menu.item[0].input)
- highscore_menu.item[0].input = (char*) malloc(strlen(hs_name) + 1);
+ if(!highscore_menu->item[0].input)
+ highscore_menu->item[0].input = (char*) malloc(strlen(hs_name) + 1);
- strcpy(highscore_menu.item[0].input,hs_name);
+ strcpy(highscore_menu->item[0].input,hs_name);
/* ask for player's name */
show_menu = 1;
if(event.type == SDL_KEYDOWN)
menu_event(&event.key.keysym);
- switch (menu_check(&highscore_menu))
+ switch (highscore_menu->check())
{
case 0:
- if(highscore_menu.item[0].input != NULL)
- strcpy(hs_name, highscore_menu.item[0].input);
+ if(highscore_menu->item[0].input != NULL)
+ strcpy(hs_name, highscore_menu->item[0].input);
break;
}
static button_panel_type le_bkgd_panel;
static button_panel_type le_fgd_panel;
static button_panel_type le_bad_panel;
-static menu_type leveleditor_menu;
-static menu_type subset_load_menu;
-static menu_type subset_new_menu;
-static menu_type subset_settings_menu;
-static menu_type level_settings_menu;
+static Menu* leveleditor_menu;
+static Menu* subset_load_menu;
+static Menu* subset_new_menu;
+static Menu* subset_settings_menu;
+static Menu* level_settings_menu;
static square selection;
static int le_selection_mode;
if(show_menu)
{
menu_process_current();
- if(current_menu == &leveleditor_menu)
+ if(current_menu == leveleditor_menu)
{
- switch (menu_check(&leveleditor_menu))
+ switch (leveleditor_menu->check())
{
case 2:
show_menu = false;
break;
}
}
- else if(current_menu == &level_settings_menu)
+ else if(current_menu == level_settings_menu)
{
- switch (menu_check(&level_settings_menu))
+ switch (level_settings_menu->check())
{
case 13:
apply_level_settings_menu();
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
break;
default:
show_menu = true;
break;
}
}
- else if(current_menu == &subset_load_menu)
+ else if(current_menu == subset_load_menu)
{
- switch (i = menu_check(&subset_load_menu))
+ switch (i = subset_load_menu->check())
{
case 0:
break;
if(i != -1)
{
le_level_subset.load(level_subsets.item[i-2]);
- leveleditor_menu.item[3].kind = MN_GOTO;
+ leveleditor_menu->item[3].kind = MN_GOTO;
le_level = 1;
arrays_init();
loadshared();
break;
}
}
- else if(current_menu == &subset_new_menu)
+ else if(current_menu == subset_new_menu)
{
- if(subset_new_menu.item[2].input[0] == '\0')
- subset_new_menu.item[3].kind = MN_DEACTIVE;
+ if(subset_new_menu->item[2].input[0] == '\0')
+ subset_new_menu->item[3].kind = MN_DEACTIVE;
else
{
- subset_new_menu.item[3].kind = MN_ACTION;
+ subset_new_menu->item[3].kind = MN_ACTION;
- switch (i = menu_check(&subset_new_menu))
+ switch (i = subset_new_menu->check())
{
case 3:
- st_subset::create(subset_new_menu.item[2].input);
- le_level_subset.load(subset_new_menu.item[2].input);
- leveleditor_menu.item[3].kind = MN_GOTO;
+ st_subset::create(subset_new_menu->item[2].input);
+ le_level_subset.load(subset_new_menu->item[2].input);
+ leveleditor_menu->item[3].kind = MN_GOTO;
le_level = 1;
arrays_init();
loadshared();
le_set_defaults();
level_load_gfx(le_current_level);
le_activate_bad_guys();
- menu_item_change_input(&subset_new_menu.item[2],"");
+ menu_item_change_input(&subset_new_menu->item[2],"");
show_menu = true;
break;
}
}
}
- else if(current_menu == &subset_settings_menu)
+ else if(current_menu == subset_settings_menu)
{
- if(le_level_subset.title.compare(subset_settings_menu.item[2].input) == 0 && le_level_subset.description.compare(subset_settings_menu.item[3].input) == 0 )
- subset_settings_menu.item[5].kind = MN_DEACTIVE;
+ if(le_level_subset.title.compare(subset_settings_menu->item[2].input) == 0 && le_level_subset.description.compare(subset_settings_menu->item[3].input) == 0 )
+ subset_settings_menu->item[5].kind = MN_DEACTIVE;
else
- subset_settings_menu.item[5].kind = MN_ACTION;
+ subset_settings_menu->item[5].kind = MN_ACTION;
- switch (i = menu_check(&subset_settings_menu))
+ switch (i = subset_settings_menu->check())
{
case 5:
save_subset_settings_menu();
button_panel_additem(&le_bad_panel,button_create(filename, "Bad Guy",(SDLKey)((int)key+i),0,0),i);
}
- menu_init(&leveleditor_menu);
- menu_additem(&leveleditor_menu, MN_LABEL,"Level Editor Menu",0,0);
- menu_additem(&leveleditor_menu, MN_HL,"",0,0);
- menu_additem(&leveleditor_menu, MN_ACTION,"Return To Level Editor",0,0);
- menu_additem(&leveleditor_menu, MN_DEACTIVE,"Level Subset Settings",0,&subset_settings_menu);
- menu_additem(&leveleditor_menu, MN_GOTO,"Load Level Subset",0,&subset_load_menu);
- menu_additem(&leveleditor_menu, MN_GOTO,"New Level Subset",0,&subset_new_menu);
- menu_additem(&leveleditor_menu, MN_HL,"",0,0);
- menu_additem(&leveleditor_menu, MN_ACTION,"Quit Level Editor",0,0);
+ leveleditor_menu = new Menu();
+ subset_load_menu = new Menu();
+ subset_new_menu = new Menu();
+ subset_settings_menu = new Menu();
+ level_settings_menu = new Menu();
+
+ leveleditor_menu->additem(MN_LABEL,"Level Editor Menu",0,0);
+ leveleditor_menu->additem(MN_HL,"",0,0);
+ leveleditor_menu->additem(MN_ACTION,"Return To Level Editor",0,0);
+ leveleditor_menu->additem(MN_DEACTIVE,"Level Subset Settings",0,subset_settings_menu);
+ leveleditor_menu->additem(MN_GOTO,"Load Level Subset",0,subset_load_menu);
+ leveleditor_menu->additem(MN_GOTO,"New Level Subset",0,subset_new_menu);
+ leveleditor_menu->additem(MN_HL,"",0,0);
+ leveleditor_menu->additem(MN_ACTION,"Quit Level Editor",0,0);
menu_reset();
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
show_menu = true;
- menu_init(&subset_load_menu);
- menu_additem(&subset_load_menu,MN_LABEL,"Load Level Subset",0,0);
- menu_additem(&subset_load_menu,MN_HL,"",0,0);
+ subset_load_menu->additem(MN_LABEL, "Load Level Subset", 0, 0);
+ subset_load_menu->additem(MN_HL, "", 0, 0);
+
for(i = 0; i < level_subsets.num_items; ++i)
{
- menu_additem(&subset_load_menu,MN_ACTION,level_subsets.item[i],0,0);
+ subset_load_menu->additem(MN_ACTION,level_subsets.item[i],0,0);
}
- menu_additem(&subset_load_menu,MN_HL,"",0,0);
- menu_additem(&subset_load_menu,MN_BACK,"Back",0,0);
-
- menu_init(&subset_new_menu);
- menu_additem(&subset_new_menu,MN_LABEL,"New Level Subset",0,0);
- menu_additem(&subset_new_menu,MN_HL,"",0,0);
- menu_additem(&subset_new_menu,MN_TEXTFIELD,"Enter Name",0,0);
- menu_additem(&subset_new_menu,MN_ACTION,"Create",0,0);
- menu_additem(&subset_new_menu,MN_HL,"",0,0);
- menu_additem(&subset_new_menu,MN_BACK,"Back",0,0);
-
- menu_init(&subset_settings_menu);
- menu_additem(&subset_settings_menu,MN_LABEL,"Level Subset Settings",0,0);
- menu_additem(&subset_settings_menu,MN_HL,"",0,0);
- menu_additem(&subset_settings_menu,MN_TEXTFIELD,"Title",0,0);
- menu_additem(&subset_settings_menu,MN_TEXTFIELD,"Description",0,0);
- menu_additem(&subset_settings_menu,MN_HL,"",0,0);
- menu_additem(&subset_settings_menu,MN_ACTION,"Save Changes",0,0);
- menu_additem(&subset_settings_menu,MN_HL,"",0,0);
- menu_additem(&subset_settings_menu,MN_BACK,"Back",0,0);
-
- menu_init(&level_settings_menu);
- level_settings_menu.arrange_left = true;
- menu_additem(&level_settings_menu,MN_LABEL,"Level Settings",0,0);
- menu_additem(&level_settings_menu,MN_HL,"",0,0);
- menu_additem(&level_settings_menu,MN_TEXTFIELD,"Name ",0,0);
- menu_additem(&level_settings_menu,MN_STRINGSELECT,"Theme ",0,0);
- menu_additem(&level_settings_menu,MN_STRINGSELECT,"Song ",0,0);
- menu_additem(&level_settings_menu,MN_STRINGSELECT,"Bg-Image",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Length ",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Time ",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Gravity",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Red ",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Green ",0,0);
- menu_additem(&level_settings_menu,MN_NUMFIELD,"Blue ",0,0);
- menu_additem(&level_settings_menu,MN_HL,"",0,0);
- menu_additem(&level_settings_menu,MN_ACTION,"Apply Changes",0,0);
+ subset_load_menu->additem(MN_HL,"",0,0);
+ subset_load_menu->additem(MN_BACK,"Back",0,0);
+
+ subset_new_menu->additem(MN_LABEL,"New Level Subset",0,0);
+ subset_new_menu->additem(MN_HL,"",0,0);
+ subset_new_menu->additem(MN_TEXTFIELD,"Enter Name",0,0);
+ subset_new_menu->additem(MN_ACTION,"Create",0,0);
+ subset_new_menu->additem(MN_HL,"",0,0);
+ subset_new_menu->additem(MN_BACK,"Back",0,0);
+
+ subset_settings_menu->additem(MN_LABEL,"Level Subset Settings",0,0);
+ subset_settings_menu->additem(MN_HL,"",0,0);
+ subset_settings_menu->additem(MN_TEXTFIELD,"Title",0,0);
+ subset_settings_menu->additem(MN_TEXTFIELD,"Description",0,0);
+ subset_settings_menu->additem(MN_HL,"",0,0);
+ subset_settings_menu->additem(MN_ACTION,"Save Changes",0,0);
+ subset_settings_menu->additem(MN_HL,"",0,0);
+ subset_settings_menu->additem(MN_BACK,"Back",0,0);
+
+ level_settings_menu->arrange_left = true;
+ level_settings_menu->additem(MN_LABEL,"Level Settings",0,0);
+ level_settings_menu->additem(MN_HL,"",0,0);
+ level_settings_menu->additem(MN_TEXTFIELD,"Name ",0,0);
+ level_settings_menu->additem(MN_STRINGSELECT,"Theme ",0,0);
+ level_settings_menu->additem(MN_STRINGSELECT,"Song ",0,0);
+ level_settings_menu->additem(MN_STRINGSELECT,"Bg-Image",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Length ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Time ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Gravity",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Red ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Green ",0,0);
+ level_settings_menu->additem(MN_NUMFIELD,"Blue ",0,0);
+ level_settings_menu->additem(MN_HL,"",0,0);
+ level_settings_menu->additem(MN_ACTION,"Apply Changes",0,0);
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
char str[80];
int i;
- menu_item_change_input(&level_settings_menu.item[2], le_current_level->name.c_str());
+ menu_item_change_input(&level_settings_menu->item[2], le_current_level->name.c_str());
sprintf(str,"%d",le_current_level->width);
- string_list_copy(level_settings_menu.item[3].list, dsubdirs("images/themes", "solid0.png"));
- string_list_copy(level_settings_menu.item[4].list, dfiles("music/",NULL, "-fast"));
- string_list_copy(level_settings_menu.item[5].list, dfiles("images/background",NULL, NULL));
- string_list_add_item(level_settings_menu.item[5].list,"");
- if((i = string_list_find(level_settings_menu.item[3].list,le_current_level->theme.c_str())) != -1)
- level_settings_menu.item[3].list->active_item = i;
- if((i = string_list_find(level_settings_menu.item[4].list,le_current_level->song_title.c_str())) != -1)
- level_settings_menu.item[4].list->active_item = i;
- if((i = string_list_find(level_settings_menu.item[5].list,le_current_level->bkgd_image.c_str())) != -1)
- level_settings_menu.item[5].list->active_item = i;
-
- menu_item_change_input(&level_settings_menu.item[6], str);
+ string_list_copy(level_settings_menu->item[3].list, dsubdirs("images/themes", "solid0.png"));
+ string_list_copy(level_settings_menu->item[4].list, dfiles("music/",NULL, "-fast"));
+ string_list_copy(level_settings_menu->item[5].list, dfiles("images/background",NULL, NULL));
+ string_list_add_item(level_settings_menu->item[5].list,"");
+ if((i = string_list_find(level_settings_menu->item[3].list,le_current_level->theme.c_str())) != -1)
+ level_settings_menu->item[3].list->active_item = i;
+ if((i = string_list_find(level_settings_menu->item[4].list,le_current_level->song_title.c_str())) != -1)
+ level_settings_menu->item[4].list->active_item = i;
+ if((i = string_list_find(level_settings_menu->item[5].list,le_current_level->bkgd_image.c_str())) != -1)
+ level_settings_menu->item[5].list->active_item = i;
+
+ menu_item_change_input(&level_settings_menu->item[6], str);
sprintf(str,"%d",le_current_level->time_left);
- menu_item_change_input(&level_settings_menu.item[7], str);
+ menu_item_change_input(&level_settings_menu->item[7], str);
sprintf(str,"%2.0f",le_current_level->gravity);
- menu_item_change_input(&level_settings_menu.item[8], str);
+ menu_item_change_input(&level_settings_menu->item[8], str);
sprintf(str,"%d",le_current_level->bkgd_red);
- menu_item_change_input(&level_settings_menu.item[9], str);
+ menu_item_change_input(&level_settings_menu->item[9], str);
sprintf(str,"%d",le_current_level->bkgd_green);
- menu_item_change_input(&level_settings_menu.item[10], str);
+ menu_item_change_input(&level_settings_menu->item[10], str);
sprintf(str,"%d",le_current_level->bkgd_blue);
- menu_item_change_input(&level_settings_menu.item[11], str);
+ menu_item_change_input(&level_settings_menu->item[11], str);
}
void update_subset_settings_menu()
{
- menu_item_change_input(&subset_settings_menu.item[2], le_level_subset.title.c_str());
- menu_item_change_input(&subset_settings_menu.item[3], le_level_subset.description.c_str());
+ menu_item_change_input(&subset_settings_menu->item[2], le_level_subset.title.c_str());
+ menu_item_change_input(&subset_settings_menu->item[3], le_level_subset.description.c_str());
}
void apply_level_settings_menu()
int i,y,j;
i = false;
- le_current_level->name = level_settings_menu.item[2].input;
+ le_current_level->name = level_settings_menu->item[2].input;
- if(le_current_level->bkgd_image.compare(string_list_active(level_settings_menu.item[5].list)) != 0)
+ if(le_current_level->bkgd_image.compare(string_list_active(level_settings_menu->item[5].list)) != 0)
{
- le_current_level->bkgd_image = string_list_active(level_settings_menu.item[5].list);
+ le_current_level->bkgd_image = string_list_active(level_settings_menu->item[5].list);
i = true;
}
- if(le_current_level->theme.compare(string_list_active(level_settings_menu.item[3].list)) != 0)
+ if(le_current_level->theme.compare(string_list_active(level_settings_menu->item[3].list)) != 0)
{
- le_current_level->theme = string_list_active(level_settings_menu.item[3].list);
+ le_current_level->theme = string_list_active(level_settings_menu->item[3].list);
le_update_buttons(le_current_level->theme.c_str());
i = true;
}
level_load_gfx(le_current_level);
}
- le_current_level->song_title = string_list_active(level_settings_menu.item[4].list);
+ le_current_level->song_title = string_list_active(level_settings_menu->item[4].list);
i = le_current_level->width;
- le_current_level->width = atoi(level_settings_menu.item[6].input);
+ le_current_level->width = atoi(level_settings_menu->item[6].input);
if(le_current_level->width < i)
{
if(le_current_level->width < 21)
le_current_level->tiles[y][le_current_level->width] = (unsigned int) '\0';
}
}
- le_current_level->time_left = atoi(level_settings_menu.item[7].input);
- le_current_level->gravity = atof(level_settings_menu.item[8].input);
- le_current_level->bkgd_red = atoi(level_settings_menu.item[9].input);
- le_current_level->bkgd_green = atoi(level_settings_menu.item[10].input);
- le_current_level->bkgd_blue = atoi(level_settings_menu.item[11].input);
+ le_current_level->time_left = atoi(level_settings_menu->item[7].input);
+ le_current_level->gravity = atof(level_settings_menu->item[8].input);
+ le_current_level->bkgd_red = atoi(level_settings_menu->item[9].input);
+ le_current_level->bkgd_green = atoi(level_settings_menu->item[10].input);
+ le_current_level->bkgd_blue = atoi(level_settings_menu->item[11].input);
}
void save_subset_settings_menu()
{
- le_level_subset.title = subset_settings_menu.item[2].input;
- le_level_subset.description = subset_settings_menu.item[3].input;
+ le_level_subset.title = subset_settings_menu->item[2].input;
+ le_level_subset.description = subset_settings_menu->item[3].input;
le_level_subset.save();
}
SDL_EnableKeyRepeat(0, 0); // disables key repeating
texture_free(&le_selection);
- menu_free(&leveleditor_menu);
- menu_free(&subset_load_menu);
- menu_free(&subset_new_menu);
- menu_free(&subset_settings_menu);
- menu_free(&level_settings_menu);
+ delete leveleditor_menu;
+ delete subset_load_menu;
+ delete subset_new_menu;
+ delete subset_settings_menu;
+ delete level_settings_menu;
button_panel_free(&le_bkgd_panel);
button_panel_free(&le_fgd_panel);
button_panel_free(&le_bad_panel);
for (y = 0; y < 15; ++y)
for (x = 0; x < 20; ++x)
{
- drawshape(x * 32 - ((int)pos_x % 32), y * 32, le_current_level->tiles[y][x + (int)(pos_x / 32)]);
+ drawshape(x * 32 - ((int)pos_x % 32), y * 32,
+ le_current_level->tiles[y][x + (int)(pos_x / 32)]);
/* draw whats inside stuff when cursor is selecting those */
/* (draw them all the time - is this the right behaviour?) */
if(key == SDLK_ESCAPE)
{
show_menu = false;
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
}
break;
}
if(show_menu == false)
{
update_level_settings_menu();
- menu_set_current(&level_settings_menu);
+ Menu::set_current(level_settings_menu);
show_menu = true;
}
else
{
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
show_menu = false;
}
}
if(show_menu == false)
{
update_level_settings_menu();
- menu_set_current(&level_settings_menu);
+ Menu::set_current(level_settings_menu);
show_menu = true;
}
else
{
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
show_menu = false;
}
}
{
level_save(le_current_level,"test",le_level);
gameloop("test",le_level, ST_GL_TEST);
- menu_set_current(&leveleditor_menu);
+ Menu::set_current(leveleditor_menu);
arrays_init();
level_load_gfx(le_current_level);
loadshared();
bool menu_change;
texture_type checkbox, checkbox_checked, back, arrow_left, arrow_right;
-menu_type main_menu, game_menu, options_menu, highscore_menu, load_game_menu, save_game_menu;
-menu_type* current_menu, * last_menu;
+Menu* main_menu = 0;
+Menu* game_menu = 0;
+Menu* options_menu = 0;
+Menu* highscore_menu = 0;
+Menu* load_game_menu = 0;
+Menu* save_game_menu = 0;
+
+Menu* current_menu = 0;
+Menu* last_menu = 0;
/* input implementation variables */
int delete_character;
char mn_input_char;
/* Set the current menu */
-void menu_set_current(menu_type* pmenu)
+void
+Menu::set_current(Menu* pmenu)
{
if(pmenu != current_menu)
{
- menu_change = true;
- last_menu = current_menu;
+ menu_change = true;
+ last_menu = current_menu;
current_menu = pmenu;
timer_start(&pmenu->effect, 500);
}
}
/* Return a pointer to a new menu item */
-menu_item_type* menu_item_create(MenuItemKind kind, char *text, int init_toggle, void* target_menu)
+menu_item_type* menu_item_create(MenuItemKind kind, char *text, int init_toggle, Menu* target_menu)
{
menu_item_type *pnew_item = (menu_item_type*) malloc(sizeof(menu_item_type));
pnew_item->kind = kind;
}
/* Free a menu and all its items */
-void menu_free(menu_type* pmenu)
+Menu::~Menu()
{
- int i;
- if(pmenu->num_items != 0 && pmenu->item != NULL)
+ if(num_items != 0 && item != NULL)
{
- for(i = 0; i < pmenu->num_items; ++i)
+ for(int i = 0; i < num_items; ++i)
{
- free(pmenu->item[i].text);
- free(pmenu->item[i].input);
- string_list_free(pmenu->item[i].list);
+ free(item[i].text);
+ free(item[i].input);
+ string_list_free(item[i].list);
}
- free(pmenu->item);
+ free(item);
}
}
-/* Initialize a menu */
-void menu_init(menu_type* pmenu)
+Menu::Menu()
+{
+ pos_x = screen->w/2;
+ pos_y = screen->h/2;
+ arrange_left = 0;
+ num_items = 0;
+ active_item = 0;
+ item = NULL;
+ timer_init(&effect,false);
+}
+
+menu_item_type*
+Menu::additem(MenuItemKind kind, char *text, int toggle, Menu* menu)
{
- pmenu->x = screen->w/2;
- pmenu->y = screen->h/2;
- pmenu->arrange_left = 0;
- pmenu->num_items = 0;
- pmenu->active_item = 0;
- pmenu->item = NULL;
- timer_init(&pmenu->effect,false);
+ additem(menu_item_create(kind, text, toggle, menu));
}
/* Add an item to a menu */
-void menu_additem(menu_type* pmenu, menu_item_type* pmenu_item)
+void
+Menu::additem(menu_item_type* pmenu_item)
{
- ++pmenu->num_items;
- pmenu->item = (menu_item_type*)realloc(pmenu->item, sizeof(menu_item_type) * pmenu->num_items);
- memcpy(&pmenu->item[pmenu->num_items-1],pmenu_item,sizeof(menu_item_type));
+ ++num_items;
+ item = (menu_item_type*)realloc(item, sizeof(menu_item_type) * num_items);
+ memcpy(&item[num_items-1],pmenu_item,sizeof(menu_item_type));
free(pmenu_item);
}
/* Process actions done on the menu */
-void menu_action(menu_type* pmenu)
+void
+Menu::action()
{
- menu_item_type& item = pmenu->item[pmenu->active_item];
-
- if(pmenu->num_items != 0 && pmenu->item != NULL)
+ if(num_items != 0 && item != NULL)
{
switch(menuaction)
{
case MENU_ACTION_UP:
- if(pmenu->active_item > 0)
- --pmenu->active_item;
+ if (active_item > 0)
+ --active_item;
else
- pmenu->active_item = pmenu->num_items-1;
+ active_item = num_items-1;
break;
case MENU_ACTION_DOWN:
- if(pmenu->active_item < pmenu->num_items-1)
- ++pmenu->active_item;
+ if(active_item < num_items-1)
+ ++active_item;
else
- pmenu->active_item = 0;
+ active_item = 0;
break;
case MENU_ACTION_LEFT:
- if(item.kind == MN_STRINGSELECT
- && item.list->num_items != 0)
+ if(item[active_item].kind == MN_STRINGSELECT
+ && item[active_item].list->num_items != 0)
{
- if(item.list->active_item > 0)
- --item.list->active_item;
+ if(item[active_item].list->active_item > 0)
+ --item[active_item].list->active_item;
else
- item.list->active_item = item.list->num_items-1;
+ item[active_item].list->active_item = item[active_item].list->num_items-1;
}
break;
case MENU_ACTION_RIGHT:
- if(item.kind == MN_STRINGSELECT
- && item.list->num_items != 0)
+ if(item[active_item].kind == MN_STRINGSELECT
+ && item[active_item].list->num_items != 0)
{
- if(item.list->active_item < item.list->num_items-1)
- ++item.list->active_item;
+ if(item[active_item].list->active_item < item[active_item].list->num_items-1)
+ ++item[active_item].list->active_item;
else
- item.list->active_item = 0;
+ item[active_item].list->active_item = 0;
}
break;
case MENU_ACTION_HIT:
- if(item.kind == MN_GOTO
- && item.target_menu != NULL)
- menu_set_current((menu_type*)item.target_menu);
-
- else if(item.kind == MN_TOGGLE)
- {
- item.toggled = !item.toggled;
- menu_change = true;
- }
- else if(item.kind == MN_ACTION || item.kind == MN_TEXTFIELD || item.kind == MN_NUMFIELD)
- {
- item.toggled = true;
- }
- else if(item.kind == MN_BACK)
- {
- if(last_menu != NULL)
- menu_set_current(last_menu);
- }
+ {
+ switch (item[active_item].kind)
+ {
+ case MN_GOTO:
+ if (item[active_item].target_menu != NULL)
+ Menu::set_current(item[active_item].target_menu);
+ else
+ puts("NULLL");
+ break;
+
+ case MN_TOGGLE:
+ item[active_item].toggled = !item[active_item].toggled;
+ menu_change = true;
+ break;
+
+ case MN_ACTION:
+ case MN_TEXTFIELD:
+ case MN_NUMFIELD:
+ item[active_item].toggled = true;
+ break;
+
+ case MN_BACK:
+ if(last_menu != NULL)
+ Menu::set_current(last_menu);
+ break;
+ default:
+ break;
+ }
+ }
break;
case MENU_ACTION_REMOVE:
- if(item.kind == MN_TEXTFIELD
- || item.kind == MN_NUMFIELD)
+ if(item[active_item].kind == MN_TEXTFIELD
+ || item[active_item].kind == MN_NUMFIELD)
{
- if(item.input != NULL)
+ if(item[active_item].input != NULL)
{
- int i = strlen(item.input);
+ int i = strlen(item[active_item].input);
while(delete_character > 0) /* remove charactes */
{
- item.input[i-1] = '\0';
+ item[active_item].input[i-1] = '\0';
delete_character--;
}
}
break;
case MENU_ACTION_INPUT:
- if(item.kind == MN_TEXTFIELD
- || (item.kind == MN_NUMFIELD && mn_input_char >= '0' && mn_input_char <= '9'))
+ if(item[active_item].kind == MN_TEXTFIELD
+ || (item[active_item].kind == MN_NUMFIELD && mn_input_char >= '0' && mn_input_char <= '9'))
{
- if(item.input != NULL)
+ if(item[active_item].input != NULL)
{
- int i = strlen(item.input);
- item.input = (char*) realloc(item.input,sizeof(char)*(i + 2));
- item.input[i] = mn_input_char;
- item.input[i+1] = '\0';
+ int i = strlen(item[active_item].input);
+ item[active_item].input = (char*) realloc(item[active_item].input,sizeof(char)*(i + 2));
+ item[active_item].input[i] = mn_input_char;
+ item[active_item].input[i+1] = '\0';
}
else
{
- item.input = (char*) malloc(2*sizeof(char));
- item.input[0] = mn_input_char;
- item.input[1] = '\0';
+ item[active_item].input = (char*) malloc(2*sizeof(char));
+ item[active_item].input[0] = mn_input_char;
+ item[active_item].input[1] = '\0';
}
}
break;
}
}
- menu_item_type& new_item = pmenu->item[pmenu->active_item];
+ menu_item_type& new_item = item[active_item];
if(new_item.kind == MN_DEACTIVE
|| new_item.kind == MN_LABEL
|| new_item.kind == MN_HL)
if(menuaction != MENU_ACTION_UP && menuaction != MENU_ACTION_DOWN)
menuaction = MENU_ACTION_DOWN;
- if(pmenu->num_items > 1)
- menu_action(pmenu);
+ if(num_items > 1)
+ action();
}
}
/* Check, if the value of the active menu item has changed. */
-int menu_check(menu_type* pmenu)
+int
+Menu::check()
{
- menu_item_type& item = pmenu->item[pmenu->active_item];
-
- if(pmenu->num_items != 0 && pmenu->item != NULL)
+ if(num_items != 0 && item != NULL)
{
- if((item.kind == MN_ACTION || item.kind == MN_TEXTFIELD || item.kind == MN_NUMFIELD) && item.toggled == true)
+ if((item[active_item].kind == MN_ACTION || item[active_item].kind == MN_TEXTFIELD || item[active_item].kind == MN_NUMFIELD) && item[active_item].toggled == true)
{
- item.toggled = false;
+ item[active_item].toggled = false;
show_menu = 0;
- return pmenu->active_item;
+ return active_item;
}
- else if(item.kind == MN_TOGGLE || item.kind == MN_GOTO)
+ else if(item[active_item].kind == MN_TOGGLE || item[active_item].kind == MN_GOTO)
{
- return pmenu->active_item;
+ return active_item;
}
else
return -1;
return -1;
}
-void menu_draw_item(menu_type* pmenu,
- int index, // Position of the current item in the menu
- int menu_width,
- int menu_height)
+void
+Menu::draw_item(int index, // Position of the current item in the menu
+ int menu_width,
+ int menu_height)
{
int font_width = 16;
- const menu_item_type& pitem = pmenu->item[index];
+ const menu_item_type& pitem = item[index];
int effect_offset = 0;
{
int effect_time = 0;
- if(timer_check(&pmenu->effect))
- effect_time = timer_get_left(&pmenu->effect) / 4;
+ if(timer_check(&effect))
+ effect_time = timer_get_left(&effect) / 4;
effect_offset = (index % 2) ? effect_time : -effect_time;
}
- int x_pos = pmenu->x;
- int y_pos = pmenu->y + 24*index - menu_height/2 + 12 + effect_offset;
+ int x_pos = pos_x;
+ int y_pos = pos_y + 24*index - menu_height/2 + 12 + effect_offset;
int shadow_size = 2;
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;
- if(pmenu->arrange_left == true)
+ if(arrange_left == true)
x_pos += 24 - menu_width/2 + (text_width + input_width + list_width)/2;
- if(index == pmenu->active_item)
+ if(index == active_item)
{
shadow_size = 3;
text_font = &blue_text;
case MN_HL:
{
- int x = pmenu->x - menu_width/2;
+ int x = pos_x - menu_width/2;
int y = y_pos - 12 - effect_offset;
/* Draw a horizontal line with a little 3d effect */
fillrect(x, y + 6,
}
/* Draw the current menu. */
-void menu_draw(menu_type* pmenu)
+void
+Menu::draw()
{
int menu_height;
int menu_width;
/* The width of the menu has to be more than the width of the text
with the most characters */
menu_width = 0;
- for(int i = 0; i < pmenu->num_items; ++i)
+ for(int i = 0; i < num_items; ++i)
{
- int w = strlen(pmenu->item[i].text) + (pmenu->item[i].input ? strlen(pmenu->item[i].input) + 1 : 0) + strlen(string_list_active(pmenu->item[i].list));
+ int w = strlen(item[i].text) + (item[i].input ? strlen(item[i].input) + 1 : 0) + strlen(string_list_active(item[i].list));
if( w > menu_width )
{
menu_width = w;
- if( pmenu->item[i].kind == MN_TOGGLE)
+ if( item[i].kind == MN_TOGGLE)
menu_width += 2;
}
}
menu_width = menu_width * 16 + 48;
- menu_height = (pmenu->num_items) * 24;
+ menu_height = (num_items) * 24;
/* Draw a transparent background */
- fillrect(pmenu->x - menu_width/2,
- pmenu->y - 24*pmenu->num_items/2,
+ fillrect(pos_x - menu_width/2,
+ pos_y - 24*num_items/2,
menu_width,menu_height,150,150,150,100);
- for(int i = 0; i < pmenu->num_items; ++i)
+ for(int i = 0; i < num_items; ++i)
{
- menu_draw_item(pmenu, i, menu_width, menu_height);
+ draw_item(i, menu_width, menu_height);
}
}
if(current_menu != NULL)
{
- menu_action(current_menu);
- menu_draw(current_menu);
+ current_menu->action();
+ current_menu->draw();
}
menuaction = MENU_ACTION_NONE;
break;
case SDLK_SPACE:
if(current_menu->item[current_menu->active_item].kind == MN_TEXTFIELD)
- {
- menuaction = MENU_ACTION_INPUT;
- menu_change = true;
- mn_input_char = ' ';
- break;
- }
+ {
+ menuaction = MENU_ACTION_INPUT;
+ menu_change = true;
+ mn_input_char = ' ';
+ break;
+ }
case SDLK_RETURN: /* Menu Hit */
menuaction = MENU_ACTION_HIT;
menu_change = true;
/* FIXME: NO JOYSTICK SUPPORT */
/*#ifdef JOY_YES
- else if (event.type == SDL_JOYBUTTONDOWN)
- {
- Joystick button: Continue:
+ else if (event.type == SDL_JOYBUTTONDOWN)
+ {
+ Joystick button: Continue:
- done = 1;
- }
- #endif*/
+ done = 1;
+ }
+ #endif*/
}
-menu_item_type*
-menu_additem(menu_type* pmenu, MenuItemKind kind, char *text, int init_toggle, void* target_menu)
-{
- menu_item_type* item = menu_item_create(kind, text, init_toggle, target_menu);
- menu_additem(pmenu, item);
- return item;
-}
// EOF //
MN_HL /* horizontal line */
};
+class Menu;
+
struct menu_item_type
{
MenuItemKind kind;
char *text;
char *input;
string_list_type* list;
- void* target_menu;
+ Menu* target_menu;
};
-menu_item_type* menu_item_create(MenuItemKind kind, char *text, int init_toggle, void* target_menu);
+menu_item_type* menu_item_create(MenuItemKind kind, char *text, int init_toggle, Menu* target_menu);
void menu_item_change_text (menu_item_type* pmenu_item, const char *text);
void menu_item_change_input(menu_item_type* pmenu_item, const char *text);
-struct menu_type
+class Menu
{
- // center of the menu on the screen
- int x;
- int y;
-
+private:
+ // position of the menu (ie. center of the menu, not top/left)
+ int pos_x;
+ int pos_y;
+
int num_items;
- int active_item;
+
+public:
+ timer_type effect;
int arrange_left;
+ int active_item;
menu_item_type *item;
- timer_type effect;
+
+ static void set_current(Menu* pmenu);
+
+ Menu();
+ ~Menu();
+
+ void additem(menu_item_type* pmenu_item);
+ void additem(MenuItemKind kind, char *text, int init_toggle, Menu* target_menu);
+ void action ();
+ int check ();
+ void draw ();
+ void draw_item(int index, int menu_width, int menu_height);
};
-void menu_init (menu_type* pmenu);
-void menu_free (menu_type* pmenu);
-void menu_additem(menu_type* pmenu, menu_item_type* pmenu_item);
-menu_item_type* menu_additem(menu_type* pmenu, MenuItemKind kind, char *text, int init_toggle, void* target_menu);
-void menu_action (menu_type* pmenu);
-int menu_check (menu_type* pmenu);
-void menu_draw (menu_type* pmenu);
-void menu_set_current(menu_type* pmenu);
/* Action done on the menu */
enum MenuAction {
extern bool menu_change;
extern texture_type checkbox, checkbox_checked, back, arrow_left, arrow_right;
-extern menu_type main_menu, game_menu, options_menu, highscore_menu, load_game_menu, save_game_menu;
-extern menu_type* current_menu, * last_menu;
+extern Menu* main_menu;
+extern Menu* game_menu;
+extern Menu* options_menu;
+extern Menu* highscore_menu;
+extern Menu* load_game_menu;
+extern Menu* save_game_menu;
+extern Menu* current_menu;
+extern Menu* last_menu;
/* input implementation variables */
extern int delete_character;
#endif /*SUPERTUX_MENU_H*/
+/* Local Variables: */
+/* mode:c++ */
+/* End */
/* Create and setup menus. */
void st_menu(void)
{
- menu_init(&main_menu);
- menu_additem(&main_menu, MN_LABEL,"Main Menu",0,0);
- menu_additem(&main_menu, MN_HL,"",0,0);
- menu_additem(&main_menu, MN_ACTION,"Start Game",0,0);
- menu_additem(&main_menu, MN_GOTO,"Load Game",0,&load_game_menu);
- menu_additem(&main_menu, MN_GOTO,"Options",0,&options_menu);
- menu_additem(&main_menu, MN_ACTION,"Level editor",0,0);
- menu_additem(&main_menu, MN_ACTION,"Credits",0,0);
- menu_additem(&main_menu, MN_HL,"",0,0);
- menu_additem(&main_menu, MN_ACTION,"Quit",0,0);
-
- menu_init(&options_menu);
- menu_additem(&options_menu, MN_LABEL,"Options",0,0);
- menu_additem(&options_menu, MN_HL,"",0,0);
- menu_additem(&options_menu, MN_TOGGLE,"Fullscreen",use_fullscreen,0);
+ main_menu = new Menu();
+ options_menu = new Menu();
+ load_game_menu = new Menu();
+ save_game_menu = new Menu();
+ game_menu = new Menu();
+ highscore_menu = new Menu();
+
+ main_menu->additem(MN_LABEL,"Main Menu",0,0);
+ main_menu->additem(MN_HL,"",0,0);
+ main_menu->additem(MN_ACTION,"Start Game",0,0);
+ main_menu->additem(MN_GOTO,"Load Game",0,load_game_menu);
+ main_menu->additem(MN_GOTO,"Options",0,options_menu);
+ main_menu->additem(MN_ACTION,"Level editor",0,0);
+ main_menu->additem(MN_ACTION,"Credits",0,0);
+ main_menu->additem(MN_HL,"",0,0);
+ main_menu->additem(MN_ACTION,"Quit",0,0);
+
+ options_menu->additem(MN_LABEL,"Options",0,0);
+ options_menu->additem(MN_HL,"",0,0);
+ options_menu->additem(MN_TOGGLE,"Fullscreen",use_fullscreen,0);
if(audio_device)
{
- menu_additem(&options_menu, MN_TOGGLE,"Sound ",use_sound,0);
- menu_additem(&options_menu, MN_TOGGLE,"Music ",use_music,0);
+ options_menu->additem(MN_TOGGLE,"Sound ",use_sound,0);
+ options_menu->additem(MN_TOGGLE,"Music ",use_music,0);
}
else
{
- menu_additem(&options_menu, MN_DEACTIVE,"Sound ",use_sound,0);
- menu_additem(&options_menu, MN_DEACTIVE,"Music ",use_music,0);
+ options_menu->additem(MN_DEACTIVE,"Sound ",use_sound,0);
+ options_menu->additem(MN_DEACTIVE,"Music ",use_music,0);
}
- menu_additem(&options_menu, MN_TOGGLE,"Show FPS ",show_fps,0);
- menu_additem(&options_menu, MN_HL,"",0,0);
- menu_additem(&options_menu, MN_BACK,"Back",0,0);
-
- menu_init(&load_game_menu);
- menu_additem(&load_game_menu, MN_LABEL,"Load Game",0,0);
- menu_additem(&load_game_menu, MN_HL,"",0,0);
- menu_additem(&load_game_menu, MN_DEACTIVE,"Slot 1",0,0);
- menu_additem(&load_game_menu, MN_DEACTIVE,"Slot 2",0,0);
- menu_additem(&load_game_menu, MN_DEACTIVE,"Slot 3",0,0);
- menu_additem(&load_game_menu, MN_DEACTIVE,"Slot 4",0,0);
- menu_additem(&load_game_menu, MN_DEACTIVE,"Slot 5",0,0);
- menu_additem(&load_game_menu, MN_HL,"",0,0);
- menu_additem(&load_game_menu, MN_BACK,"Back",0,0);
-
- menu_init(&save_game_menu);
- menu_additem(&save_game_menu, MN_LABEL,"Save Game",0,0);
- menu_additem(&save_game_menu, MN_HL,"",0,0);
- menu_additem(&save_game_menu, MN_DEACTIVE,"Slot 1",0,0);
- menu_additem(&save_game_menu, MN_DEACTIVE,"Slot 2",0,0);
- menu_additem(&save_game_menu, MN_DEACTIVE,"Slot 3",0,0);
- menu_additem(&save_game_menu, MN_DEACTIVE,"Slot 4",0,0);
- menu_additem(&save_game_menu, MN_DEACTIVE,"Slot 5",0,0);
- menu_additem(&save_game_menu, MN_HL,"",0,0);
- menu_additem(&save_game_menu, MN_BACK,"Back",0,0);
-
- menu_init(&game_menu);
- menu_additem(&game_menu, MN_LABEL,"InGame Menu",0,0);
- menu_additem(&game_menu, MN_HL,"",0,0);
- menu_additem(&game_menu, MN_ACTION,"Return To Game",0,0);
- menu_additem(&game_menu, MN_GOTO,"Save Game",0,&save_game_menu);
- menu_additem(&game_menu, MN_GOTO,"Load Game",0,&load_game_menu);
- menu_additem(&game_menu, MN_GOTO,"Options",0,&options_menu);
- menu_additem(&game_menu, MN_HL,"",0,0);
- menu_additem(&game_menu, MN_ACTION,"Quit Game",0,0);
-
- menu_init(&highscore_menu);
- menu_additem(&highscore_menu, MN_TEXTFIELD,"Enter your name:",0,0);
-
+ options_menu->additem(MN_TOGGLE,"Show FPS ",show_fps,0);
+ options_menu->additem(MN_HL,"",0,0);
+ options_menu->additem(MN_BACK,"Back",0,0);
+
+ load_game_menu->additem(MN_LABEL,"Load Game",0,0);
+ load_game_menu->additem(MN_HL,"",0,0);
+ load_game_menu->additem(MN_DEACTIVE,"Slot 1",0,0);
+ load_game_menu->additem(MN_DEACTIVE,"Slot 2",0,0);
+ load_game_menu->additem(MN_DEACTIVE,"Slot 3",0,0);
+ load_game_menu->additem(MN_DEACTIVE,"Slot 4",0,0);
+ load_game_menu->additem(MN_DEACTIVE,"Slot 5",0,0);
+ load_game_menu->additem(MN_HL,"",0,0);
+ load_game_menu->additem(MN_BACK,"Back",0,0);
+
+ save_game_menu->additem(MN_LABEL,"Save Game",0,0);
+ save_game_menu->additem(MN_HL,"",0,0);
+ save_game_menu->additem(MN_DEACTIVE,"Slot 1",0,0);
+ save_game_menu->additem(MN_DEACTIVE,"Slot 2",0,0);
+ save_game_menu->additem(MN_DEACTIVE,"Slot 3",0,0);
+ save_game_menu->additem(MN_DEACTIVE,"Slot 4",0,0);
+ save_game_menu->additem(MN_DEACTIVE,"Slot 5",0,0);
+ save_game_menu->additem(MN_HL,"",0,0);
+ save_game_menu->additem(MN_BACK,"Back",0,0);
+
+ game_menu->additem(MN_LABEL,"InGame Menu",0,0);
+ game_menu->additem(MN_HL,"",0,0);
+ game_menu->additem(MN_ACTION,"Return To Game",0,0);
+ game_menu->additem(MN_GOTO,"Save Game",0,save_game_menu);
+ game_menu->additem(MN_GOTO,"Load Game",0,load_game_menu);
+ game_menu->additem(MN_GOTO,"Options",0,options_menu);
+ game_menu->additem(MN_HL,"",0,0);
+ game_menu->additem(MN_ACTION,"Quit Game",0,0);
+
+ highscore_menu->additem(MN_TEXTFIELD,"Enter your name:",0,0);
}
-void update_load_save_game_menu(menu_type* pmenu, int load)
+void update_load_save_game_menu(Menu* pmenu, int load)
{
- int i;
-
- for(i = 2; i < 7; ++i)
+ for(int i = 2; i < 7; ++i)
{
char *tmp;
slotinfo(&tmp,i-1);
void process_save_load_game_menu(int save)
{
int slot;
- switch (slot = menu_check(save ? &save_game_menu : &load_game_menu))
+ switch (slot = (save ? save_game_menu->check() : load_game_menu->check()))
{
default:
if(slot != -1)
{
gameloop("default",slot - 1,ST_GL_LOAD_GAME);
show_menu = true;
- menu_set_current(&main_menu);
+ Menu::set_current(main_menu);
}
else
loadgame(slot - 1);
/* Handle changes made to global settings in the options menu. */
void process_options_menu(void)
{
- switch (menu_check(&options_menu))
+ switch (options_menu->check())
{
case 2:
- if(use_fullscreen != options_menu.item[2].toggled)
+ if(use_fullscreen != options_menu->item[2].toggled)
{
use_fullscreen = !use_fullscreen;
st_video_setup();
}
break;
case 3:
- if(use_sound != options_menu.item[3].toggled)
+ if(use_sound != options_menu->item[3].toggled)
use_sound = !use_sound;
break;
case 4:
- if(use_music != options_menu.item[4].toggled)
+ if(use_music != options_menu->item[4].toggled)
{
if(use_music == true)
{
}
break;
case 5:
- if(show_fps != options_menu.item[5].toggled)
+ if(show_fps != options_menu->item[5].toggled)
show_fps = !show_fps;
break;
}
texture_free(&arrow_right);
/* Free menus */
-
- menu_free(&main_menu);
- menu_free(&game_menu);
- menu_free(&options_menu);
- menu_free(&highscore_menu);
- menu_free(&save_game_menu);
- menu_free(&load_game_menu);
-
+ delete main_menu;
+ delete game_menu;
+ delete options_menu;
+ delete highscore_menu;
+ delete save_game_menu;
+ delete load_game_menu;
}
void st_video_setup(void)
void st_abort(const std::string& reason, const std::string& details);
void process_options_menu(void);
void process_save_load_game_menu(int save);
-void update_load_save_game_menu(menu_type* pmenu, int load);
+void update_load_save_game_menu(Menu* pmenu, int load);
void parseargs(int argc, char * argv[]);
#endif /*SUPERTUX_SETUP_H*/
static int power_of_two(int input)
{
int value = 1;
+ int a;
while ( value < input ) {
value <<= 1;
void timer_init(timer_type* ptimer, bool st_ticks)
{
- ptimer->period = 0;
- ptimer->time = 0;
-
- if(st_ticks)
- ptimer->get_ticks = st_get_ticks;
- else
- ptimer->get_ticks = SDL_GetTicks;
-
+ ptimer->period = 0;
+ ptimer->time = 0;
+ ptimer->get_ticks = st_ticks ? st_get_ticks : SDL_GetTicks;
}
void timer_start(timer_type* ptimer, unsigned int period)
/* Reset menu variables */
menu_reset();
- menu_set_current(&main_menu);
+ Menu::set_current(main_menu);
clearscreen(0, 0, 0);
updatescreen();
if(show_menu && !quit)
menu_process_current();
- if(current_menu == &main_menu)
+ if(current_menu == main_menu)
{
- switch (menu_check(&main_menu))
+ switch (main_menu->check())
{
case 2:
done = 0;
}
break;
case 3:
- update_load_save_game_menu(&load_game_menu, true);
+ update_load_save_game_menu(load_game_menu, true);
break;
case 5:
done = 1;
break;
}
}
- else if(current_menu == &options_menu)
+ else if(current_menu == options_menu)
{
process_options_menu();
}
- else if(current_menu == &load_game_menu)
+ else if(current_menu == load_game_menu)
{
process_save_load_game_menu(false);
}
SDL_EnableKeyRepeat(0, 0); // disables key repeating
show_menu = 1;
- menu_set_current(&main_menu);
+ Menu::set_current(main_menu);
}