Fixed creating level-subset again.
[supertux.git] / src / gameobjs.cpp
index 5133535..4909308 100644 (file)
@@ -18,7 +18,7 @@
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 //  02111-1307, USA.
-
+#include <algorithm>
 #include "world.h"
 #include "tile.h"
 #include "gameloop.h"
@@ -40,7 +40,14 @@ BouncyDistro::action(double frame_ratio)
   base.ym += 0.1 * frame_ratio;
 
   if (base.ym >= 0)
-    World::current()->bouncy_distros.erase(static_cast<std::vector<BouncyDistro>::iterator>(this));
+    {
+      std::vector<BouncyDistro*>::iterator i
+        = std::find(World::current()->bouncy_distros.begin(), 
+                    World::current()->bouncy_distros.end(), 
+                    this);
+      if (i != World::current()->bouncy_distros.end())
+        World::current()->bouncy_distros.erase(i);
+    }
 }
 
 void
@@ -71,7 +78,14 @@ BrokenBrick::action(double frame_ratio)
   base.y = base.y + base.ym * frame_ratio;
 
   if (!timer.check())
-    World::current()->broken_bricks.erase(static_cast<std::vector<BrokenBrick>::iterator>(this));
+    {
+      std::vector<BrokenBrick*>::iterator i
+        = std::find(World::current()->broken_bricks.begin(), 
+                    World::current()->broken_bricks.end(), 
+                    this);
+      if (i != World::current()->broken_bricks.end())
+        World::current()->broken_bricks.erase(i);
+    }
 }
 
 void
@@ -114,7 +128,14 @@ BouncyBrick::action(double frame_ratio)
 
   /* Stop bouncing? */
   if (offset >= 0)
-    World::current()->bouncy_bricks.erase(static_cast<std::vector<BouncyBrick>::iterator>(this));
+    {
+      std::vector<BouncyBrick*>::iterator i
+        = std::find(World::current()->bouncy_bricks.begin(), 
+                    World::current()->bouncy_bricks.end(), 
+                    this);
+      if (i != World::current()->bouncy_bricks.end())
+        World::current()->bouncy_bricks.erase(i);
+    }
 }
 
 void
@@ -170,7 +191,14 @@ FloatingScore::action(double frame_ratio)
   base.y = base.y - 2 * frame_ratio;
 
   if(!timer.check())
-    World::current()->floating_scores.erase(static_cast<std::vector<FloatingScore>::iterator>(this));
+    {
+      std::vector<FloatingScore*>::iterator i
+        = std::find(World::current()->floating_scores.begin(), 
+                    World::current()->floating_scores.end(), 
+                    this);
+      if (i != World::current()->floating_scores.end())
+        World::current()->floating_scores.erase(i);
+    }
 }
 
 void