#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);
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