Cyrillic fonts from qMax <qwiglydee@gmail.com>
[supertux.git] / src / sprite / sprite.hpp
index 9c138e2..cf44de7 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
 {
@@ -44,7 +47,14 @@ public:
       const Vector& size, const Vector& pos, int layer);
 
   /** Set action (or state) */
-  void set_action(const std::string& act, int loops = -1);
+  void set_action(const std::string& name, int loops = -1);
+
+  /** Set action (or state), but keep current frame number, loop counter, etc. */
+  void set_action_continued(const std::string& name);
+
+  /** 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);
@@ -78,20 +88,36 @@ public:
   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();
@@ -99,11 +125,13 @@ private:
   SpriteData& data;
 
   float frame;
-  int animation_loops;
+  int   animation_loops;
   float last_ticks;
+  float angle;
+  Color color;
+  Blend blend;
 
   SpriteData::Action* action;
 };
 
 #endif
-