Powerup: Iceflower improvements
[supertux.git] / src / badguy / mrbomb.cpp
index 2e8a453..438d328 100644 (file)
 #include "badguy/bomb.hpp"
 #include "badguy/mrbomb.hpp"
 #include "object/explosion.hpp"
+#include "object/player.hpp"
 #include "sprite/sprite.hpp"
 #include "sprite/sprite_manager.hpp"
 #include "supertux/object_factory.hpp"
 #include "supertux/sector.hpp"
+#include "util/reader.hpp"
 
 MrBomb::MrBomb(const Reader& reader) :
   WalkingBadguy(reader, "images/creatures/mr_bomb/mr_bomb.sprite", "left", "right"),
@@ -76,6 +78,12 @@ MrBomb::collision_player(Player& player, const CollisionHit& hit)
 bool
 MrBomb::collision_squished(GameObject& object)
 {
+  Player* player = dynamic_cast<Player*>(&object);
+  if(player && player->is_invincible()) {
+    player->bounce(*this);
+    kill_fall();
+    return true;
+  }
   if(is_valid()) {
     remove_me();
     Sector::current()->add_object(new Bomb(get_pos(), dir, sprite_name ));
@@ -123,13 +131,6 @@ MrBomb::ungrab(MovingObject& , Direction dir)
   grabbed = false;
 }
 
-void
-MrBomb::freeze()
-{
-  WalkingBadguy::freeze();
-  sprite->set_action(dir == LEFT ? "iced-left" : "iced-right");
-}
-
 bool
 MrBomb::is_freezable() const
 {
@@ -142,6 +143,4 @@ MrBomb::is_portable() const
   return frozen;
 }
 
-IMPLEMENT_FACTORY(MrBomb, "mrbomb");
-
 /* EOF */