]> git.lizzy.rs Git - nothing.git/commitdiff
Remove Lt from PointLayer
authorrexim <reximkut@gmail.com>
Sun, 5 Jan 2020 22:17:03 +0000 (05:17 +0700)
committerrexim <reximkut@gmail.com>
Sun, 5 Jan 2020 22:17:03 +0000 (05:17 +0700)
src/game/level.c
src/game/level/goals.h
src/game/level/level_editor.c
src/game/level/level_editor.h
src/game/level/level_editor/point_layer.c
src/game/level/level_editor/point_layer.h

index c1ffff77d533961464201f1469e442ea3828e20a..e61d4e31815f6adf5fb6bd036d3f7cf2adc8ad3d 100644 (file)
@@ -94,7 +94,7 @@ Level *create_level_from_level_editor(const LevelEditor *level_editor)
 
     level->goals = PUSH_LT(
         lt,
-        create_goals_from_point_layer(level_editor->goals_layer),
+        create_goals_from_point_layer(&level_editor->goals_layer),
         destroy_goals);
     if (level->goals == NULL) {
         RETURN_LT(lt, NULL);
index 013fbd41d610997240aa39021b19014398d9b225..a0374d3bcc9e36fa2b1c2c396fbac7d40ea74252 100644 (file)
@@ -9,7 +9,6 @@
 #include "config.h"
 
 typedef struct Goals Goals;
-typedef struct PointLayer PointLayer;
 
 Goals *create_goals_from_point_layer(const PointLayer *point_layer);
 void destroy_goals(Goals *goals);
index 021cdd5664c249a37c3bf55a35ca01dd4c6da227..5ee2379355b963ba8f9b7b2b0d56ca31495a3223 100644 (file)
@@ -51,20 +51,9 @@ LevelEditor *create_level_editor(Cursor *cursor)
     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->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 = PUSH_LT(
-        lt,
-        create_point_layer("goal"),
-        destroy_point_layer);
-    if (level_editor->goals_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-
+    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);
@@ -82,7 +71,7 @@ LevelEditor *create_level_editor(Cursor *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_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);
@@ -163,7 +152,7 @@ LevelEditor *create_level_editor_from_file(const char *file_name, Cursor *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_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);
index 4f6dac3adaadb94ee5857839560c74b5ce9a37cd..b56c5f969e7947e7bb06d636e3a7061bd4a41d27 100644 (file)
@@ -5,11 +5,11 @@
 #include "game/level/level_editor/layer_picker.h"
 #include "game/level/level_editor/undo_history.h"
 #include "game/level/level_editor/rect_layer.h"
+#include "game/level/level_editor/point_layer.h"
 #include "ui/wiggly_text.h"
 #include "ui/cursor.h"
 
 typedef struct LevelEditor LevelEditor;
-typedef struct PointLayer PointLayer;
 typedef struct LabelLayer LabelLayer;
 typedef struct Sound_samples Sound_samples;
 
@@ -31,7 +31,7 @@ struct LevelEditor
     RectLayer boxes_layer;
     RectLayer platforms_layer;
     RectLayer back_platforms_layer;
-    PointLayer *goals_layer;
+    PointLayer goals_layer;
     PlayerLayer player_layer;
     RectLayer lava_layer;
     RectLayer regions_layer;
index 89f3daa68c23b30699aa9dc7826c1522ddd3c729..763ed1940adae86ab4c5a6850a33755441a0e682 100644 (file)
@@ -25,31 +25,6 @@ static Color point_clipboard_color;
 
 // TODO(#1140): PointLayer does not support snapping
 
-typedef enum {
-    POINT_LAYER_IDLE = 0,
-    POINT_LAYER_EDIT_ID,
-    POINT_LAYER_MOVE,
-    POINT_LAYER_RECOLOR
-} PointLayerState;
-
-struct PointLayer
-{
-    Lt *lt;
-    PointLayerState state;
-    Dynarray/*<Vec2f>*/ positions;
-    Dynarray/*<Color>*/ colors;
-    Dynarray/*<char[ID_MAX_SIZE]>*/ ids;
-    int selection;
-    ColorPicker color_picker;
-
-    Vec2f inter_position;
-    Color inter_color;
-    Edit_field edit_field;
-
-    int id_name_counter;
-    const char *id_name_prefix;
-};
-
 typedef enum {
     POINT_UNDO_ADD,
     POINT_UNDO_DELETE,
@@ -165,39 +140,28 @@ LayerPtr point_layer_as_layer(PointLayer *point_layer)
     return layer;
 }
 
-PointLayer *create_point_layer(const char *id_name_prefix)
+PointLayer create_point_layer(const char *id_name_prefix)
 {
-    Lt *lt = create_lt();
-
-    PointLayer *point_layer = PUSH_LT(lt, nth_calloc(1, sizeof(PointLayer)), free);
-    if (point_layer == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    point_layer->lt = lt;
-
-    point_layer->state = POINT_LAYER_IDLE;
-
-    point_layer->positions = create_dynarray(sizeof(Vec2f));
-    point_layer->colors = create_dynarray(sizeof(Color));
-    point_layer->ids = create_dynarray(sizeof(char) * ID_MAX_SIZE);
-
-    point_layer->edit_field.font_size = POINT_LAYER_ID_TEXT_SIZE;
-    point_layer->edit_field.font_color = POINT_LAYER_ID_TEXT_COLOR;
-
-    point_layer->id_name_prefix = id_name_prefix;
-
-    return point_layer;
+    PointLayer result = {0};
+    result.state = POINT_LAYER_IDLE;
+    result.positions = create_dynarray(sizeof(Vec2f));
+    result.colors = create_dynarray(sizeof(Color));
+    result.ids = create_dynarray(sizeof(char) * ID_MAX_SIZE);
+    result.edit_field.font_size = POINT_LAYER_ID_TEXT_SIZE;
+    result.edit_field.font_color = POINT_LAYER_ID_TEXT_COLOR;
+    result.id_name_prefix = id_name_prefix;
+    return result;
 }
 
-PointLayer *chop_point_layer(Memory *memory,
-                             String *input,
-                             const char *id_name_prefix)
+PointLayer chop_point_layer(Memory *memory,
+                            String *input,
+                            const char *id_name_prefix)
 {
     trace_assert(memory);
     trace_assert(input);
     trace_assert(id_name_prefix);
 
-    PointLayer *point_layer = create_point_layer(id_name_prefix);
+    PointLayer result = create_point_layer(id_name_prefix);
 
     int n = atoi(string_to_cstr(memory, trim(chop_by_delim(input, '\n'))));
     char id[ENTITY_MAX_ID_SIZE];
@@ -210,31 +174,17 @@ PointLayer *chop_point_layer(Memory *memory,
         Color color = hexs(trim(chop_word(&line)));
 
         memset(id, 0, ENTITY_MAX_ID_SIZE);
-        memcpy(
-            id,
-            string_id.data,
-            min_size_t(ENTITY_MAX_ID_SIZE - 1, string_id.count));
-
-        dynarray_push(&point_layer->positions, &point);
-        dynarray_push(&point_layer->colors, &color);
-        dynarray_push(&point_layer->ids, id);
-    }
+        memcpy(id, string_id.data, min_size_t(ENTITY_MAX_ID_SIZE - 1, string_id.count));
 
-    point_layer->selection = -1;
-    point_layer->color_picker = create_color_picker_from_rgba(COLOR_RED);
-
-    return point_layer;
-}
-
-void destroy_point_layer(PointLayer *point_layer)
-{
-    trace_assert(point_layer);
+        dynarray_push(&result.positions, &point);
+        dynarray_push(&result.colors, &color);
+        dynarray_push(&result.ids, id);
+    }
 
-    free(point_layer->positions.data);
-    free(point_layer->colors.data);
-    free(point_layer->ids.data);
+    result.selection = -1;
+    result.color_picker = create_color_picker_from_rgba(COLOR_RED);
 
-    RETURN_LT0(point_layer->lt);
+    return result;
 }
 
 static inline
index d08df7104b541a4f8e86edd2faa9f61f4b1fa9cb..a3923d8ed7008f71fff43d6f20d59584014df5a0 100644 (file)
@@ -7,16 +7,46 @@
 
 #define ID_MAX_SIZE 36
 
-typedef struct PointLayer PointLayer;
+typedef enum {
+    POINT_LAYER_IDLE = 0,
+    POINT_LAYER_EDIT_ID,
+    POINT_LAYER_MOVE,
+    POINT_LAYER_RECOLOR
+} PointLayerState;
+
+typedef struct {
+    PointLayerState state;
+    Dynarray/*<Vec2f>*/ positions;
+    Dynarray/*<Color>*/ colors;
+    Dynarray/*<char[ID_MAX_SIZE]>*/ ids;
+    int selection;
+    ColorPicker color_picker;
+
+    Vec2f inter_position;
+    Color inter_color;
+    Edit_field edit_field;
+
+    int id_name_counter;
+    const char *id_name_prefix;
+} PointLayer;
+
 
 LayerPtr point_layer_as_layer(PointLayer *point_layer);
 // NOTE: create_point_layer and create_point_layer_from_line_stream do
 // not own id_name_prefix
-PointLayer *create_point_layer(const char *id_name_prefix);
-PointLayer *chop_point_layer(Memory *memory,
+PointLayer create_point_layer(const char *id_name_prefix);
+PointLayer chop_point_layer(Memory *memory,
                              String *input,
                              const char *id_name_prefix);
-void destroy_point_layer(PointLayer *point_layer);
+
+static inline
+void destroy_point_layer(PointLayer point_layer)
+{
+    free(point_layer.positions.data);
+    free(point_layer.colors.data);
+    free(point_layer.ids.data);
+}
+
 
 int point_layer_render(const PointLayer *point_layer,
                        const Camera *camera,