From 4831bcb11320a6c6d218a69174bf7986e40f6bc1 Mon Sep 17 00:00:00 2001 From: rexim Date: Sun, 5 Jan 2020 03:04:07 +0700 Subject: [PATCH] Implement chop_label_layer --- src/game/level/level_editor/label_layer.c | 46 +++++++++++++++++++++++ src/game/level/level_editor/label_layer.h | 3 ++ 2 files changed, 49 insertions(+) diff --git a/src/game/level/level_editor/label_layer.c b/src/game/level/level_editor/label_layer.c index 739c2dae..a133301b 100644 --- a/src/game/level/level_editor/label_layer.c +++ b/src/game/level/level_editor/label_layer.c @@ -260,6 +260,52 @@ LabelLayer *create_label_layer_from_line_stream(LineStream *line_stream, const c return label_layer; } +LabelLayer *chop_label_layer(Memory *memory, + String *input, + const char *id_name_prefix) +{ + trace_assert(memory); + trace_assert(input); + trace_assert(id_name_prefix); + + LabelLayer *label_layer = create_label_layer(id_name_prefix); + + int n = atoi(string_to_cstr(memory, trim(chop_by_delim(input, '\n')))); + char id[LABEL_LAYER_ID_MAX_SIZE]; + char label_text[LABEL_LAYER_TEXT_MAX_SIZE]; + for (int i = 0; i < n; ++i) { + String meta = trim(chop_by_delim(input, '\n')); + + String string_id = trim(chop_word(&meta)); + Vec2f position; + position.x = strtof(string_to_cstr(memory, trim(chop_word(&meta))), NULL); + position.y = strtof(string_to_cstr(memory, trim(chop_word(&meta))), NULL); + Color color = hexs(trim(chop_word(&meta))); + + memset(id, 0, LABEL_LAYER_ID_MAX_SIZE); + memcpy( + id, + string_id.data, + min_size_t(LABEL_LAYER_ID_MAX_SIZE - 1, string_id.count)); + + String label_text_string = + trim(chop_by_delim(input, '\n')); + memset(label_text, 0, LABEL_LAYER_TEXT_MAX_SIZE); + memcpy( + label_text, + label_text_string.data, + min_size_t(LABEL_LAYER_TEXT_MAX_SIZE - 1, + label_text_string.count)); + + dynarray_push(&label_layer->ids, id); + dynarray_push(&label_layer->positions, &position); + dynarray_push(&label_layer->colors, &color); + dynarray_push(&label_layer->texts, label_text); + } + + return label_layer; +} + void destroy_label_layer(LabelLayer *label_layer) { trace_assert(label_layer); diff --git a/src/game/level/level_editor/label_layer.h b/src/game/level/level_editor/label_layer.h index 6d8d710f..d2f296b4 100644 --- a/src/game/level/level_editor/label_layer.h +++ b/src/game/level/level_editor/label_layer.h @@ -19,6 +19,9 @@ LayerPtr label_layer_as_layer(LabelLayer *label_layer); LabelLayer *create_label_layer(const char *id_name_prefix); LabelLayer *create_label_layer_from_line_stream(LineStream *line_stream, const char *id_name_prefix); +LabelLayer *chop_label_layer(Memory *memory, + String *input, + const char *id_name_prefix); void destroy_label_layer(LabelLayer *label_layer); int label_layer_render(const LabelLayer *label_layer, -- 2.44.0