Просмотр исходного кода

update player traits based on xp

jblanked 1 год назад
Родитель
Сommit
8ad898d18d
1 измененных файлов с 29 добавлено и 0 удалено
  1. 29 0
      game/player.c

+ 29 - 0
game/player.c

@@ -21,6 +21,26 @@ static Level *get_next_level(GameManager *manager)
     return game_context->levels[game_context->current_level];
 }
 
+// Define constants for XP scaling
+#define XP_BASE 100          // Base XP for level 2
+#define XP_GROWTH_FACTOR 1.5 // Growth factor per level
+#define MAX_LEVEL 100        // Maximum level supported
+
+// Function to get the current level based on XP iteratively
+int get_player_level_iterative(uint32_t xp)
+{
+    int level = 1;
+    uint32_t xp_required = XP_BASE;
+
+    while (level < MAX_LEVEL && xp >= xp_required)
+    {
+        level++;
+        xp_required = (uint32_t)(xp_required * XP_GROWTH_FACTOR);
+    }
+
+    return level;
+}
+
 void player_spawn(Level *level, GameManager *manager)
 {
     if (!level || !manager)
@@ -94,12 +114,21 @@ void player_spawn(Level *level, GameManager *manager)
 
         return;
     }
+
     // Load player sprite (we'll add this to the JSON later when players can choose their sprite)
     player_context->sprite_right = game_manager_sprite_load(manager, "player_right_axe_15x11px.fxbm");
     player_context->sprite_left = game_manager_sprite_load(manager, "player_left_axe_15x11px.fxbm");
 
     player_context->start_position = entity_pos_get(game_context->player);
 
+    // Update player stats based on XP using iterative method
+    // Determine the player's level based on XP
+    player_context->level = get_player_level_iterative(player_context->xp);
+
+    // Update strength and max health based on the new level
+    player_context->strength = 10 + (player_context->level * 5);           // 5 strength per level
+    player_context->max_health = 100 + ((player_context->level - 1) * 10); // 10 health per level
+
     // Assign loaded player context to game context
     game_context->player_context = player_context;
 }