X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgameloop.cpp;h=3267063096c29f5643271531facd39c633fce9a4;hb=44c614038ecdc2d1b69a6fee255d9c0ebc2a5098;hp=c4b048565c023eedd3d0e4d69e705a1cac498b53;hpb=fcae2511a70217bb8ca6e7fb13e0dab639a062f1;p=supertux.git diff --git a/src/gameloop.cpp b/src/gameloop.cpp index c4b048565..326706309 100644 --- a/src/gameloop.cpp +++ b/src/gameloop.cpp @@ -47,20 +47,19 @@ #include "high_scores.h" #include "gui/menu.h" #include "sector.h" -#include "player.h" #include "level.h" #include "scene.h" -#include "collision.h" #include "tile.h" -#include "particlesystem.h" +#include "object/particlesystem.h" +#include "object/background.h" +#include "object/tilemap.h" +#include "object/camera.h" +#include "object/player.h" #include "resources.h" -#include "background.h" -#include "tilemap.h" #include "app/gettext.h" #include "worldmap.h" #include "intro.h" #include "misc.h" -#include "camera.h" #include "statistics.h" #include "timer.h" #include "object/fireworks.h" @@ -80,23 +79,19 @@ bool compare_last(std::string& haystack, std::string needle) return false; } -GameSession::GameSession(const std::string& levelname_, int mode, - bool flip_level_, Statistics* statistics) +GameSession::GameSession(const std::string& levelfile_, int mode, + Statistics* statistics) : level(0), currentsector(0), st_gl_mode(mode), - end_sequence(NO_ENDSEQUENCE), levelname(levelname_), flip_level(flip_level_), + end_sequence(NO_ENDSEQUENCE), levelfile(levelfile_), best_level_statistics(statistics) { current_ = this; - global_frame_counter = 0; game_pause = false; fps_fps = 0; context = new DrawingContext(); - if(flip_levels_mode) - flip_level = true; - last_swap_point = Vector(-1, -1); last_swap_stats.reset(); @@ -125,9 +120,7 @@ GameSession::restart_level() currentsector = 0; level = new Level; - level->load(levelname); - if(flip_level) - level->do_vertical_flip(); + level->load(levelfile); global_stats.reset(); global_stats.set_total_points(COINS_COLLECTED_STAT, level->get_total_coins()); @@ -187,8 +180,13 @@ GameSession::levelintro(void) char str[60]; DrawingContext context; - if(currentsector->background) - currentsector->background->draw(context); + for(Sector::GameObjects::iterator i = currentsector->gameobjects.begin(); + i != currentsector->gameobjects.end(); ++i) { + Background* background = dynamic_cast (*i); + if(background) { + background->draw(context); + } + } // context.draw_text(gold_text, level->get_name(), Vector(screen->w/2, 160), // CENTER_ALLIGN, LAYER_FOREGROUND1); @@ -199,17 +197,13 @@ GameSession::levelintro(void) context.draw_text(white_text, str, Vector(screen->w/2, 210), CENTER_ALLIGN, LAYER_FOREGROUND1); - if(level->get_author().size()) + if((level->get_author().size()) && (level->get_author() != "SuperTux Team")) + //TODO make author check case/blank-insensitive context.draw_text(white_small_text, - std::string(_("by ")) + level->get_author(), + std::string(_("contributed by ")) + level->get_author(), Vector(screen->w/2, 350), CENTER_ALLIGN, LAYER_FOREGROUND1); - if(flip_level) - context.draw_text(white_text, - _("Level Vertically Flipped!"), - Vector(screen->w/2, 310), CENTER_ALLIGN, LAYER_FOREGROUND1); - if(best_level_statistics != NULL) best_level_statistics->draw_message_info(context, _("Best Level Statistics")); @@ -463,6 +457,11 @@ GameSession::process_events() tux.kill(tux.KILL); last_keys.clear(); } + if(compare_last(last_keys, "grid")) + { // toggle debug grid + debug_grid = !debug_grid; + last_keys.clear(); + } if(compare_last(last_keys, "hover")) { // toggle hover ability on/off tux.enable_hover = !tux.enable_hover; @@ -718,20 +717,17 @@ GameSession::run() Uint32 lastticks = SDL_GetTicks(); fps_ticks = SDL_GetTicks(); - frame_timer.start(.025, true); while (exit_status == ES_NONE) { Uint32 ticks = SDL_GetTicks(); float elapsed_time = float(ticks - lastticks) / 1000.; - global_time += elapsed_time; + if(!game_pause) + global_time += elapsed_time; lastticks = ticks; + // 40fps is minimum - if(elapsed_time > .05) - elapsed_time = .05; + if(elapsed_time > .025) + elapsed_time = .025; - if(frame_timer.check()) { - ++global_frame_counter; - } - /* Handle events: */ currentsector->player->input.old_fire = currentsector->player->input.fire; currentsector->player->input.old_up = currentsector->player->input.old_up; @@ -857,7 +853,7 @@ GameSession::drawstatus(DrawingContext& context) context.draw_text(white_text, _("TIME's UP"), Vector(screen->w/2, 0), CENTER_ALLIGN, LAYER_FOREGROUND1); } else if (time_left.get_timeleft() > TIME_WARNING - || (global_frame_counter % 10) < 5) { + || int(global_time * 2.5) % 2) { sprintf(str, " %d", int(time_left.get_timeleft())); context.draw_text(white_text, _("TIME"), Vector(screen->w/2, 0), CENTER_ALLIGN, LAYER_FOREGROUND1); @@ -904,12 +900,18 @@ GameSession::drawstatus(DrawingContext& context) } void -GameSession::drawresultscreen(void) +GameSession::drawresultscreen() { char str[80]; DrawingContext context; - currentsector->background->draw(context); + for(Sector::GameObjects::iterator i = currentsector->gameobjects.begin(); + i != currentsector->gameobjects.end(); ++i) { + Background* background = dynamic_cast (*i); + if(background) { + background->draw(context); + } + } context.draw_text(blue_text, _("Result:"), Vector(screen->w/2, 200), CENTER_ALLIGN, LAYER_FOREGROUND1);