summaryrefslogtreecommitdiff
path: root/src/game.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.c')
-rw-r--r--src/game.c45
1 files changed, 31 insertions, 14 deletions
diff --git a/src/game.c b/src/game.c
index 55b65c2..8659939 100644
--- a/src/game.c
+++ b/src/game.c
@@ -8,23 +8,10 @@
#include "player.h"
#include "background.h"
#include <math.h>
+#include "utils.h"
Game game;
-static inline bool ShouldDrawEntity(const Entity* e, DrawLayer layerDrawing) {
- return EntityAllocated(e)
- && (e->flags & ENTITY_VISIBLE);
-}
-
-static inline Rectangle GetSpriteDrawDestinationRectGlobal(const Entity* e, int spriteIndex) {
- Rectangle destRectGlobal = e->sprites[spriteIndex].destRect;
-
- destRectGlobal.x += e->position.x;
- destRectGlobal.y += e->position.y;
-
- return destRectGlobal;
-}
-
void AddEntity(Entity* e) {
static int nextId = 0;
@@ -158,3 +145,33 @@ void AddWall(float xpos, float ypos, float width, float height) {
AddEntity(&wall);
}
+
+static inline float GetCurrentFrameTime(const Animation* animation) {
+ return animation->frameTimes[animation->currentFrame];
+}
+
+void UpdateCurrentSpriteAnimation(Sprite* sprite, float dt) {
+ if (!IsAnimated(sprite))
+ return;
+
+ Animation* currentAnimation = GetCurrentAnimation(sprite);
+
+ if (currentAnimation->isComplete)
+ return;
+
+ currentAnimation->currentFrameTimer += dt;
+
+ if (currentAnimation->currentFrameTimer >= GetCurrentFrameTime(currentAnimation)) {
+ currentAnimation->currentFrame++;
+ currentAnimation->currentFrameTimer = 0;
+ }
+
+ if (currentAnimation->currentFrame >= currentAnimation->numFrames) {
+ if (currentAnimation->isLooping)
+ currentAnimation->currentFrame = 0;
+ else {
+ currentAnimation->currentFrame = currentAnimation->numFrames - 1;
+ currentAnimation->isComplete = true;
+ }
+ }
+}