X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fbadguy%2Fbadguy.hpp;h=6c18166127fd3bc1a64cd5e5b84ebc565a5e8c2a;hb=791b577793d178a35031a6585ebc9a73b94f299c;hp=bbcbad8f087a9f3c1ae492809a681d5aef28d1ba;hpb=89ecbfcacb9abac599f8feba52792392b8199cf1;p=supertux.git diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index bbcbad8f0..6c1816612 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -38,7 +38,7 @@ #include "audio/sound_manager.hpp" #include "audio/sound_source.hpp" -class BadGuy : public MovingSprite, public Serializable +class BadGuy : public MovingSprite, protected UsesPhysic, public Serializable { public: BadGuy(const Vector& pos, const std::string& sprite_name, int layer = LAYER_OBJECTS); @@ -66,11 +66,14 @@ public: * screen (his sprite is turned upside-down) */ virtual void kill_fall(); + + /** Call this, if you use custom kill_fall() or kill_squashed(GameObject& object) */ + virtual void run_dead_script(); /** Writes out the badguy into the included lisp::Writer. Useful e.g. when * converting an old-format level to the new format. */ - virtual void save(lisp::Writer& writer); + virtual void write(lisp::Writer& writer); /** * True if this badguy can break bricks or open bonusblocks in his current form. @@ -94,6 +97,26 @@ public: bool countMe; /** + * Called when hit by a fire bullet, and is_flammable() returns true + */ + virtual void ignite(); + + /** + * Called to revert a badguy when is_ignited() returns true + */ + virtual void extinguish(); + + /** + * Returns whether to call ignite() when a badguy gets hit by a fire bullet + */ + virtual bool is_flammable() const; + + /** + * Returns whether this badguys is currently on fire + */ + bool is_ignited() const; + + /** * Called when hit by an ice bullet, and is_freezable() returns true. */ virtual void freeze(); @@ -126,7 +149,7 @@ protected: /** Called when the player hit the badguy from above. You should return true * if the badguy was squished, false if squishing wasn't possible */ - virtual bool collision_squished(Player& player); + virtual bool collision_squished(GameObject& object); /** Called when the badguy collided with a bullet */ virtual HitResponse collision_bullet(Bullet& bullet, const CollisionHit& hit); @@ -144,7 +167,7 @@ protected: /** called when the badguy has been deactivated */ virtual void deactivate(); - void kill_squished(Player& player); + void kill_squished(GameObject& object); void set_state(State state); State get_state() const @@ -155,8 +178,6 @@ protected: */ Player* get_nearest_player(); - Physic physic; - /// is the enemy activated bool activated; /** @@ -199,14 +220,24 @@ protected: */ bool on_ground(); + /** + * Returns floor normal stored the last time when update_on_ground_flag was called and we touched something solid from above. + */ + Vector get_floor_normal(); + bool frozen; + bool ignited; /**< true if this badguy is currently on fire */ + + std::string dead_script; /**< script to execute when badguy is killed */ private: void try_activate(); State state; Timer state_timer; - bool on_ground_flag; + bool on_ground_flag; /**< true if we touched something solid from above and update_on_ground_flag was called last frame */ + Vector floor_normal; /**< floor normal stored the last time when update_on_ground_flag was called and we touched something solid from above */ + }; #endif