From a199f1aa431f872bc13c5df5a9afad0e52a1ee1d Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 27 Mar 2012 19:23:52 +0300 Subject: Add pause animation tag. Example: --- src/animatedsprite.cpp | 3 ++- src/resources/animation.cpp | 6 ++++++ src/resources/animation.h | 5 ++++- src/resources/spritedef.cpp | 4 ++++ 4 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/animatedsprite.cpp b/src/animatedsprite.cpp index 6b791fdd4..136bea946 100644 --- a/src/animatedsprite.cpp +++ b/src/animatedsprite.cpp @@ -146,7 +146,8 @@ bool AnimatedSprite::updateCurrentAnimation(unsigned int time) mFrameTime += time; while ((mFrameTime > static_cast(mFrame->delay) - && mFrame->delay > 0) || mFrame->type != Frame::ANIMATION) + && mFrame->delay > 0) || (mFrame->type != Frame::ANIMATION + && mFrame->type != Frame::PAUSE)) { bool fail(true); mFrameTime -= static_cast(mFrame->delay); diff --git a/src/resources/animation.cpp b/src/resources/animation.cpp index 388c1301e..853b79d64 100644 --- a/src/resources/animation.cpp +++ b/src/resources/animation.cpp @@ -70,6 +70,12 @@ void Animation::addGoto(std::string name, int rand) mFrames.push_back(frame); } +void Animation::addPause(int delay, int rand) +{ + Frame frame = { nullptr, delay, 0, 0, rand, Frame::PAUSE, "" }; + mFrames.push_back(frame); +} + void Animation::setLastFrameDelay(int delay) { FramesRevIter it = mFrames.rbegin(); diff --git a/src/resources/animation.h b/src/resources/animation.h index 53e9adbea..1d23b1608 100644 --- a/src/resources/animation.h +++ b/src/resources/animation.h @@ -40,7 +40,8 @@ struct Frame ANIMATION = 0, JUMP, GOTO, - LABEL + LABEL, + PAUSE }; Image *image; int delay; @@ -102,6 +103,8 @@ class Animation void addGoto(std::string name, int rand); + void addPause(int delay, int rand); + void setLastFrameDelay(int delay); /** diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index 02b46f1cf..a4ebc6f7e 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -340,6 +340,10 @@ void SpriteDef::loadAnimation(XmlNodePtr animationNode, repeat --; } } + else if (xmlNameEqual(frameNode, "pause")) + { + animation->addPause(delay, rand); + } else if (xmlNameEqual(frameNode, "end")) { animation->addTerminator(rand); -- cgit v1.2.3-70-g09d2