]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/rect_layer.h
Remove Lt from LevelEditor
[nothing.git] / src / game / level / level_editor / rect_layer.h
index c0b2803045396751d3a17624c5e3ab4af1d9563b..682ab33e072c0e8befe617953ecee9aca3987e9d 100644 (file)
@@ -4,20 +4,61 @@
 #include "layer.h"
 #include "game/level/action.h"
 #include "ui/cursor.h"
+#include "dynarray.h"
+#include "color_picker.h"
+#include "ui/edit_field.h"
 
 typedef struct RectLayer RectLayer;
-typedef struct LineStream LineStream;
+
+typedef enum {
+    RECT_LAYER_IDLE = 0,
+    RECT_LAYER_CREATE,
+    RECT_LAYER_RESIZE,
+    RECT_LAYER_MOVE,
+    RECT_LAYER_ID_RENAME,
+    RECT_LAYER_RECOLOR
+} RectLayerState;
+
+struct RectLayer {
+    RectLayerState state;
+    int resize_mask;
+    Dynarray ids;
+    Dynarray rects;
+    Dynarray colors;
+    Dynarray actions;
+    ColorPicker color_picker;
+    Vec2f create_begin;
+    Vec2f create_end;
+    int selection;
+    Vec2f move_anchor;          // The mouse offset from the left-top
+                                // corner of the rect during moving it
+    Edit_field id_edit_field;
+    Color inter_color;
+    Rect inter_rect;
+    int id_name_counter;
+    const char *id_name_prefix;
+    Cursor *cursor;
+
+    int snapping_enabled;
+};
 
 LayerPtr rect_layer_as_layer(RectLayer *layer);
 // NOTE: create_rect_layer and create_rect_layer_from_line_stream does
 // not own id_name_prefix
-RectLayer *create_rect_layer(const char *id_name_prefix,
-                             Cursor *cursor);
-RectLayer *create_rect_layer_from_line_stream(
-    LineStream *line_stream,
-    const char *id_name_prefix,
-    Cursor *cursor);
-void destroy_rect_layer(RectLayer *layer);
+RectLayer create_rect_layer(const char *id_name_prefix,
+                            Cursor *cursor);
+void rect_layer_reload(RectLayer *rect_layer, Memory *memory, String *input);
+void rect_layer_clean(RectLayer *rect_layer);
+
+static inline
+void destroy_rect_layer(RectLayer layer)
+{
+    free(layer.ids.data);
+    free(layer.rects.data);
+    free(layer.colors.data);
+    free(layer.actions.data);
+}
+
 
 int rect_layer_render(const RectLayer *layer, const Camera *camera, int active);
 int rect_layer_event(RectLayer *layer,