Browse Source

update player during game + fix enemy state

jblanked 11 months ago
parent
commit
be2be37bff
2 changed files with 21 additions and 16 deletions
  1. 1 1
      game/enemy.c
  2. 20 15
      game/player.c

+ 1 - 1
game/enemy.c

@@ -437,7 +437,7 @@ static void enemy_update(Entity *self, GameManager *manager, void *context)
         Vector current_pos = entity_pos_get(self);
         if (enemy_context->state == ENTITY_ATTACKED)
         {
-            enemy_context->state = current_pos.x > (enemy_context->start_position.x - enemy_context->end_position.x) ? ENTITY_MOVING_TO_END : ENTITY_MOVING_TO_START;
+            enemy_context->state = current_pos.x < (enemy_context->start_position.x - enemy_context->end_position.x) ? ENTITY_MOVING_TO_END : ENTITY_MOVING_TO_START;
         }
 
         // Determine the target position based on the current state

+ 20 - 15
game/player.c

@@ -43,6 +43,21 @@ static Level *next_level(GameManager *manager)
     return NULL;
 }
 
+// Update player stats based on XP using iterative method
+static int get_player_level_iterative(uint32_t xp)
+{
+    int level = 1;
+    uint32_t xp_required = 100; // Base XP for level 2
+
+    while (level < 100 && xp >= xp_required) // Maximum level supported
+    {
+        level++;
+        xp_required = (uint32_t)(xp_required * 1.5); // 1.5 growth factor per level
+    }
+
+    return level;
+}
+
 void player_spawn(Level *level, GameManager *manager)
 {
     if (!level || !manager)
@@ -135,21 +150,6 @@ void player_spawn(Level *level, GameManager *manager)
 
     pctx->start_position = entity_pos_get(game_context->player);
 
-    // Update player stats based on XP using iterative method
-    int get_player_level_iterative(uint32_t xp)
-    {
-        int level = 1;
-        uint32_t xp_required = 100; // Base XP for level 2
-
-        while (level < 100 && xp >= xp_required) // Maximum level supported
-        {
-            level++;
-            xp_required = (uint32_t)(xp_required * 1.5); // 1.5 growth factor per level
-        }
-
-        return level;
-    }
-
     // Determine the player's level based on XP
     pctx->level = get_player_level_iterative(pctx->xp);
 
@@ -214,6 +214,11 @@ static void player_update(Entity *self, GameManager *manager, void *context)
     player->old_position = pos;
     GameContext *game_context = game_manager_game_context_get(manager);
 
+    // Determine the player's level based on XP
+    player->level = get_player_level_iterative(player->xp);
+    player->strength = 10 + (player->level * 1);           // 1 strength per level
+    player->max_health = 100 + ((player->level - 1) * 10); // 10 health per level
+
     // Store previous direction
     int prev_dx = player->dx;
     int prev_dy = player->dy;