aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/animations
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics/animations')
-rw-r--r--src/libjin/graphics/animations/je_animation.h3
-rw-r--r--src/libjin/graphics/animations/je_animator.cpp41
-rw-r--r--src/libjin/graphics/animations/je_animator.h18
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;