]> git.lizzy.rs Git - nothing.git/blobdiff - src/game.c
Merge pull request #1009 from The-Renaissance/master
[nothing.git] / src / game.c
index bd8687fcfe6290ccebb0df5ba633f3aa15b0a0a0..6f989a1057109e8b4d96a0af5a7470ce2484d9ce 100644 (file)
@@ -299,6 +299,8 @@ int game_update(Game *game, float delta_time)
                 game->camera) < 0) {
             return -1;
         }
+
+        level_editor_update(game->level_editor, delta_time);
     } break;
 
     case GAME_STATE_PAUSE:
@@ -343,7 +345,12 @@ static int game_event_running(Game *game, const SDL_Event *event)
     case SDL_KEYDOWN: {
         switch (event->key.keysym.sym) {
         case SDLK_r: {
-            const char *level_filename = level_picker_selected_level(game->level_picker);
+            const char *level_filename = game->level_editor->file_name;
+
+            if (!level_filename) {
+                log_warn("Could not reload the level. There is no associated file.\n");
+                return 0;
+            }
 
             log_info("Reloading the level from '%s'...\n", level_filename);
 
@@ -385,7 +392,6 @@ static int game_event_running(Game *game, const SDL_Event *event)
 
         case SDLK_TAB: {
             game->state = GAME_STATE_LEVEL_EDITOR;
-            SDL_SetRelativeMouseMode(true);
         } break;
         }
     } break;
@@ -429,7 +435,53 @@ static int game_event_level_picker(Game *game, const SDL_Event *event)
     trace_assert(game);
     trace_assert(event);
 
-    return level_picker_event(game->level_picker, event);
+    switch (event->type) {
+    case SDL_KEYDOWN: {
+        switch(event->key.keysym.sym) {
+        case SDLK_n: {
+            if (game->level_editor == NULL) {
+                game->level_editor = PUSH_LT(
+                    game->lt,
+                    create_level_editor(),
+                    destroy_level_editor);
+            } else {
+                game->level_editor = RESET_LT(
+                    game->lt,
+                    game->level_editor,
+                    create_level_editor());
+            }
+
+            if (game->level_editor == NULL) {
+                return -1;
+            }
+
+            if (game->level == NULL) {
+                game->level = PUSH_LT(
+                    game->lt,
+                    create_level_from_level_editor(
+                        game->level_editor,
+                        game->broadcast),
+                    destroy_level);
+            } else {
+                game->level = RESET_LT(
+                    game->lt,
+                    game->level,
+                    create_level_from_level_editor(
+                        game->level_editor,
+                        game->broadcast));
+            }
+
+            if (game->level == NULL) {
+                return -1;
+            }
+
+            game->state = GAME_STATE_RUNNING;
+        } break;
+        }
+    } break;
+    }
+
+    return level_picker_event(game->level_picker, event, game->camera);
 }
 
 static int game_event_level_editor(Game *game, const SDL_Event *event)
@@ -451,16 +503,6 @@ static int game_event_level_editor(Game *game, const SDL_Event *event)
                 return -1;
             }
             game->state = GAME_STATE_RUNNING;
-            SDL_SetRelativeMouseMode(false);
-        } break;
-
-        case SDLK_s: {
-            /* TODO: There is no indication that the level is saved when you press S in Level Editor */
-            /* TODO: Game in LevelEditor mode does not check that the saved level file is modified by external program */
-            const char *level_filename = level_picker_selected_level(game->level_picker);
-            if (level_editor_dump(game->level_editor, level_filename) < 0) {
-                return -1;
-            }
         } break;
         }
     } break;