diff options
Diffstat (limited to 'src/libjin/graphics/animations')
-rw-r--r-- | src/libjin/graphics/animations/je_animation.h | 3 | ||||
-rw-r--r-- | src/libjin/graphics/animations/je_animator.cpp | 41 | ||||
-rw-r--r-- | src/libjin/graphics/animations/je_animator.h | 18 |
3 files changed, 55 insertions, 7 deletions
diff --git a/src/libjin/graphics/animations/je_animation.h b/src/libjin/graphics/animations/je_animation.h index 1c8a885..4037721 100644 --- a/src/libjin/graphics/animations/je_animation.h +++ b/src/libjin/graphics/animations/je_animation.h @@ -41,6 +41,9 @@ namespace JinEngine std::vector<const Sprite*> mFrames; + /// + /// Frame per second. + /// float mSpeed; float mLoop; diff --git a/src/libjin/graphics/animations/je_animator.cpp b/src/libjin/graphics/animations/je_animator.cpp index 4528e8c..9550116 100644 --- a/src/libjin/graphics/animations/je_animator.cpp +++ b/src/libjin/graphics/animations/je_animator.cpp @@ -48,11 +48,12 @@ namespace JinEngine { if (!mIsActive || !mAnimation) return; + float interval = 1 / mSpeed; mTick += dt; uint fc = mAnimation->getFrameCount(); - while (mTick >= mSpeed) + while (mTick >= interval) { - mTick -= mSpeed; + mTick -= interval; ++mIndex; if (mLoop) mIndex %= fc; @@ -65,9 +66,9 @@ namespace JinEngine mIndex = 0; } - void Animator::render(float x, float y, float sx, float sy, float r) + void Animator::render(float x, float y, float sx, float sy, float r) const { - if (!mIsActive || !mAnimation) + if (!mAnimation) return; const Sprite* spr = mAnimation->getFrame(mIndex); if (spr) @@ -80,6 +81,38 @@ namespace JinEngine } + void Animator::setSpeed(float speed) + { + mSpeed = speed; + } + + void Animator::setDefaultSpeed() + { + if(mAnimation != nullptr) + mSpeed = mAnimation->getSpeed(); + else + { + jin_log_error("Animation is null."); + return; + } + } + + void Animator::setLoop(bool loop) + { + mLoop = loop; + } + + void Animator::setDefaultLoop() + { + if(mAnimation != nullptr) + mLoop = mAnimation->isLoop(); + else + { + jin_log_error("Animation is null."); + return; + } + } + } } }
\ No newline at end of file diff --git a/src/libjin/graphics/animations/je_animator.h b/src/libjin/graphics/animations/je_animator.h index 72d9021..ad8138d 100644 --- a/src/libjin/graphics/animations/je_animator.h +++ b/src/libjin/graphics/animations/je_animator.h @@ -1,6 +1,10 @@ #ifndef __JE_ANIMATOR_H__ #define __JE_ANIMATOR_H__ +#include <string> + +#include "../../utils/je_log.h" + #include "je_animation.h" namespace JinEngine @@ -10,7 +14,7 @@ namespace JinEngine namespace Animations { - class Animator + class Animator : public IRenderable { public: Animator(); @@ -25,13 +29,21 @@ namespace JinEngine void rewind(); - void render(float x, float y, float sx, float sy, float r); + void render(float x, float y, float sx, float sy, float r) const override; void setAnimation(const Animation* anim); void forceToFrame(uint index); - private: + void setSpeed(float speed); + + void setDefaultSpeed(); + + void setLoop(bool loop); + + void setDefaultLoop(); + + private: const Animation* mAnimation; uint mIndex; |