{
frame = 0;
last_tick = SDL_GetTicks();
-animation_reversed = true;
+animation_reversed = false;
next_action.clear();
}
}
void
-Sprite::reverse_animation()
+Sprite::reverse_animation(bool reverse)
{
-animation_reversed = !animation_reversed;
+animation_reversed = reverse;
if(animation_reversed)
frame = get_frames()-1;
return;
float frame_inc = (action->fps/1000.0) * (SDL_GetTicks() - last_tick);
+last_tick = SDL_GetTicks();
if(animation_reversed)
frame -= frame_inc;
else
frame += frame_inc;
-last_tick = SDL_GetTicks();
-
if(animation_reversed)
{
float excedent = frame - 0;
- if(excedent < 0 || excedent >= get_frames())
+ if((int)excedent < 0 || excedent >= get_frames())
{ // last case can happen when not used reverse_animation()
frame = get_frames() - 1;
if(animation_loops > 0)
{
animation_loops--;
- if(animation_loops == 0)
+ if(animation_loops == 0 && !next_action.empty())
{
set_action(next_action);
start_animation(-1);
else
{
float excedent = frame - action->surfaces.size();
- if(excedent >= 0)
+ if((int)excedent >= 0)
{
frame = 0;
if(animation_loops > 0)
{
animation_loops--;
- if(animation_loops == 0)
+ if(animation_loops == 0 && !next_action.empty())
{
set_action(next_action);
start_animation(-1);