game->camera) < 0) {
return -1;
}
+
+ level_editor_update(game->level_editor, delta_time);
} break;
case GAME_STATE_PAUSE:
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);
case SDLK_TAB: {
game->state = GAME_STATE_LEVEL_EDITOR;
- SDL_SetRelativeMouseMode(true);
} break;
}
} break;
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)
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;