Experimented with loading hitbox from .sprite file
[supertux.git] / src / sprite / sprite.hpp
index 1c16632..9c138e2 100644 (file)
@@ -1,7 +1,7 @@
 //  $Id$
-// 
+//
 //  SuperTux
-//  Copyright (C) 2004 Ingo Ruhnke <grumbel@gmx.de>
+//  Copyright (C) 2006 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
@@ -12,7 +12,7 @@
 //  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.
@@ -46,11 +46,14 @@ public:
   /** Set action (or state) */
   void set_action(const std::string& act, int loops = -1);
 
+  /** Set framerate */
+  void set_fps(float new_fps);
+
   /* Stop animation */
   void stop_animation()
   { animation_loops = 0; }
   /** Check if animation is stopped or not */
-  bool check_animation();
+  bool animation_done();
 
   float get_fps() const
   { return action->fps; }
@@ -61,18 +64,29 @@ public:
   const std::string& get_name() const
   { return data.name; }
   /** Get current action name */
-  const std::string& get_action_name() const
+  const std::string& get_action() const
   { return action->name; }
 
   int get_width() const;
   int get_height() const;
 
+  /** return x-offset of current action's hitbox, relative to start of image */
+  float get_current_hitbox_x_offset() const;
+  /** return y-offset of current action's hitbox, relative to start of image */
+  float get_current_hitbox_y_offset() const;
+  /** return width of current action's hitbox */
+  float get_current_hitbox_width() const;
+  /** return height of current action's hitbox */
+  float get_current_hitbox_height() const;
+
   /** Get current frame */
   int get_frame() const
   { return (int)frame; }
   /** Set current frame */
-  void set_frame(int frame_)
-  { if(frame_ > get_frames()) frame = 0; else frame = frame_; }
+  void set_frame(int frame)
+  { 
+    this->frame = (frame % get_frames()); 
+  }
   Surface* get_frame(unsigned int frame)
   {
     assert(frame < action->surfaces.size());
@@ -86,7 +100,7 @@ private:
 
   float frame;
   int animation_loops;
-  Uint32 last_ticks;
+  float last_ticks;
 
   SpriteData::Action* action;
 };