-Started to move stuff from library back to main game
[supertux.git] / src / badguy / badguy.h
index 075b025..ecd753d 100644 (file)
@@ -1,22 +1,43 @@
+//  $Id$
+// 
+//  SuperTux
+//  Copyright (C) 2005 Matthias Braun <matze@braunis.de>
+//
+//  This program is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU General Public License
+//  as published by the Free Software Foundation; either version 2
+//  of the License, or (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+// 
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+//  02111-1307, USA.
+
 #ifndef __BADGUY_H__
 #define __BADGUY_H__
 
 // moved them here to make it less typing when implementing new badguys
 #include <math.h>
 #include "timer.h"
-#include "special/moving_object.h"
-#include "special/sprite.h"
+#include "moving_object.h"
+#include "sprite/sprite.h"
 #include "math/physic.h"
 #include "object/player.h"
 #include "serializable.h"
 #include "resources.h"
 #include "sector.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"
+#include "sprite/sprite_manager.h"
 
 using namespace SuperTux;
 
@@ -26,15 +47,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 +84,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);
 
   /**
@@ -61,7 +110,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);
@@ -91,6 +140,9 @@ protected:
   Vector start_position;
 
   Direction dir;
+
+  int hitpoints;
+  int bullet_hitpoints;
 private:
   void try_activate();