diff options
| author | BoredGuy <osome3717@gmail.com> | 2025-09-10 18:02:05 +0300 |
|---|---|---|
| committer | BoredGuy <osome3717@gmail.com> | 2025-09-10 18:02:05 +0300 |
| commit | 1418b5ade374a58bfdf2e3dfee8a4263d642442f (patch) | |
| tree | 83127530ce88e66badd8b9935c132dfead790ed4 /src | |
| parent | 20f5d0944c12d1569d4a875782871f724463b8ed (diff) | |
Player module update
Diffstat (limited to 'src')
| -rw-r--r-- | src/game.c | 5 | ||||
| -rw-r--r-- | src/player.c | 59 |
2 files changed, 48 insertions, 16 deletions
@@ -243,14 +243,13 @@ void UpdateCurrentSpriteAnimation(Sprite* sprite, float dt) { if (currentAnimation->currentFrameTimer >= GetCurrentFrameTime(currentAnimation)) { currentAnimation->currentFrame++; - currentAnimation->currentFrameTimer = - currentAnimation->currentFrameTimer - GetCurrentFrameTime(currentAnimation); + currentAnimation->currentFrameTimer -= GetCurrentFrameTime(currentAnimation); } if (currentAnimation->currentFrame >= currentAnimation->numFrames) { if (currentAnimation->isLooping) { currentAnimation->currentFrame = 0; - currentAnimation->currentFrameTimer = 0.0f; + currentAnimation->currentFrameTimer -= GetCurrentFrameTime(currentAnimation); } else { currentAnimation->currentFrame = currentAnimation->numFrames - 1; diff --git a/src/player.c b/src/player.c index 20aa62a..05d3546 100644 --- a/src/player.c +++ b/src/player.c @@ -11,9 +11,6 @@ extern Game game; static void AddPlayerSprites(Entity* player); -static inline Sprite* GetBodySprite(Entity* player) { - return &player->sprites[player->bodySpriteIndex]; -} typedef enum PlayerStates { PLAYER_IDLE = 0, @@ -43,12 +40,11 @@ Vector2 GetMovementDirection() { } void CameraFollow(const Entity* player) { - game.camera.target = - (Vector2) {fmaxf(WINDOW_WIDTH / 2.0f, player->position.x), 0.0f}; + game.camera.target.x = fmaxf(WINDOW_WIDTH / 2.0f, player->position.x); } void UpdateBodyFacing(Entity* player) { - Sprite* bodySprite = GetBodySprite(player); + Sprite* bodySprite = &player->sprites[player->bodySpriteIndex]; if (player->velocity.x < 0) bodySprite->flipX = true; @@ -56,27 +52,62 @@ void UpdateBodyFacing(Entity* player) { bodySprite->flipX = false; } +bool CanAttack(Entity* player) { + return player->state == PLAYER_IDLE + || player->state == PLAYER_WALKING; +} + +bool CanMove(Entity* player) { + return player->state == PLAYER_IDLE + || player->state == PLAYER_WALKING; +} + void HandleMovement(Entity* player) { - Sprite* bodySprite = GetBodySprite(player); + if (CanMove(player)) { + if (Vector2Length(player->velocity) > 0.0) + player->state = PLAYER_WALKING; + else + player->state = PLAYER_IDLE; + } else { + player->velocity = (Vector2) {0.0f, 0.0f}; + } +} - if (Vector2Length(player->velocity) > 0.0) - bodySprite->currentAnimation = PLAYER_WALKING; - else - bodySprite->currentAnimation = PLAYER_IDLE; +void HandleAttack(Entity* player) { + if (player->state != PLAYER_ATTACK) { + player->numHitBoxes = 0; + return; + } + + Sprite* bodySprite = &player->sprites[player->bodySpriteIndex]; + + if (bodySprite->animations[PLAYER_ATTACK].isComplete) { + player->state = PLAYER_IDLE; + ResetAnimation(&bodySprite->animations[PLAYER_ATTACK]); + } } void HandleInput(Entity* player) { player->velocity = Vector2Scale(GetMovementDirection(), PLAYER_SPEED); + + if (IsKeyPressed(KEY_O) && CanAttack(player)) + player->state = PLAYER_ATTACK; +} + +void HandleAnimation(Entity* player) { + Sprite* bodySprite = &player->sprites[player->bodySpriteIndex]; + + bodySprite->currentAnimation = player->state; } void UpdateAnimation(Entity* player, float deltaTime) { - Sprite* bodySprite = GetBodySprite(player); + Sprite* bodySprite = &player->sprites[player->bodySpriteIndex]; UpdateCurrentSpriteAnimation(bodySprite, deltaTime); } void FlipBody(Entity* player) { - Sprite* bodySprite = GetBodySprite(player); + Sprite* bodySprite = &player->sprites[player->bodySpriteIndex]; if (player->velocity.x < 0) { bodySprite->flipX = true; @@ -90,7 +121,9 @@ void UpdatePlayer(Entity* player, float deltaTime) { HandleMovement(player); FlipBody(player); MoveAndStop(player, deltaTime); + HandleAnimation(player); UpdateAnimation(player, deltaTime); + HandleAttack(player); CameraFollow(player); } |
