Improvements.
authorRicardo Cruz <rick2@aeiou.pt>
Sat, 14 Aug 2004 11:50:24 +0000 (11:50 +0000)
committerRicardo Cruz <rick2@aeiou.pt>
Sat, 14 Aug 2004 11:50:24 +0000 (11:50 +0000)
SVN-Revision: 1775

lib/special/sprite.cpp
lib/special/sprite.h

index d913488..f676c08 100644 (file)
@@ -150,20 +150,20 @@ else
 
 last_tick = SDL_GetTicks();
 
-if(!animation_reversed)
+if(animation_reversed)
   {
-  if((unsigned int)frame >= action->surfaces.size())
+  if((unsigned int)frame < 0)
     {
-    frame = 0;
+    frame = get_frames()-1;
     if(animation_loops > 0)
       animation_loops--;
     }
   }
 else
   {
-  if((unsigned int)frame < 0)
+  if((unsigned int)frame >= action->surfaces.size())
     {
-    frame = get_frames()-1;
+    frame = 0;
     if(animation_loops > 0)
       animation_loops--;
     }
@@ -176,8 +176,8 @@ Sprite::draw(DrawingContext& context, const Vector& pos, int layer,
 {
   update();
 
-  if((int)frame >= get_frames())
-    std::cerr << "Warning: frame higher than total frames!\n";
+  if((int)frame >= get_frames() || (int)frame < 0)
+    std::cerr << "Warning: frame higher than total frames or lower than 0!\n";
   else
     context.draw_surface(action->surfaces[(int)frame],
             pos - Vector(action->x_hotspot, action->y_hotspot), layer, drawing_effect);
index f848945..fdf83a5 100644 (file)
@@ -90,7 +90,7 @@ namespace SuperTux
         { return (int)frame; }
       /** Set current frame */
       void set_frame(int frame_)
-        { frame = frame_; }
+        { if(frame_ > get_frames()) frame = 0; else frame = frame_; }
       Surface* get_frame(unsigned int frame)
       {
         if(frame < action->surfaces.size())