summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/animatedsprite.cpp3
-rw-r--r--src/resources/animation.cpp6
-rw-r--r--src/resources/animation.h5
-rw-r--r--src/resources/spritedef.cpp4
4 files changed, 16 insertions, 2 deletions
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<unsigned>(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<unsigned>(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);