fix collision against spikes too wide, fix paths, try to fix jumping on badguys that...
[supertux.git] / src / badguy / mriceblock.hpp
index 4031e0d..4f5d957 100644 (file)
 #define __MRICEBLOCK_H__
 
 #include "badguy.hpp"
+#include "object/portable.hpp"
 
-class MrIceBlock : public BadGuy
+class MrIceBlock : public BadGuy, public Portable
 {
 public:
   MrIceBlock(const lisp::Lisp& reader);
-  MrIceBlock(float pos_x, float pos_y, Direction d);
+  MrIceBlock(float pos_x, float pos_y, Direction d, bool stay_on_plat);
 
   void activate();
   void write(lisp::Writer& writer);
+  HitResponse collision(GameObject& object, const CollisionHit& hit);
   HitResponse collision_solid(GameObject& object, const CollisionHit& hit);
   HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit);
+  HitResponse collision_player(Player& player, const CollisionHit& hit);
 
   void active_update(float elapsed_time);
+  
+  void grab(MovingObject& object, const Vector& pos, Direction dir);
+  void ungrab(MovingObject& object, Direction dir);
 
 protected:
   bool collision_squished(Player& player);
@@ -43,13 +49,18 @@ private:
   enum IceState {
     ICESTATE_NORMAL,
     ICESTATE_FLAT,
+    ICESTATE_GRABBED,
     ICESTATE_KICKED
   };
+
+  void set_state(IceState state);
   IceState ice_state;
   Timer flat_timer;
   int squishcount;
   bool set_direction;
-  Direction initial_direction;  
+  bool stay_on_platform;
+  Direction initial_direction;
 };
 
 #endif