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

reset health/position on death + reorganize assets

jblanked 1 год назад
Родитель
Сommit
02bf71f9b5
6 измененных файлов с 11 добавлено и 5 удалено
  1. 2 2
      application.fam
  2. 0 0
      file_assets/sprites/player_left.fxbm
  3. 0 0
      file_assets/sprites/player_right.fxbm
  4. 6 3
      game/enemy.c
  5. 2 0
      game/game.c
  6. 1 0
      game/game.h

+ 2 - 2
application.fam

@@ -8,10 +8,10 @@ App(
     fap_category="GPIO",
     fap_description="The first open-world multiplayer game, best played with the VGM.", 
     fap_icon_assets="assets",
-    fap_file_assets="assets", 
+    fap_file_assets="file_assets", 
     fap_extbuild=(
         ExtFile(
-            path="${FAP_SRC_DIR}/assets",
+            path="${FAP_SRC_DIR}/file_assets",
             command="${PYTHON3} ${FAP_SRC_DIR}/engine/scripts/sprite_builder.py ${FAP_SRC_DIR.abspath}/sprites ${TARGET.abspath}/sprites",
         ),
     ),

+ 0 - 0
assets/sprites/player_left.fxbm → file_assets/sprites/player_left.fxbm


+ 0 - 0
assets/sprites/player_right.fxbm → file_assets/sprites/player_right.fxbm


+ 6 - 3
game/enemy.c

@@ -143,7 +143,6 @@ static void enemy_render(Entity *self, GameManager *manager, Canvas *canvas, voi
 // Enemy collision function
 static void enemy_collision(Entity *self, Entity *other, GameManager *manager, void *context)
 {
-    // Ensure that 'self', 'other', and 'context' are valid
     if (!self || !other || !context)
     {
         FURI_LOG_E("Game", "Enemy collision: Invalid parameters");
@@ -189,13 +188,17 @@ static void enemy_collision(Entity *self, Entity *other, GameManager *manager, v
             {
                 if (game_context->player_context->health <= 0)
                 {
-                    FURI_LOG_I("Game", "Player is dead");
+                    FURI_LOG_I("Game", "Player is dead.. resetting player position and health");
                     game_context->player_context->state = PLAYER_DEAD;
+
+                    // reset player position and health
+                    entity_pos_set(other, game_context->player_context->start_position);
+                    game_context->player_context->health = 100;
                 }
                 else
                 {
-                    game_context->player_context->health -= enemy_context->strength;
                     FURI_LOG_I("Game", "Player took %f damage from enemy '%s'", (double)enemy_context->strength, enemy_context->id);
+                    game_context->player_context->health -= enemy_context->strength;
                 }
             }
             else

+ 2 - 0
game/game.c

@@ -25,6 +25,7 @@ void player_spawn(Level *level, GameManager *manager)
     game_context->players[0] = level_add_entity(level, &player_desc);
 
     // Set player position.
+
     // Depends on your game logic, it can be done in start entity function, but also can be done here.
     entity_pos_set(game_context->players[0], (Vector){WORLD_WIDTH / 2, WORLD_HEIGHT / 2});
 
@@ -43,6 +44,7 @@ void player_spawn(Level *level, GameManager *manager)
     player_context->strength = 10;
     player_context->level = 1;
     player_context->xp = 0;
+    player_context->start_position = entity_pos_get(game_context->players[0]);
 
     game_context->player_context = player_context;
 }

+ 1 - 0
game/game.h

@@ -29,6 +29,7 @@ typedef struct
 {
     PlayerDirection direction; // direction the player is facing
     PlayerState state;         // current state of the player
+    Vector start_position;     // starting position of the player
     Sprite *sprite_right;      // player sprite looking right
     Sprite *sprite_left;       // player sprite looking left
     int8_t dx;                 // x direction