summaryrefslogtreecommitdiff
path: root/src/animation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/animation.cpp')
-rw-r--r--src/animation.cpp127
1 files changed, 9 insertions, 118 deletions
diff --git a/src/animation.cpp b/src/animation.cpp
index 98a4abb8..67fdae11 100644
--- a/src/animation.cpp
+++ b/src/animation.cpp
@@ -27,138 +27,29 @@
#include "utils/dtor.h"
-Animation::Animation()
+Animation::Animation():
+ mDuration(0)
{
- reset();
}
void
-Animation::reset()
+Animation::addPhase(Image *image, unsigned int delay, int offsetX, int offsetY)
{
- mTime = 0;
- iCurrentPhase = mAnimationPhases.begin();
-}
-
-
-bool
-Animation::update(unsigned int time)
-{
- mTime += time;
- if (mAnimationPhases.empty())
- return true;
- if (isTerminator(*iCurrentPhase))
- return false;
-
- unsigned int delay = iCurrentPhase->delay;
-
- while (mTime > delay)
- {
- if (!delay)
- return true;
- mTime -= delay;
- iCurrentPhase++;
- if (iCurrentPhase == mAnimationPhases.end())
- {
- iCurrentPhase = mAnimationPhases.begin();
- }
- if (isTerminator(*iCurrentPhase))
- return false;
- delay = iCurrentPhase->delay;
- }
- return true;
-}
-
-
-int
-Animation::getCurrentPhase() const
-{
- return mAnimationPhases.empty() ? -1 : iCurrentPhase->image;
-}
-
-
-void
-Animation::addPhase(int image, unsigned int delay, int offsetX, int offsetY)
-{
- //add new phase to animation list
- AnimationPhase newPhase = { image, delay, offsetX, offsetY};
+ // Add new phase to animation list
+ AnimationPhase newPhase = { image, delay, offsetX, offsetY };
mAnimationPhases.push_back(newPhase);
- //reset animation circle
- iCurrentPhase = mAnimationPhases.begin();
+ mDuration += delay;
}
void
Animation::addTerminator()
{
- AnimationPhase terminator = { -1, 0, 0, 0};
- mAnimationPhases.push_back(terminator);
- iCurrentPhase = mAnimationPhases.begin();
+ addPhase(NULL, 0, 0, 0);
}
bool
-Animation::isTerminator(AnimationPhase candidate)
-{
- return (candidate.image < 0);
-}
-
-int
-Animation::getLength()
-{
- if (mAnimationPhases.empty())
- return 0;
-
- std::list<AnimationPhase>::iterator i;
- int length = 0;
- for (i = mAnimationPhases.begin(); i != mAnimationPhases.end(); i++)
- {
- length += i->delay;
- }
- return length;
-}
-
-Action::Action():
- mSpriteset(NULL)
-{
-}
-
-Action::~Action()
-{
- std::for_each(mAnimations.begin(), mAnimations.end(), make_dtor(mAnimations));
- mAnimations.clear();
-}
-
-Animation*
-Action::getAnimation(int direction) const
-{
- Animations::const_iterator i = mAnimations.find(direction);
-
- // When the direction isn't defined, try the default
- if (i == mAnimations.end())
- {
- i = mAnimations.find(0);
- }
-
- return (i == mAnimations.end()) ? NULL : i->second;
-}
-
-void
-Action::setAnimation(int direction, Animation *animation)
-{
- // Set first direction as default direction
- if (mAnimations.empty())
- {
- mAnimations[0] = animation;
- }
-
- mAnimations[direction] = animation;
-}
-
-void
-Action::reset()
+Animation::isTerminator(const AnimationPhase candidate)
{
- for (AnimationIterator i = mAnimations.begin();
- i != mAnimations.end(); ++i)
- {
- i->second->reset();
- }
+ return (candidate.image == NULL);
}