X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap.cpp;h=cd460ace84f8558d0254beddafeb6adffe0a02d9;hb=b6543ef22bd7e4193d03cadac0c6e0dc75e3bd66;hp=a4be7e902728194b85e7ad03af3a4e44bda2429c;hpb=820473dd8331f9c8949f0d492162fa9d1860ca90;p=supertux.git diff --git a/src/worldmap.cpp b/src/worldmap.cpp index a4be7e902..cd460ace8 100644 --- a/src/worldmap.cpp +++ b/src/worldmap.cpp @@ -362,6 +362,16 @@ WorldMap::load_map() } void +WorldMap::on_escape_press() +{ + // Show or hide the menu + if(!Menu::current()) + Menu::set_current(worldmap_menu); + else + Menu::set_current(0); +} + +void WorldMap::get_input() { enter_level = false; @@ -370,11 +380,11 @@ WorldMap::get_input() SDL_Event event; while (SDL_PollEvent(&event)) { - if(!show_menu && event.key.keysym.sym == SDLK_ESCAPE) - Menu::set_current(worldmap_menu); - - current_menu->event(event); - if(!show_menu) + if (Menu::current()) + { + Menu::current()->event(event); + } + else { switch(event.type) { @@ -385,6 +395,9 @@ WorldMap::get_input() case SDL_KEYDOWN: switch(event.key.keysym.sym) { + case SDLK_ESCAPE: + on_escape_press(); + break; case SDLK_LCTRL: case SDLK_RETURN: enter_level = true; @@ -415,6 +428,8 @@ WorldMap::get_input() case SDL_JOYBUTTONDOWN: if (event.jbutton.button == JOY_B) enter_level = true; + else if (event.jbutton.button == JOY_START) + on_escape_press(); break; default: @@ -423,7 +438,7 @@ WorldMap::get_input() } } - if (!show_menu) + if (!Menu::current()) { Uint8 *keystate = SDL_GetKeyState(NULL); @@ -534,8 +549,7 @@ WorldMap::update() } play_music(song, 1); - show_menu = 0; - menu_reset(); + Menu::set_current(0); if (!savegame_file.empty()) savegame(savegame_file); return; @@ -553,14 +567,16 @@ WorldMap::update() tux->update(0.33f); } - if(show_menu) + Menu* menu = Menu::current(); + if(menu) { - if(current_menu == worldmap_menu) + menu->action(); + + if(menu == worldmap_menu) { switch (worldmap_menu->check()) { case 2: // Return to game - menu_reset(); break; case 3: if (!savegame_file.empty()) @@ -572,6 +588,10 @@ WorldMap::update() break; } } + else if(menu == options_menu) + { + process_options_menu(); + } } } @@ -667,7 +687,7 @@ WorldMap::draw_status() void WorldMap::display() { - show_menu = false; + Menu::set_current(0); quit = false; @@ -692,9 +712,9 @@ WorldMap::display() get_input(); update(); - if(show_menu) + if(Menu::current()) { - menu_process_current(); + Menu::current()->draw(); mouse_cursor->draw(); } flipscreen(); @@ -769,10 +789,14 @@ WorldMap::loadgame(const std::string& filename) if (reader.read_lisp("tux", &tux_cur)) { Point p; + std::string back_str = "none"; + LispReader tux_reader(tux_cur); tux_reader.read_int("x", &p.x); tux_reader.read_int("y", &p.y); - + tux_reader.read_string("back", &back_str); + + tux->back_direction = string_to_direction(back_str); tux->set_tile_pos(p); } @@ -788,16 +812,10 @@ WorldMap::loadgame(const std::string& filename) { std::string name; bool solved = false; - std::string back_str =""; - Direction back = NONE; LispReader level_reader(data); level_reader.read_string("name", &name); level_reader.read_bool("solved", &solved); - if (level_reader.read_string("back", &back_str)) - back = string_to_direction(back_str); - - std::cout << "Name: " << name << " " << solved << std::endl; for(Levels::iterator i = levels.begin(); i != levels.end(); ++i) {