X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbadguy%2Fbadguy.h;h=e770feb6148824d68ac8adc2b57b015cd1628899;hb=908a780ca974cc9d8bf6c2815d9eec6e8ec25fbb;hp=d92d6b2ff86fc317a8d1f4c8dbe850fd24d7f367;hpb=d46c78c842ab4090a3f46e560c891234167f124b;p=supertux.git diff --git a/src/badguy/badguy.h b/src/badguy/badguy.h index d92d6b2ff..e770feb61 100644 --- a/src/badguy/badguy.h +++ b/src/badguy/badguy.h @@ -7,12 +7,15 @@ #include "special/moving_object.h" #include "special/sprite.h" #include "math/physic.h" -#include "player.h" +#include "object/player.h" #include "serializable.h" #include "resources.h" #include "sector.h" -#include "utils/lispwriter.h" -#include "utils/lispreader.h" +#include "direction.h" +#include "object_factory.h" +#include "lisp/parser.h" +#include "lisp/lisp.h" +#include "lisp/writer.h" #include "video/drawing_context.h" #include "special/sprite_manager.h" @@ -24,15 +27,35 @@ public: BadGuy(); ~BadGuy(); - //virtual void action_activated(float elapsed_time); - + /** Called when the badguy is drawn. The default implementation simply draws + * the badguy sprite on screen + */ virtual void draw(DrawingContext& context); + /** Called each frame. The default implementation checks badguy state and + * calls active_action and inactive_action + */ virtual void action(float elapsed_time); + /** Called when a collision with another object occured. The default + * implemetnation calls collision_player, collision_solid, collision_badguy + * and collision_squished + */ virtual HitResponse collision(GameObject& other, const CollisionHit& hit); + /** Set the badguy to kill/falling state, which makes him falling of the + * screen (his sprite is turned upside-down) + */ virtual void kill_fall(); + Vector get_start_position() const + { + return start_position; + } + void set_start_position(const Vector& vec) + { + start_position = vec; + } + protected: enum State { STATE_INIT, @@ -41,17 +64,25 @@ protected: STATE_SQUISHED, STATE_FALLING }; - + + /** Called when the badguy collided with a player */ 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); + /** Called when the badguy collided with another badguy */ 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 + */ virtual bool collision_squished(Player& player); + /** called each frame when the badguy is activated. */ virtual void active_action(float elapsed_time); + /** called each frame when the badguy is not activated. */ virtual void inactive_action(float elapsed_time); /** @@ -59,7 +90,7 @@ protected: * variable might have been changed so that it faces towards the player. */ virtual void activate(); - /** caleed when the badguy has been deactivated */ + /** called when the badguy has been deactivated */ virtual void deactivate(); void kill_squished(Player& player); @@ -84,11 +115,15 @@ protected: * initial position of the enemy. Also the position where enemy respawns when * after being deactivated. */ + bool is_offscreen(); + Vector start_position; Direction dir; + + int hitpoints; + int bullet_hitpoints; private: - bool is_offscreen(); void try_activate(); State state;