Skip to content

Commit

Permalink
Unify both calls to level title and level target time, fixes unnecess…
Browse files Browse the repository at this point in the history
…ary disk I/O
  • Loading branch information
tobbi committed Apr 7, 2015
1 parent 802ced1 commit ba1f3cb
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 33 deletions.
45 changes: 14 additions & 31 deletions src/worldmap/worldmap.cpp
Expand Up @@ -344,35 +344,17 @@ WorldMap::load(const std::string& filename)
}

void
WorldMap::get_level_title(LevelTile& level)
WorldMap::load_level_information(LevelTile& level)
{
/** get special_tile's title */
level.title = "<no title>";

try {
lisp::Parser parser;
const lisp::Lisp* root = parser.parse(levels_path + level.get_name());

const lisp::Lisp* level_lisp = root->get_lisp("supertux-level");
if(!level_lisp)
return;

level_lisp->get("name", level.title);
} catch(std::exception& e) {
log_warning << "Problem when reading leveltitle: " << e.what() << std::endl;
return;
}
}

void
WorldMap::get_level_target_time(LevelTile& level)
{
if(last_position == tux->get_tile_pos()) {
level.target_time = last_target_time;
if(last_position == tux->get_tile_pos())
{
return;
}

last_position = level.pos;
last_position = tux->get_tile_pos();
/** get special_tile's title */
level.title = "<no title>";
level.target_time = 0.0f;

try {
lisp::Parser parser;
Expand All @@ -382,12 +364,11 @@ WorldMap::get_level_target_time(LevelTile& level)
if(!level_lisp)
return;

level_lisp->get("name", level.title);
level_lisp->get("target-time", level.target_time);

last_target_time = level.target_time;

} catch(std::exception& e) {
log_warning << "Problem when reading level target time: " << e.what() << std::endl;
log_warning << "Problem when reading level information: " << e.what() << std::endl;
return;
}
}
Expand Down Expand Up @@ -493,7 +474,9 @@ WorldMap::finished_level(Level* gamelevel)
// deal with statistics
level->statistics.merge(gamelevel->stats);
calculate_total_stats();
get_level_target_time(*level);
if (level->target_time == 0.0f)
load_level_information(*level);

if(level->statistics.completed(level->statistics, level->target_time)) {
level->perfect = true;
if(level->sprite->has_action("perfect"))
Expand Down Expand Up @@ -846,7 +829,7 @@ WorldMap::draw_status(DrawingContext& context)

if (level->pos == tux->get_tile_pos()) {
if(level->title == "")
get_level_title(*level);
load_level_information(*level);

context.draw_text(Resources::normal_font, level->title,
Vector(SCREEN_WIDTH/2,
Expand All @@ -867,7 +850,7 @@ WorldMap::draw_status(DrawingContext& context)
*/

if (level->target_time == 0.0f)
get_level_target_time(*level);
load_level_information(*level);
level->statistics.draw_worldmap_info(context, level->target_time);
break;
}
Expand Down
4 changes: 2 additions & 2 deletions src/worldmap/worldmap.hpp
Expand Up @@ -227,8 +227,7 @@ class WorldMap : public Screen
void set_levels_solved(bool solved, bool perfect);

private:
void get_level_title(LevelTile& level);
void get_level_target_time(LevelTile& level);
void load_level_information(LevelTile& level);
void draw_status(DrawingContext& context);
void calculate_total_stats();

Expand All @@ -239,6 +238,7 @@ class WorldMap : public Screen
void clamp_camera_position(Vector& c);
Vector last_position;
float last_target_time;
std::string last_title;

private:
WorldMap(const WorldMap&);
Expand Down

0 comments on commit ba1f3cb

Please sign in to comment.