]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor.c
Destroy level editor layers in destroy_level_editor
[nothing.git] / src / game / level / level_editor.c
index 36f80f45ae80d86fb832cf3ada2464040feab5e9..1c19018dbb4ac3839a70f7b86a1746abbb59b896 100644 (file)
@@ -3,7 +3,6 @@
 #include "game/camera.h"
 #include "game/sound_samples.h"
 #include "game/level/boxes.h"
-#include "game/level/level_editor/action_picker.h"
 #include "game/level/level_editor/color_picker.h"
 #include "game/level/level_editor/rect_layer.h"
 #include "game/level/level_editor/point_layer.h"
@@ -48,86 +47,28 @@ LevelEditor *create_level_editor(Cursor *cursor)
     }
     level_editor->lt = lt;
 
-    level_editor->edit_field_filename = PUSH_LT(
-        lt,
-        create_edit_field(
-            LEVEL_EDITOR_EDIT_FIELD_SIZE,
-            LEVEL_EDITOR_EDIT_FIELD_COLOR),
-        destroy_edit_field);
-    if (level_editor->edit_field_filename == NULL) {
-        RETURN_LT(lt, NULL);
-    }
+    level_editor->edit_field_filename.font_size = LEVEL_EDITOR_EDIT_FIELD_SIZE;
+    level_editor->edit_field_filename.font_color = LEVEL_EDITOR_EDIT_FIELD_COLOR;
 
     level_editor->background_layer = create_background_layer(hexstr("fffda5"));
-
-    level_editor->player_layer =
-        create_player_layer(vec(0.0f, 0.0f), hexstr("ff8080"));
-
-    level_editor->platforms_layer = PUSH_LT(
-        lt,
-        create_rect_layer("platform", cursor),
-        destroy_rect_layer);
-    if (level_editor->platforms_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->goals_layer = PUSH_LT(
-        lt,
-        create_point_layer("goal"),
-        destroy_point_layer);
-    if (level_editor->goals_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->lava_layer = PUSH_LT(
-        lt,
-        create_rect_layer("lava", cursor),
-        destroy_rect_layer);
-    if (level_editor->lava_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->back_platforms_layer = PUSH_LT(
-        lt,
-        create_rect_layer("back_platform", cursor),
-        destroy_rect_layer);
-    if (level_editor->back_platforms_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->boxes_layer = PUSH_LT(
-        lt,
-        create_rect_layer("box", cursor),
-        destroy_rect_layer);
-    if (level_editor->boxes_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->label_layer = PUSH_LT(
-        lt,
-        create_label_layer("label"),
-        destroy_label_layer);
-    if (level_editor->label_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->regions_layer = PUSH_LT(
-        lt,
-        create_rect_layer("region", cursor),
-        destroy_rect_layer);
-    if (level_editor->regions_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
-    level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(level_editor->boxes_layer);
-    level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(level_editor->platforms_layer);
-    level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(level_editor->back_platforms_layer);
-    level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(level_editor->goals_layer);
+    level_editor->player_layer = create_player_layer(vec(0.0f, 0.0f), hexstr("ff8080"));
+    level_editor->platforms_layer = create_rect_layer("platform", cursor);
+    level_editor->goals_layer = create_point_layer("goal"),
+    level_editor->lava_layer = create_rect_layer("lava", cursor);
+    level_editor->back_platforms_layer = create_rect_layer("back_platform", cursor);
+    level_editor->boxes_layer = create_rect_layer("box", cursor);
+    level_editor->label_layer = create_label_layer("label");
+    level_editor->regions_layer = create_rect_layer("region", cursor),
+
+    level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(&level_editor->boxes_layer);
+    level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(&level_editor->platforms_layer);
+    level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(&level_editor->back_platforms_layer);
+    level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(&level_editor->goals_layer);
     level_editor->layers[LAYER_PICKER_PLAYER] = player_layer_as_layer(&level_editor->player_layer);
-    level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(level_editor->lava_layer);
-    level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(level_editor->regions_layer);
+    level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
+    level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
     level_editor->layers[LAYER_PICKER_BACKGROUND] = background_layer_as_layer(&level_editor->background_layer);
-    level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(level_editor->label_layer);
+    level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(&level_editor->label_layer);
 
     level_editor->notice = (FadingWigglyText) {
         .wiggly_text = {
@@ -140,6 +81,8 @@ LevelEditor *create_level_editor(Cursor *cursor)
 
     level_editor->camera_scale = 1.0f;
 
+    level_editor->undo_history = create_undo_history();
+
     return level_editor;
 }
 
@@ -157,15 +100,8 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor
     }
     level_editor->lt = lt;
 
-    level_editor->edit_field_filename = PUSH_LT(
-        lt,
-        create_edit_field(
-            LEVEL_EDITOR_EDIT_FIELD_SIZE,
-            LEVEL_EDITOR_EDIT_FIELD_COLOR),
-        destroy_edit_field);
-    if (level_editor->edit_field_filename == NULL) {
-        RETURN_LT(lt, NULL);
-    }
+    level_editor->edit_field_filename.font_size = LEVEL_EDITOR_EDIT_FIELD_SIZE;
+    level_editor->edit_field_filename.font_color = LEVEL_EDITOR_EDIT_FIELD_COLOR;
 
     level_editor->file_name =
         PUSH_LT(
@@ -205,15 +141,15 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor
     level_editor->label_layer = chop_label_layer(&tmpmem, &input, "label");
     level_editor->regions_layer = chop_rect_layer(&tmpmem, &input, "region", cursor),
 
-    level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(level_editor->boxes_layer);
-    level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(level_editor->platforms_layer);
-    level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(level_editor->back_platforms_layer);
-    level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(level_editor->goals_layer);
+    level_editor->layers[LAYER_PICKER_BOXES] = rect_layer_as_layer(&level_editor->boxes_layer);
+    level_editor->layers[LAYER_PICKER_PLATFORMS] = rect_layer_as_layer(&level_editor->platforms_layer);
+    level_editor->layers[LAYER_PICKER_BACK_PLATFORMS] = rect_layer_as_layer(&level_editor->back_platforms_layer);
+    level_editor->layers[LAYER_PICKER_GOALS] = point_layer_as_layer(&level_editor->goals_layer);
     level_editor->layers[LAYER_PICKER_PLAYER] = player_layer_as_layer(&level_editor->player_layer);
-    level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(level_editor->lava_layer);
-    level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(level_editor->regions_layer);
+    level_editor->layers[LAYER_PICKER_LAVA] = rect_layer_as_layer(&level_editor->lava_layer);
+    level_editor->layers[LAYER_PICKER_REGIONS] = rect_layer_as_layer(&level_editor->regions_layer);
     level_editor->layers[LAYER_PICKER_BACKGROUND] = background_layer_as_layer(&level_editor->background_layer);
-    level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(level_editor->label_layer);
+    level_editor->layers[LAYER_PICKER_LABELS] = label_layer_as_layer(&level_editor->label_layer);
 
     level_editor->drag = false;
 
@@ -228,7 +164,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *cursor
 
     level_editor->camera_scale = 1.0f;
 
-    log_info("%ld bytes of tmp memory consumed during parsing the level\n", tmpmem.size);
+    level_editor->undo_history = create_undo_history();
 
     free(tmpmem.buffer);
 
@@ -239,7 +175,13 @@ void destroy_level_editor(LevelEditor *level_editor)
 {
     trace_assert(level_editor);
     destroy_undo_history(level_editor->undo_history);
-    RETURN_LT0(level_editor->lt);
+    destroy_rect_layer(level_editor->boxes_layer);
+    destroy_rect_layer(level_editor->platforms_layer);
+    destroy_rect_layer(level_editor->back_platforms_layer);
+    destroy_point_layer(level_editor->goals_layer);
+    destroy_rect_layer(level_editor->lava_layer);
+    destroy_rect_layer(level_editor->regions_layer);
+    destroy_label_layer(level_editor->label_layer);
 }
 
 int level_editor_render(const LevelEditor *level_editor,
@@ -295,7 +237,7 @@ int level_editor_render(const LevelEditor *level_editor,
             position);
 
         if (edit_field_render_screen(
-                level_editor->edit_field_filename,
+                &level_editor->edit_field_filename,
                 camera,
                 vec(position.x + save_as_width, position.y)) < 0) {
             return -1;
@@ -331,7 +273,7 @@ int level_editor_saveas_event(LevelEditor *level_editor,
                 path,
                 LEVEL_FOLDER_MAX_LENGTH,
                 "./assets/levels/%s.txt",
-                edit_field_as_text(level_editor->edit_field_filename));
+                edit_field_as_text(&level_editor->edit_field_filename));
             level_editor->file_name = PUSH_LT(
                 level_editor->lt,
                 string_duplicate(path, NULL),
@@ -344,7 +286,7 @@ int level_editor_saveas_event(LevelEditor *level_editor,
     } break;
     }
 
-    return edit_field_event(level_editor->edit_field_filename, event);
+    return edit_field_event(&level_editor->edit_field_filename, event);
 }
 
 static