X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fscripting%2Ffunctions.cpp;h=e53a8372327d439fabad254075f9cdddd56cc4b3;hb=c3c41a343669d375aaa674c7f3ac35f08f24703e;hp=aa8ace74d81c2d9fb5221c795d38d16bb343a161;hpb=b51f8f420a99f380d9389bdd7a020b9a33a72820;p=supertux.git diff --git a/src/scripting/functions.cpp b/src/scripting/functions.cpp index aa8ace74d..e53a83723 100644 --- a/src/scripting/functions.cpp +++ b/src/scripting/functions.cpp @@ -51,6 +51,8 @@ #include "squirrel_util.hpp" #include "time_scheduler.hpp" +extern float game_speed; + namespace Scripting { @@ -96,6 +98,11 @@ void shrink_screen(float dest_x, float dest_y, float seconds) main_loop->set_screen_fade(new ShrinkFade(Vector(dest_x, dest_y), seconds)); } +void abort_screenfade() +{ + main_loop->set_screen_fade(NULL); +} + std::string translate(const std::string& text) { return dictionary_manager.get_dictionary().translate(text); @@ -131,11 +138,11 @@ static SQInteger squirrel_read_char(SQUserPointer file) void import(HSQUIRRELVM vm, const std::string& filename) { IFileStream in(filename); - + if(SQ_FAILED(sq_compile(vm, squirrel_read_char, &in, filename.c_str(), SQTrue))) throw SquirrelError(vm, "Couldn't parse script"); - + sq_pushroottable(vm); if(SQ_FAILED(sq_call(vm, 1, SQFalse, SQTrue))) { sq_pop(vm, 1); @@ -162,15 +169,24 @@ void debug_draw_solids_only(bool enable) void save_state() { using namespace WorldMapNS; - - if(World::current() == NULL) + + if(World::current() == NULL || WorldMap::current() == NULL) throw std::runtime_error("Can't save state without active World"); - if(WorldMap::current() != NULL) - WorldMap::current()->save_state(); + WorldMap::current()->save_state(); World::current()->save_state(); } +void update_worldmap() +{ + using namespace WorldMapNS; + + if(WorldMap::current() == NULL) + throw std::runtime_error("Can't update Worldmap: none active"); + + WorldMap::current()->load_state(); +} + // not added to header, function to only be used by others // in this file bool validate_sector_player() @@ -250,7 +266,7 @@ void gotoend() if (!validate_sector_player()) return; ::Player* tux = Sector::current()->player; tux->move(Vector( - (Sector::current()->solids->get_width()*32) - (SCREEN_WIDTH*2), 0)); + (Sector::current()->get_width()) - (SCREEN_WIDTH*2), 0)); Sector::current()->camera->reset( Vector(tux->get_pos().x, tux->get_pos().y)); } @@ -271,5 +287,9 @@ int rand() return systemRandom.rand(); } +void set_game_speed(float speed) +{ + ::game_speed = speed; } +}