Changed Yeti behaviour. You must stun him (jump on him) when is under a falling stala...
[supertux.git] / src / badguy / badguy.h
index 075b025..bb31e71 100644 (file)
@@ -11,6 +11,7 @@
 #include "serializable.h"
 #include "resources.h"
 #include "sector.h"
+#include "direction.h"
 #include "object_factory.h"
 #include "lisp/parser.h"
 #include "lisp/lisp.h"
@@ -26,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,
@@ -43,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);
 
   /**
@@ -91,6 +120,8 @@ protected:
   Vector start_position;
 
   Direction dir;
+
+  int hitpoints;
 private:
   void try_activate();