#include "object/background.hpp"
#include "object/decal.hpp"
#include "object/tilemap.hpp"
-#include "physfs/ifile_stream.hpp"
+#include "physfs/ifile_streambuf.hpp"
#include "scripting/squirrel_error.hpp"
#include "scripting/squirrel_util.hpp"
#include "sprite/sprite.hpp"
void
WorldMap::get_level_target_time(LevelTile& level)
{
+ if(last_position == tux->get_tile_pos()) {
+ level.target_time = last_target_time;
+ return;
+ }
+
try {
lisp::Parser parser;
const lisp::Lisp* root = parser.parse(levels_path + level.get_name());
return;
level_lisp->get("target-time", level.target_time);
+
+ last_position = level.pos;
+ last_target_time = level.target_time;
} catch(std::exception& e) {
log_warning << "Problem when reading level target time: " << e.what() << std::endl;
return;
get_level_target_time(*level);
if(level->statistics.completed(level->statistics, level->target_time)) {
level->perfect = true;
- level->sprite->set_action("perfect");
+ if(level->sprite->has_action("perfect"))
+ level->sprite->set_action("perfect");
}
save_state();
//Run default.nut just before init script
try {
- IFileStream in(levels_path + "/default.nut");
+ IFileStreambuf ins(levels_path + "default.nut");
+ std::istream in(&ins);
run_script(in, "WorldMap::default.nut");
} catch(std::exception& ) {
// doesn't exist or erroneous; do nothing