Let Tux bounce off badguys when he's invincible. This let's us bounce off guys like...
[supertux.git] / src / sector.cpp
index 3a0e229..295c57d 100644 (file)
@@ -84,6 +84,8 @@ Sector::Sector(Level* parent)
   // create a new squirrel table for the sector
   using namespace Scripting;
 
+  sq_collectgarbage(global_vm);
+
   sq_newtable(global_vm);
   sq_pushroottable(global_vm);
   if(SQ_FAILED(sq_setdelegate(global_vm, -2)))
@@ -108,14 +110,16 @@ Sector::~Sector()
     sq_release(global_vm, &object);
   }
   sq_release(global_vm, &sector_table);
+  sq_collectgarbage(global_vm);
  
   update_game_objects();
   assert(gameobjects_new.size() == 0);
 
-  for(GameObjects::iterator i = gameobjects.begin(); i != gameobjects.end();
-      ++i) {
-    before_object_remove(*i);
-    delete *i;
+  for(GameObjects::iterator i = gameobjects.begin();
+      i != gameobjects.end(); ++i) {
+    GameObject* object = *i;
+    before_object_remove(object);
+    object->unref();
   }
 
   for(SpawnPoints::iterator i = spawnpoints.begin(); i != spawnpoints.end();
@@ -451,6 +455,7 @@ Sector::add_object(GameObject* object)
   }
 #endif
 
+  object->ref();
   gameobjects_new.push_back(object);
 }
 
@@ -485,7 +490,7 @@ Sector::activate(const Vector& player_pos)
       _current->deactivate();
     _current = this;
 
-    // register sectortable as current_sector in scripting
+    // register sectortable as sector in scripting
     HSQUIRRELVM vm = Scripting::global_vm;
     sq_pushroottable(vm);
     sq_pushstring(vm, "sector", -1);
@@ -614,7 +619,7 @@ Sector::update_game_objects()
 
     before_object_remove(object);
     
-    delete *i;
+    object->unref();
     i = gameobjects.erase(i);
   }