AmbientSound scripting patch from tuxdev
[supertux.git] / src / scripting / functions.cpp
index f1a3715..aa8ace7 100644 (file)
@@ -29,7 +29,6 @@
 #include "game_session.hpp"
 #include "tinygettext/tinygettext.hpp"
 #include "physfs/physfs_stream.hpp"
-#include "script_manager.hpp"
 #include "resources.hpp"
 #include "gettext.hpp"
 #include "log.hpp"
 #include "shrinkfade.hpp"
 #include "object/camera.hpp"
 #include "flip_level_transformer.hpp"
+#include "audio/sound_manager.hpp"
+#include "random_generator.hpp"
 
 #include "squirrel_error.hpp"
-#include "wrapper_util.hpp"
+#include "squirrel_util.hpp"
+#include "time_scheduler.hpp"
 
 namespace Scripting
 {
 
-int display(HSQUIRRELVM vm)
+SQInteger display(HSQUIRRELVM vm)
 {
   Console::output << squirrel2string(vm, -1) << std::endl;
   return 0;
 }
 
+void print_stacktrace(HSQUIRRELVM vm)
+{
+  print_squirrel_stack(vm);
+}
+
+SQInteger get_current_thread(HSQUIRRELVM vm)
+{
+  sq_pushobject(vm, vm_to_object(vm));
+  return 1;
+}
+
 void wait(HSQUIRRELVM vm, float seconds)
 {
-  SQUserPointer ptr = sq_getforeignptr(vm);
-  ScriptManager* script_manager = reinterpret_cast<ScriptManager*> (ptr);
-  script_manager->set_wakeup_event(vm, ScriptManager::TIME, seconds);
+  TimeScheduler::instance->schedule_thread(vm, game_time + seconds);
 }
 
 void wait_for_screenswitch(HSQUIRRELVM vm)
 {
-  SQUserPointer ptr = sq_getforeignptr(vm);
-  ScriptManager* script_manager = reinterpret_cast<ScriptManager*> (ptr);
-  script_manager->set_wakeup_event(vm, ScriptManager::SCREEN_SWITCHED);
+  main_loop->waiting_threads.add(vm);
 }
 
 void exit_screen()
@@ -128,24 +137,19 @@ void import(HSQUIRRELVM vm, const std::string& filename)
     throw SquirrelError(vm, "Couldn't parse script");
     
   sq_pushroottable(vm);
-  if(SQ_FAILED(sq_call(vm, 1, SQFalse))) {
+  if(SQ_FAILED(sq_call(vm, 1, SQFalse, SQTrue))) {
     sq_pop(vm, 1);
     throw SquirrelError(vm, "Couldn't execute script");
   }
   sq_pop(vm, 1);
 }
 
-void add_key(int new_key)
-{
-  player_status->set_keys(new_key);
-}
-
 void debug_collrects(bool enable)
 {
   Sector::show_collrects = enable;
 }
 
-void debug_draw_fps(bool enable)
+void debug_show_fps(bool enable)
 {
   config->show_fps = enable;
 }
@@ -185,6 +189,16 @@ bool validate_sector_player()
   return true;
 }
 
+void play_music(const std::string& filename)
+{
+  sound_manager->play_music(filename);
+}
+
+void play_sound(const std::string& filename)
+{
+  sound_manager->play(filename);
+}
+
 void grease()
 {
   if (!validate_sector_player()) return;
@@ -199,25 +213,19 @@ void invincible()
   tux->invincible_timer.start(10000);
 }
 
-void mortal()
+void ghost()
 {
   if (!validate_sector_player()) return;
   ::Player* tux = Sector::current()->player;
-  tux->invincible_timer.stop();
+  tux->set_ghost_mode(true);
 }
 
-void shrink()
-{
-  if (!validate_sector_player()) return;
-  ::Player* tux = Sector::current()->player;
-  tux->kill(tux->SHRINK);
-}
-
-void kill()
+void mortal()
 {
   if (!validate_sector_player()) return;
   ::Player* tux = Sector::current()->player;
-  tux->kill(tux->KILL);
+  tux->invincible_timer.stop();
+  tux->set_ghost_mode(false);
 }
 
 void restart()
@@ -258,5 +266,10 @@ void quit()
   main_loop->quit();
 }
 
+int rand()
+{
+  return systemRandom.rand();
+}
+
 }