]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor.c
Remove unused macro
[nothing.git] / src / game / level / level_editor.c
index b44f48884db737078888715182368e8270811a6a..b20b2503d04b971a50fedb69e2c8458f4a61f8ea 100644 (file)
@@ -2,7 +2,6 @@
 
 #include "game/camera.h"
 #include "game/sound_samples.h"
-#include "game/level_metadata.h"
 #include "game/level/boxes.h"
 #include "game/level/level_editor/action_picker.h"
 #include "game/level/level_editor/color_picker.h"
 #include "system/log.h"
 #include "system/str.h"
 #include "config.h"
+#include "math/extrema.h"
 
 #include "level_editor.h"
 
+#define LEVEL_FOLDER_MAX_LENGTH 512
 #define LEVEL_LINE_MAX_LENGTH 512
 #define LEVEL_EDITOR_EDIT_FIELD_SIZE vec(5.0f, 5.0f)
 #define LEVEL_EDITOR_EDIT_FIELD_COLOR COLOR_BLACK
@@ -34,7 +35,7 @@ static int level_editor_dump(LevelEditor *level_editor);
 
 // TODO(#994): too much duplicate code between create_level_editor and create_level_editor_from_file
 
-LevelEditor *create_level_editor(void)
+LevelEditor *create_level_editor(Cursor *cursor)
 {
     Lt *lt = create_lt();
     LevelEditor *level_editor = PUSH_LT(
@@ -56,14 +57,6 @@ LevelEditor *create_level_editor(void)
         RETURN_LT(lt, NULL);
     }
 
-    level_editor->metadata = PUSH_LT(
-        lt,
-        create_level_metadata("New Level"),
-        destroy_level_metadata);
-    if (level_editor->metadata == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
     level_editor->background_layer = create_background_layer(hexstr("fffda5"));
 
     level_editor->player_layer =
@@ -71,7 +64,7 @@ LevelEditor *create_level_editor(void)
 
     level_editor->platforms_layer = PUSH_LT(
         lt,
-        create_rect_layer("platform"),
+        create_rect_layer("platform", cursor),
         destroy_rect_layer);
     if (level_editor->platforms_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -87,7 +80,7 @@ LevelEditor *create_level_editor(void)
 
     level_editor->lava_layer = PUSH_LT(
         lt,
-        create_rect_layer("lava"),
+        create_rect_layer("lava", cursor),
         destroy_rect_layer);
     if (level_editor->lava_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -95,7 +88,7 @@ LevelEditor *create_level_editor(void)
 
     level_editor->back_platforms_layer = PUSH_LT(
         lt,
-        create_rect_layer("back_platform"),
+        create_rect_layer("back_platform", cursor),
         destroy_rect_layer);
     if (level_editor->back_platforms_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -103,7 +96,7 @@ LevelEditor *create_level_editor(void)
 
     level_editor->boxes_layer = PUSH_LT(
         lt,
-        create_rect_layer("box"),
+        create_rect_layer("box", cursor),
         destroy_rect_layer);
     if (level_editor->boxes_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -119,7 +112,7 @@ LevelEditor *create_level_editor(void)
 
     level_editor->regions_layer = PUSH_LT(
         lt,
-        create_rect_layer("region"),
+        create_rect_layer("region", cursor),
         destroy_rect_layer);
     if (level_editor->regions_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -149,7 +142,7 @@ LevelEditor *create_level_editor(void)
     return level_editor;
 }
 
-LevelEditor *create_level_editor_from_file(const char *file_name)
+LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor)
 {
     trace_assert(file_name);
 
@@ -190,11 +183,21 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
         RETURN_LT(lt, NULL);
     }
 
-    level_editor->metadata = PUSH_LT(
-        lt,
-        create_level_metadata_from_line_stream(level_stream),
-        destroy_level_metadata);
-    if (level_editor->metadata == NULL) {
+    const char *line = line_stream_next(level_stream);
+    if (line == NULL) {
+        RETURN_LT(lt, NULL);
+    }
+
+    char version[METADATA_VERSION_MAX_SIZE] = {0};
+    memcpy(version, line,
+           MIN(size_t,
+               strlen(line),
+               METADATA_VERSION_MAX_SIZE - 1));
+    trim_endline(version);
+
+    if (strcmp(version, VERSION) != 0) {
+        log_fail("Version `%s` is not supported. Expected version `%s`.\n",
+                 version, VERSION);
         RETURN_LT(lt, NULL);
     }
 
@@ -210,7 +213,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
     level_editor->platforms_layer =
         PUSH_LT(
             lt,
-            create_rect_layer_from_line_stream(level_stream, "platform"),
+            create_rect_layer_from_line_stream(level_stream, "platform", cursor),
             destroy_rect_layer);
     if (level_editor->platforms_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -227,7 +230,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
     level_editor->lava_layer =
         PUSH_LT(
             lt,
-            create_rect_layer_from_line_stream(level_stream, "lava"),
+            create_rect_layer_from_line_stream(level_stream, "lava", cursor),
             destroy_rect_layer);
     if (level_editor->lava_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -236,7 +239,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
     level_editor->back_platforms_layer =
         PUSH_LT(
             lt,
-            create_rect_layer_from_line_stream(level_stream, "back_platform"),
+            create_rect_layer_from_line_stream(level_stream, "back_platform", cursor),
             destroy_rect_layer);
     if (level_editor->back_platforms_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -245,7 +248,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
     level_editor->boxes_layer =
         PUSH_LT(
             lt,
-            create_rect_layer_from_line_stream(level_stream, "box"),
+            create_rect_layer_from_line_stream(level_stream, "box", cursor),
             destroy_rect_layer);
     if (level_editor->boxes_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -263,7 +266,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name)
     level_editor->regions_layer =
         PUSH_LT(
             lt,
-            create_rect_layer_from_line_stream(level_stream, "region"),
+            create_rect_layer_from_line_stream(level_stream, "region", cursor),
             destroy_rect_layer);
     if (level_editor->regions_layer == NULL) {
         RETURN_LT(lt, NULL);
@@ -347,14 +350,12 @@ int level_editor_render(const LevelEditor *level_editor,
             (float) strlen(save_as_text) * FONT_CHAR_WIDTH * size.x;
 
         /* HTML */
-        if (camera_render_text_screen(
-                camera,
-                save_as_text,
-                LEVEL_EDITOR_EDIT_FIELD_SIZE,
-                LEVEL_EDITOR_EDIT_FIELD_COLOR,
-                position) < 0) {
-            return -1;
-        }
+        camera_render_text_screen(
+            camera,
+            save_as_text,
+            LEVEL_EDITOR_EDIT_FIELD_SIZE,
+            LEVEL_EDITOR_EDIT_FIELD_COLOR,
+            position);
 
         if (edit_field_render_screen(
                 level_editor->edit_field_filename,
@@ -365,9 +366,7 @@ int level_editor_render(const LevelEditor *level_editor,
     }
 
     const Rect screen_viewport = camera_view_port_screen(camera);
-    const Vec2f text_size = fading_wiggly_text_size(
-        &level_editor->notice,
-        camera);
+    const Vec2f text_size = fading_wiggly_text_size(&level_editor->notice);
 
     fading_wiggly_text_render(
         &level_editor->notice, camera,
@@ -390,12 +389,15 @@ int level_editor_saveas_event(LevelEditor *level_editor,
     case SDL_KEYDOWN: {
         if (event->key.keysym.sym == SDLK_RETURN) {
             trace_assert(level_editor->file_name == NULL);
+            char path[LEVEL_FOLDER_MAX_LENGTH];
+            snprintf(
+                path,
+                LEVEL_FOLDER_MAX_LENGTH,
+                "./assets/levels//%s.txt",
+                edit_field_as_text(level_editor->edit_field_filename));
             level_editor->file_name = PUSH_LT(
                 level_editor->lt,
-                string_duplicate(
-                    edit_field_as_text(
-                        level_editor->edit_field_filename),
-                    NULL),
+                string_duplicate(path, NULL),
                 free);
             level_editor_dump(level_editor);
             SDL_StopTextInput();
@@ -564,7 +566,7 @@ static int level_editor_dump(LevelEditor *level_editor)
         fopen(level_editor->file_name, "w"),
         fclose_lt);
 
-    if (fprintf(filedump, "%s\n", level_metadata_title(level_editor->metadata)) < 0) {
+    if (fprintf(filedump, "%s", VERSION) < 0) {
         return -1;
     }