From 918e73c30659fad8e32041e56557adb0705eabe5 Mon Sep 17 00:00:00 2001 From: Sara Date: Wed, 22 Nov 2023 13:57:27 +0100 Subject: [PATCH] split animation frame and facing direction --- game/src/player.c | 13 +++++++++---- game/src/player.h | 3 +++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/game/src/player.c b/game/src/player.c index 0994d31..029dd97 100644 --- a/game/src/player.c +++ b/game/src/player.c @@ -11,11 +11,13 @@ Player* MakePlayer() { *self = (Player){ .transform = IdentityTransform, + .faceDirection = 0, .animationStateMachine = state_machine_init(self, PlayerIdle()), + .animFrame = 0, .sprite = sprite_from_spritesheet(walk, 0), .stand = idle, .walk = walk, - .animFrameInterval = 1.0f/8.0f, + .animFrameInterval = 1.0f/4.0f, .animFrameTimer = 0.0f, }; @@ -34,7 +36,9 @@ Player* SpawnPlayer(Vector location) { void PlayerStart(Player* self) {} -void PlayerUpdate(Player* self, float deltaTime) {} +void PlayerUpdate(Player* self, float deltaTime) { + state_machine_update(self->animationStateMachine, deltaTime); +} void PlayerDestroy(Player* self) { state_machine_destroy(self->animationStateMachine); @@ -59,11 +63,12 @@ const State* PlayerAnimationUpdate(Player* self, float deltaTime) { self->animFrameTimer += deltaTime; if (self->animFrameTimer > self->animFrameInterval) { - size_t nextFrame = sprite_get_tile(self->sprite) + 1; + self->animFrameTimer = 0.f; + size_t nextFrame = self->animFrame + 8; sprite_set_tile(self->sprite, nextFrame); if (nextFrame > spritesheet_get_tile_count(sprite_get_spritesheet(self->sprite))) { - return PlayerIdle(); // TODO! + return PlayerIdle(); } } diff --git a/game/src/player.h b/game/src/player.h index 4e23ac5..23c5531 100644 --- a/game/src/player.h +++ b/game/src/player.h @@ -11,8 +11,11 @@ typedef struct Player { Transform transform; + + unsigned short faceDirection; StateMachine* animationStateMachine; + size_t animFrame; float animFrameTimer; float animFrameInterval;