Animations now work better with looped/toggled/normal animations working.
This commit is contained in:
parent
8208d146de
commit
c71566048e
2 changed files with 32 additions and 19 deletions
|
|
@ -89,21 +89,30 @@ namespace components {
|
|||
}
|
||||
}
|
||||
|
||||
bool Animation::next_frame() {
|
||||
if(playing && current < frames) {
|
||||
void Animation::next_frame() {
|
||||
subframe += speed;
|
||||
current = looped ? int(subframe) % frames : int(subframe);
|
||||
} else if(toggled) {
|
||||
playing = false;
|
||||
|
||||
if(looped) {
|
||||
// it never ends so always do this
|
||||
current = int(subframe) % frames;
|
||||
return;
|
||||
}
|
||||
|
||||
current = int(subframe);
|
||||
playing = current < frames;
|
||||
|
||||
if(playing) {
|
||||
return;
|
||||
}
|
||||
|
||||
// not looped handle not_playing/playing/toggled
|
||||
if(toggled) {
|
||||
current = frames - 1;
|
||||
subframe = float(frames - 1);
|
||||
} else {
|
||||
playing = false;
|
||||
current = 0;
|
||||
subframe = 0.0f;
|
||||
}
|
||||
|
||||
return playing;
|
||||
}
|
||||
|
||||
void Animation::step(sf::Vector2f& scale_out, sf::Vector2f& pos_out, sf::IntRect& rect_out) {
|
||||
|
|
@ -111,7 +120,7 @@ namespace components {
|
|||
dbc::check(rect_out.size.y > 0, "step given rect_out with size.y <= 0, must be >");
|
||||
next_frame();
|
||||
|
||||
if(playing && !simple) {
|
||||
if(!simple) {
|
||||
rect_out.position.x = (current % frames) * frame_width;
|
||||
}
|
||||
|
||||
|
|
@ -121,7 +130,8 @@ namespace components {
|
|||
bool Animation::apply(sf::Transformable& target, sf::Vector2f pos) {
|
||||
sf::Vector2f scale{min_x, min_y};
|
||||
|
||||
if(next_frame()) {
|
||||
if(playing) {
|
||||
next_frame();
|
||||
tween(scale, pos);
|
||||
target.setPosition(pos);
|
||||
|
||||
|
|
@ -137,6 +147,7 @@ namespace components {
|
|||
sf::IntRect rect{{0,0}, {frame_width, frame_height}};
|
||||
sf::Vector2f scale{min_x, min_y};
|
||||
|
||||
if(playing) {
|
||||
step(scale, pos, rect);
|
||||
|
||||
sprite.setPosition(pos);
|
||||
|
|
@ -146,6 +157,7 @@ namespace components {
|
|||
}
|
||||
|
||||
sprite.setTextureRect(rect);
|
||||
}
|
||||
|
||||
return playing;
|
||||
}
|
||||
|
|
@ -153,7 +165,8 @@ namespace components {
|
|||
bool Animation::apply(sf::View& view_out, sf::Vector2f pos, sf::Vector2f size) {
|
||||
sf::Vector2f scale{min_x, min_y};
|
||||
|
||||
if(next_frame()) {
|
||||
if(playing) {
|
||||
next_frame();
|
||||
tween(scale, pos);
|
||||
|
||||
view_out.setCenter(pos);
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ namespace components {
|
|||
|
||||
void lerp(sf::Vector2f& scale_out, sf::Vector2f& pos_out);
|
||||
void tween(sf::Vector2f& scale_out, sf::Vector2f& pos_out);
|
||||
bool next_frame();
|
||||
void next_frame();
|
||||
|
||||
void play();
|
||||
float twitching();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue