Renamed code variables, as well.
[supertux.git] / lib / special / sprite.h
index e8b7937..184e2f6 100644 (file)
@@ -39,52 +39,61 @@ namespace SuperTux
         {
         std::string name;
 
-        int x_hotspot;
-        int y_hotspot;
+        int x_offset;
+        int y_offset;
 
         /** Frames per second */
         float fps;
 
-        /** Number of seconds that a frame is displayed until it is switched
-            to the next frame */
-        float frame_delay;
-
         std::vector<Surface*> surfaces;
         };
 
     public:
-      /** cur has to be a pointer to data in the form of ((x-hotspot 5)
-          (y-hotspot 10) ...) */
+      /** cur has to be a pointer to data in the form of ((x-offset 5)
+          (y-offset 10) ...) */
       Sprite(lisp_object_t* cur);
       ~Sprite();
 
-      void reset();
-
-      /** Update the sprite and process to the next frame */
-      void update(float delta);
+      /** Draw sprite, automatically calculates next frame */
       void draw(DrawingContext& context, const Vector& pos, int layer,
                 Uint32 drawing_effect = NONE_EFFECT);
-      int get_current_frame() const;
 
       /** Set action (or state) */
-      void set_action(std::string& act);
+      void set_action(std::string act);
+
+      /* Start an animation
+          -1 - for infinite
+          0  - stopped
+          1,2,3  - one, two, three times... */
+      void start_animation(int loops);
+      /* Stop animation */
+      void stop_animation()
+        { start_animation(0); }
+      /** Check if animation is stopped or not */
+      bool check_animation();
+      /** Reverse the animation */
+      void reverse_animation(bool reverse);
 
       float get_fps()
-      {
-        return action->fps;
-      } ;
+        { return action->fps; }
+      /** Get current action total frames */
       int get_frames()
-      {
-        return action->surfaces.size();
-      } ;
-
+        { return action->surfaces.size(); }
+      /** Get sprite's name */
       std::string get_name() const
-        {
-          return name;
-        }
-      int get_width() const;
-      int get_height() const;
-
+        { return name; }
+      /** Get current action name */
+      std::string get_action_name() const
+        { return action->name; }
+      int get_width();
+      int get_height();
+
+      /** Get current frame */
+      int get_frame()
+        { return (int)frame; }
+      /** Set current frame */
+      void set_frame(int frame_)
+        { if(frame_ > get_frames()) frame = 0; else frame = frame_; }
       Surface* get_frame(unsigned int frame)
       {
         if(frame < action->surfaces.size())
@@ -96,14 +105,21 @@ namespace SuperTux
       void init_defaults(Action* act);
       void parse_action(LispReader& lispreader);
 
+      void update();
+      void reset();
+
       std::string name;
 
-      float time;
+      float frame;
+      int animation_loops;
+      bool animation_reversed;
+      float last_tick;
 
       typedef std::map <std::string, Action*> Actions;
       Actions actions;
 
       Action* action;
+     std::string next_action;
     };
 
 } //namespace SuperTux