qmax patch to fix bug #0000389 - colors in infoblocks
[supertux.git] / src / sprite / sprite.cpp
index 7b81827..20c11fb 100644 (file)
@@ -41,7 +41,7 @@ Sprite::Sprite(SpriteData& newdata)
   action = data.get_action("normal");
   if(!action)
     action = data.actions.begin()->second;
-  last_ticks = real_time;
+  last_ticks = game_time;
 }
 
 Sprite::Sprite(const Sprite& other)
@@ -51,7 +51,7 @@ Sprite::Sprite(const Sprite& other)
     color(1.0f, 1.0f, 1.0f, 1.0f),
     action(other.action)
 {
-  last_ticks = real_time;
+  last_ticks = game_time;
 }
 
 Sprite::~Sprite()
@@ -75,6 +75,28 @@ Sprite::set_action(const std::string& name, int loops)
   frame = 0;
 }
 
+void
+Sprite::set_action_continued(const std::string& name)
+{
+  if(action && action->name == name)
+    return;
+
+  SpriteData::Action* newaction = data.get_action(name);
+  if(!newaction) {
+    log_debug << "Action '" << name << "' not found." << std::endl;
+    return;
+  }
+
+  action = newaction;
+  if(frame >= get_frames()) {
+    frame = fmodf(frame, get_frames());
+
+    if (animation_loops > 0) animation_loops--;
+    if(animation_done())
+      frame = get_frames()-1;
+  }
+}
+
 bool
 Sprite::animation_done()
 {
@@ -87,8 +109,8 @@ Sprite::update()
   if(animation_done())
     return;
 
-  float frame_inc = action->fps * (real_time - last_ticks);
-  last_ticks = real_time;
+  float frame_inc = action->fps * (game_time - last_ticks);
+  last_ticks = game_time;
 
   frame += frame_inc;