00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef HEADER_SUPERTUX_BADGUY_MRICEBLOCK_HPP
00018 #define HEADER_SUPERTUX_BADGUY_MRICEBLOCK_HPP
00019
00020 #include "badguy/walking_badguy.hpp"
00021 #include "object/portable.hpp"
00022
00023 class MrIceBlock : public WalkingBadguy,
00024 public Portable
00025 {
00026 public:
00027 MrIceBlock(const Reader& reader);
00028 MrIceBlock(const Vector& pos, Direction d);
00029
00030 void initialize();
00031 HitResponse collision(GameObject& object, const CollisionHit& hit);
00032 void collision_solid(const CollisionHit& hit);
00033 HitResponse collision_badguy(BadGuy& badguy, const CollisionHit& hit);
00034 HitResponse collision_player(Player& player, const CollisionHit& hit);
00035
00036 void active_update(float elapsed_time);
00037
00038 void grab(MovingObject& object, const Vector& pos, Direction dir);
00039 void ungrab(MovingObject& object, Direction dir);
00040 bool is_portable() const;
00041
00042 bool can_break();
00043
00044 protected:
00045 enum IceState {
00046 ICESTATE_NORMAL,
00047 ICESTATE_FLAT,
00048 ICESTATE_GRABBED,
00049 ICESTATE_KICKED
00050 };
00051
00052 protected:
00053 bool collision_squished(GameObject& object);
00054 void set_state(IceState state, bool up = false);
00055
00056 private:
00057 IceState ice_state;
00058 Timer nokick_timer;
00059 Timer flat_timer;
00060 int squishcount;
00061 };
00062
00063 #endif
00064
00065