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)
color(1.0f, 1.0f, 1.0f, 1.0f),
action(other.action)
{
- last_ticks = real_time;
+ last_ticks = game_time;
}
Sprite::~Sprite()
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()
{
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;