X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameloop.cpp;h=d523bdaff17ba538b3268e1985de4f4932ea7aa6;hb=6074972382238a94397b649650738daf0d869775;hp=0243bfc35ec96f9dd4fc0860adc8ba719e5b0dce;hpb=6e7c9ecb1777113d2cd38ba3846acba6b249fd62;p=supertux.git diff --git a/src/gameloop.cpp b/src/gameloop.cpp index 0243bfc35..d523bdaff 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -121,7 +121,6 @@ GameSession::restart_level() world->get_tux()->base.y = best_reset_point.y; } } - if (st_gl_mode != ST_GL_DEMO_GAME) { @@ -158,7 +157,7 @@ GameSession::levelintro(void) white_text->drawf(str, 0, 224, A_HMIDDLE, A_TOP, 1); sprintf(str, "by %s", world->get_level()->author.c_str()); - white_small_text->drawf(str, 0, 400, A_HMIDDLE, A_TOP, 1); + white_small_text->drawf(str, 0, 360, A_HMIDDLE, A_TOP, 1); flipscreen(); @@ -209,6 +208,43 @@ GameSession::process_events() tux.input.up = UP; last_x_pos = tux.base.x; + + SDL_Event event; + while (SDL_PollEvent(&event)) + { + /* Check for menu-events, if the menu is shown */ + if (Menu::current()) + { + Menu::current()->event(event); + st_pause_ticks_start(); + } + + switch(event.type) + { + case SDL_QUIT: /* Quit event - quit: */ + st_abort("Received window close", ""); + break; + + case SDL_KEYDOWN: /* A keypress! */ + { + SDLKey key = event.key.keysym.sym; + + switch(key) + { + case SDLK_ESCAPE: /* Escape: Open/Close the menu: */ + on_escape_press(); + break; + default: + break; + } + } + + case SDL_JOYBUTTONDOWN: + if (event.jbutton.button == joystick_keymap.start_button) + on_escape_press(); + break; + } + } } else { @@ -491,8 +527,8 @@ GameSession::run() update_time = last_update_time = st_get_ticks(); /* Clear screen: */ - clearscreen(0, 0, 0); - updatescreen(); +// clearscreen(0, 0, 0); +// updatescreen(); // Eat unneeded events SDL_Event event; @@ -637,7 +673,18 @@ GameSession::drawstatus() white_text->draw("COINS", screen->h, 0, 1); gold_text->draw(str, 608, 0, 1); - white_text->draw("LIVES", screen->h, 20, 1); + white_text->draw("LIVES", 480, 20); + if (player_status.lives >= 5) + { + sprintf(str, "%dx", player_status.lives); + gold_text->draw(str, 585, 20); + tux_life->draw(565+(18*3), 20); + } + else + { + for(int i= 0; i < player_status.lives; ++i) + tux_life->draw(565+(18*i),20); + } if(show_fps) { @@ -645,11 +692,6 @@ GameSession::drawstatus() white_text->draw("FPS", screen->h, 40, 1); gold_text->draw(str, screen->h + 60, 40, 1); } - - for(int i= 0; i < player_status.lives; ++i) - { - tux_life->draw(565+(18*i),20); - } } void @@ -704,10 +746,24 @@ std::string slotinfo(int slot) { char tmp[1024]; char slotfile[1024]; + std::string title; sprintf(slotfile,"%s/slot%d.stsg",st_save_dir,slot); + lisp_object_t* savegame = lisp_read_from_file(slotfile); + if (savegame) + { + LispReader reader(lisp_cdr(savegame)); + reader.read_string("title", &title); + lisp_free(savegame); + } + if (access(slotfile, F_OK) == 0) - sprintf(tmp,"Slot %d - Savegame",slot); + { + if (!title.empty()) + snprintf(tmp,1024,"Slot %d - %s",slot, title.c_str()); + else + snprintf(tmp, 1024,"Slot %d - Savegame",slot); + } else sprintf(tmp,"Slot %d - Free",slot);