Proper fix for waterfall tiles
[supertux.git] / src / badguy / spidermite.cpp
index 389d70e..b3e5280 100644 (file)
@@ -21,7 +21,7 @@
 #include "supertux/object_factory.hpp"
 
 static const float FLYTIME = 1.2f;
-static const float FLYSPEED = -100.0f;
+static const float MOVE_SPEED = -100.0f;
 
 SpiderMite::SpiderMite(const Reader& reader) :
   BadGuy(reader, "images/creatures/spidermite/spidermite.sprite"),
@@ -32,7 +32,7 @@ SpiderMite::SpiderMite(const Reader& reader) :
 }
 
 SpiderMite::SpiderMite(const Vector& pos) :
-  BadGuy(pos, "images/creatures/spidermite/spidermite.sprite"), 
+  BadGuy(pos, "images/creatures/spidermite/spidermite.sprite"),
   mode(),
   timer()
 {
@@ -44,7 +44,7 @@ SpiderMite::initialize()
 {
   sprite->set_action(dir == LEFT ? "left" : "right");
   mode = FLY_UP;
-  physic.set_velocity_y(FLYSPEED);
+  physic.set_velocity_y(MOVE_SPEED);
   timer.start(FLYTIME/2);
 }
 
@@ -67,13 +67,18 @@ SpiderMite::collision_solid(const CollisionHit& hit)
 void
 SpiderMite::active_update(float elapsed_time)
 {
+  if(frozen)
+  {
+    BadGuy::active_update(elapsed_time);
+    return;
+  }
   if(timer.check()) {
     if(mode == FLY_UP) {
       mode = FLY_DOWN;
-      physic.set_velocity_y(-FLYSPEED);
+      physic.set_velocity_y(-MOVE_SPEED);
     } else if(mode == FLY_DOWN) {
       mode = FLY_UP;
-      physic.set_velocity_y(FLYSPEED);
+      physic.set_velocity_y(MOVE_SPEED);
     }
     timer.start(FLYTIME);
   }
@@ -86,4 +91,25 @@ SpiderMite::active_update(float elapsed_time)
   }
 }
 
+void
+SpiderMite::freeze()
+{
+  physic.enable_gravity(true);
+  BadGuy::freeze();
+}
+
+void
+SpiderMite::unfreeze()
+{
+  BadGuy::unfreeze();
+  physic.enable_gravity(false);
+  initialize();
+}
+
+bool
+SpiderMite::is_freezable() const
+{
+  return true;
+}
+
 /* EOF */