Parcourir la source

Click to switch worlds

- this will be removed (instead the user will collide with the exit to switch)
jblanked il y a 1 an
Parent
commit
0a24b8d751
1 fichiers modifiés avec 23 ajouts et 12 suppressions
  1. 23 12
      game/game.c

+ 23 - 12
game/game.c

@@ -1,11 +1,27 @@
 #include "game.h"
 #include "game.h"
 
 
 /****** Entities: Player ******/
 /****** Entities: Player ******/
-Level *level_tree;
-Level *level_town;
-Level *level_generic;
+Level *levels[10];
 
 
-// Forward declaration of player_desc, because it's used in player_spawn function.
+static Level *get_next_level(GameManager *manager)
+{
+    Level *current_level = game_manager_current_level_get(manager);
+    for (int i = 0; i < 10; i++)
+    {
+        if (levels[i] == current_level)
+        {
+            if (levels[i + 1] != NULL)
+            {
+                return levels[i + 1];
+            }
+            else
+            {
+                return levels[0];
+            }
+        }
+    }
+    return levels[0] ? levels[0] : game_manager_add_level(manager, generic_level("town_world", 0));
+}
 
 
 void player_spawn(Level *level, GameManager *manager)
 void player_spawn(Level *level, GameManager *manager)
 {
 {
@@ -70,9 +86,9 @@ static void player_update(Entity *self, GameManager *manager, void *context)
     // switch levels if holding OK
     // switch levels if holding OK
     if (input.held & GameKeyOk)
     if (input.held & GameKeyOk)
     {
     {
-        // game_manager_next_level_set(manager, game_manager_current_level_get(manager) == level_tree ? level_town : level_tree);
-        // furi_delay_ms(500);
-        // return;
+        game_manager_next_level_set(manager, get_next_level(manager));
+        furi_delay_ms(500);
+        return;
     }
     }
 
 
     // Clamp the player's position to stay within world bounds
     // Clamp the player's position to stay within world bounds
@@ -128,7 +144,6 @@ const EntityDescription player_desc = {
 };
 };
 
 
 /****** Game ******/
 /****** Game ******/
-Level *levels[10];
 /*
 /*
     Write here the start code for your game, for example: creating a level and so on.
     Write here the start code for your game, for example: creating a level and so on.
     Game context is allocated (game.context_size) and passed to this function, you can use it to store your game data.
     Game context is allocated (game.context_size) and passed to this function, you can use it to store your game data.
@@ -139,9 +154,6 @@ static void game_start(GameManager *game_manager, void *ctx)
     // For simplicity, we will just set it to 0.
     // For simplicity, we will just set it to 0.
     GameContext *game_context = ctx;
     GameContext *game_context = ctx;
     game_context->score = 0;
     game_context->score = 0;
-    // level_town = game_manager_add_level(game_manager, generic_level("town_world", 0));
-    // level_tree = game_manager_add_level(game_manager, generic_level("tree_world", 1));
-    // level_generic = game_manager_add_level(game_manager, generic_level("generic_world", 2));
 
 
     // open the world list from storage, then create a level for each world
     // open the world list from storage, then create a level for each world
     char file_path[128];
     char file_path[128];
@@ -152,7 +164,6 @@ static void game_start(GameManager *game_manager, void *ctx)
         FURI_LOG_E("Game", "Failed to load world list");
         FURI_LOG_E("Game", "Failed to load world list");
         levels[0] = game_manager_add_level(game_manager, generic_level("town_world", 0));
         levels[0] = game_manager_add_level(game_manager, generic_level("town_world", 0));
         levels[1] = game_manager_add_level(game_manager, generic_level("tree_world", 1));
         levels[1] = game_manager_add_level(game_manager, generic_level("tree_world", 1));
-        levels[2] = game_manager_add_level(game_manager, generic_level("generic_world", 2));
         return;
         return;
     }
     }
     for (int i = 0; i < 10; i++)
     for (int i = 0; i < 10; i++)