projects
/
supertux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added message when no action is found.
[supertux.git]
/
lib
/
special
/
sprite.cpp
diff --git
a/lib/special/sprite.cpp
b/lib/special/sprite.cpp
index
be2b81f
..
6659c48
100644
(file)
--- a/
lib/special/sprite.cpp
+++ b/
lib/special/sprite.cpp
@@
-98,17
+98,25
@@
Sprite::init_defaults(Action* act)
void
Sprite::set_action(std::string act)
{
void
Sprite::set_action(std::string act)
{
+if(!next_action.empty() && animation_loops > 0)
+ {
+ next_action = act;
+ return;
+ }
Actions::iterator i = actions.find(act);
Actions::iterator i = actions.find(act);
+if(i == actions.end())
+ {
+ std::cerr << "Warning: Action '" << act << "' not found on Sprite '" << name << "'\n";
+ return;
+ }
action = i->second;
}
void
action = i->second;
}
void
-Sprite::start_animation(int loops
, std::string next_act
)
+Sprite::start_animation(int loops)
{
reset();
animation_loops = loops;
{
reset();
animation_loops = loops;
-if(!next_act.empty())
- next_action = next_act;
}
void
}
void
@@
-116,7
+124,7
@@
Sprite::reset()
{
frame = 0;
last_tick = SDL_GetTicks();
{
frame = 0;
last_tick = SDL_GetTicks();
-animation_reversed =
tru
e;
+animation_reversed =
fals
e;
next_action.clear();
}
next_action.clear();
}
@@
-127,9
+135,9
@@
return animation_loops;
}
void
}
void
-Sprite::reverse_animation()
+Sprite::reverse_animation(
bool reverse
)
{
{
-animation_reversed =
!animation_reversed
;
+animation_reversed =
reverse
;
if(animation_reversed)
frame = get_frames()-1;
if(animation_reversed)
frame = get_frames()-1;
@@
-144,24
+152,23
@@
if(animation_loops == 0)
return;
float frame_inc = (action->fps/1000.0) * (SDL_GetTicks() - last_tick);
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;
if(animation_reversed)
frame -= frame_inc;
else
frame += frame_inc;
-last_tick = SDL_GetTicks();
-
if(animation_reversed)
{
float excedent = frame - 0;
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--;
{ // 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);
{
set_action(next_action);
start_animation(-1);
@@
-175,13
+182,13
@@
if(animation_reversed)
else
{
float excedent = frame - action->surfaces.size();
else
{
float excedent = frame - action->surfaces.size();
- if(excedent >= 0)
+ if(
(int)
excedent >= 0)
{
frame = 0;
if(animation_loops > 0)
{
animation_loops--;
{
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);
{
set_action(next_action);
start_animation(-1);