restore trunk
[supertux.git] / src / sprite / sprite.hpp
index c8f6cb2..a3edb33 100644 (file)
 
 #include <string>
 #include <assert.h>
-#include <SDL.h>
 
-#include "video/surface.hpp"
 #include "math/vector.hpp"
+#include "math/rect.hpp"
 #include "sprite_data.hpp"
+#include "video/color.hpp"
+#include "video/drawing_context.hpp"
 
+class Surface;
 class DrawingContext;
+class Blend;
 
 class Sprite
 {
@@ -46,6 +49,10 @@ public:
   /** Set action (or state) */
   void set_action(const std::string& act, int loops = -1);
 
+  /** Set number of animation cycles until animation stops */
+  void set_animation_loops(int loops = -1)
+  { animation_loops = loops; }
+
   /** Set framerate */
   void set_fps(float new_fps);
 
@@ -64,25 +71,50 @@ 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;
+  /** return current action's hitbox, relative to 0,0 */
+  Rect get_current_hitbox() const;
+
+  /** Set the angle of the sprite rotation in degree */
+  void set_angle(float angle);
+
+  /** Get the angle of the sprite rotation in degree */
+  float get_angle() const;
+
+  void set_color(const Color& color);
+
+  Color get_color() const;
+
+  void set_blend(const Blend& blend);
+
+  Blend get_blend() const;
+
   /** Get current frame */
   int get_frame() const
   { return (int)frame; }
   /** Set current frame */
   void set_frame(int frame)
-  { 
-    this->frame = (frame % get_frames()); 
+  {
+    this->frame = (float) (frame % get_frames());
   }
   Surface* get_frame(unsigned int frame)
   {
     assert(frame < action->surfaces.size());
     return action->surfaces[frame];
-  }    
+  }
 
 private:
   void update();
@@ -90,11 +122,13 @@ private:
   SpriteData& data;
 
   float frame;
-  int animation_loops;
-  Uint32 last_ticks;
+  int   animation_loops;
+  float last_ticks;
+  float angle;
+  Color color;
+  Blend blend;
 
   SpriteData::Action* action;
 };
 
 #endif
-