X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fbadguy%2Fbadguy.hpp;h=44613e47f7fd526f83b290dbeae72007b7dd20ad;hb=e7042da286e68756298cc205910b35c1da551167;hp=ebcee6970564f2dcb3fb47676a54d26aeaa7e424;hpb=12966e3f986f7202125ae590c74a4d0c227441dd;p=supertux.git diff --git a/src/badguy/badguy.hpp b/src/badguy/badguy.hpp index ebcee6970..44613e47f 100644 --- a/src/badguy/badguy.hpp +++ b/src/badguy/badguy.hpp @@ -42,6 +42,7 @@ class BadGuy : public MovingSprite, public Serializable { public: BadGuy(const Vector& pos, const std::string& sprite_name, int layer = LAYER_OBJECTS); + BadGuy(const Vector& pos, Direction direction, const std::string& sprite_name, int layer = LAYER_OBJECTS); BadGuy(const lisp::Lisp& reader, const std::string& sprite_name, int layer = LAYER_OBJECTS); /** Called when the badguy is drawn. The default implementation simply draws @@ -56,8 +57,7 @@ public: * implemetnation calls collision_player, collision_solid, collision_badguy * and collision_squished */ - virtual HitResponse collision(GameObject& other, - const CollisionHit& hit); + virtual HitResponse collision(GameObject& other, const CollisionHit& hit); /** Called when a collision with tile with special attributes occured */ virtual void collision_tile(uint32_t tile_attributes); @@ -95,14 +95,11 @@ protected: }; /** Called when the badguy collided with a player */ - virtual HitResponse collision_player(Player& player, - const CollisionHit& hit); + virtual HitResponse collision_player(Player& player, const CollisionHit& hit); /** Called when the badguy collided with solid ground */ - virtual HitResponse collision_solid(GameObject& other, - const CollisionHit& hit); + virtual void collision_solid(const CollisionHit& hit); /** Called when the badguy collided with another badguy */ - virtual HitResponse collision_badguy(BadGuy& other, - const CollisionHit& hit); + virtual HitResponse collision_badguy(BadGuy& other, const CollisionHit& hit); /** Called when the player hit the badguy from above. You should return true * if the badguy was squished, false if squishing wasn't possible @@ -110,8 +107,7 @@ protected: virtual bool collision_squished(Player& player); /** Called when the badguy collided with a bullet */ - virtual HitResponse collision_bullet(Bullet& bullet, - const CollisionHit& hit); + virtual HitResponse collision_bullet(Bullet& bullet, const CollisionHit& hit); /** called each frame when the badguy is activated. */ virtual void active_update(float elapsed_time); @@ -154,18 +150,39 @@ protected: Vector start_position; + /** + * The direction we currently face in + */ Direction dir; /** + * The direction we initially faced in + */ + Direction start_dir; + + /** * Get Direction from String. */ Direction str2dir( std::string dir_str ); + /** + * Update on_ground_flag judging by solid collision @c hit. + * This gets called from the base implementation of collision_solid, so call this when overriding collision_solid's default behaviour. + */ + void update_on_ground_flag(const CollisionHit& hit); + + /** + * Returns true if we touched ground in the past frame + * This only works if update_on_ground_flag() gets called in collision_solid. + */ + bool on_ground(); + private: void try_activate(); State state; Timer state_timer; + bool on_ground_flag; }; #endif