X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flevel_editor%2Fpoint_layer.c;h=763ed1940adae86ab4c5a6850a33755441a0e682;hb=56e308932f300c06da3611a7687de6882da60d6f;hp=89f3daa68c23b30699aa9dc7826c1522ddd3c729;hpb=749edf20eacb0e055eff7b686033e4274c0e5e2e;p=nothing.git diff --git a/src/game/level/level_editor/point_layer.c b/src/game/level/level_editor/point_layer.c index 89f3daa6..763ed194 100644 --- a/src/game/level/level_editor/point_layer.c +++ b/src/game/level/level_editor/point_layer.c @@ -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/**/ positions; - Dynarray/**/ colors; - Dynarray/**/ 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