]> git.lizzy.rs Git - nothing.git/blob - src/game/level/level_editor/label_layer.h
252577f1883e97a31f935d24c3ccb4348cf642e8
[nothing.git] / src / game / level / level_editor / label_layer.h
1 #ifndef LABEL_LAYER_H_
2 #define LABEL_LAYER_H_
3
4 #include "layer.h"
5 #include "color.h"
6 #include "math/vec.h"
7
8 #define LABELS_SIZE vec(2.0f, 2.0f)
9 #define LABEL_LAYER_ID_MAX_SIZE 36
10 #define LABEL_LAYER_TEXT_MAX_SIZE 256
11
12 typedef enum {
13     LABEL_LAYER_IDLE = 0,
14     LABEL_LAYER_MOVE,
15     LABEL_LAYER_EDIT_TEXT,
16     LABEL_LAYER_EDIT_ID,
17     LABEL_LAYER_RECOLOR
18 } LabelLayerState;
19
20 typedef struct {
21     LabelLayerState state;
22     Dynarray ids;
23     Dynarray positions;
24     Dynarray colors;
25     Dynarray texts;
26     int selection;
27     ColorPicker color_picker;
28     Vec2f move_anchor;
29     Edit_field edit_field;
30     Vec2f inter_position;
31     Color inter_color;
32     int id_name_counter;
33     const char *id_name_prefix;
34 } LabelLayer;
35
36 LayerPtr label_layer_as_layer(LabelLayer *label_layer);
37
38 // NOTE: create_label_layer and create_label_layer_from_line_stream do
39 // not own id_name_prefix
40 LabelLayer create_label_layer(const char *id_name_prefix);
41 LabelLayer chop_label_layer(Memory *memory,
42                             String *input,
43                             const char *id_name_prefix);
44 static inline
45 void destroy_label_layer(LabelLayer label_layer)
46 {
47     free(label_layer.ids.data);
48     free(label_layer.positions.data);
49     free(label_layer.colors.data);
50     free(label_layer.texts.data);
51 }
52
53 int label_layer_render(const LabelLayer *label_layer,
54                        const Camera *camera,
55                        int active);
56 int label_layer_event(LabelLayer *label_layer,
57                       const SDL_Event *event,
58                       const Camera *camera,
59                       UndoHistory *undo_history);
60
61 size_t label_layer_count(const LabelLayer *label_layer);
62
63 int label_layer_dump_stream(const LabelLayer *label_layer, FILE *filedump);
64
65 char *label_layer_ids(const LabelLayer *label_layer);
66 Vec2f *label_layer_positions(const LabelLayer *label_layer);
67 Color *label_layer_colors(const LabelLayer *label_layer);
68 char *labels_layer_texts(const LabelLayer *label_layer);
69
70 #endif  // LABEL_LAYER_H_