X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flevel_editor%2Flabel_layer.c;h=667679995b7960777001d4ee03fa84d34d0de82c;hb=3e177f348cab6e5f06ce0c41140f990fdf5533a9;hp=22732c895b6e53c9242827bb4fc78305898b13c0;hpb=81f1e75d804ecf3255084148e70616a09fdd2056;p=nothing.git diff --git a/src/game/level/level_editor/label_layer.c b/src/game/level/level_editor/label_layer.c index 22732c89..66767999 100644 --- a/src/game/level/level_editor/label_layer.c +++ b/src/game/level/level_editor/label_layer.c @@ -1,3 +1,5 @@ +#include + #include #include "system/line_stream.h" @@ -10,6 +12,7 @@ #include "label_layer.h" #include "dynarray.h" #include "color.h" +#include "game/camera.h" #define LABEL_LAYER_ID_MAX_SIZE 36 @@ -83,7 +86,7 @@ LabelLayer *create_label_layer_from_line_stream(LineStream *line_stream) } size_t n = 0; - if (sscanf(line, "%lu", &n) == EOF) { + if (sscanf(line, "%zu", &n) == EOF) { log_fail("Could not parse amount of labels\n"); RETURN_LT(label_layer->lt, NULL); } @@ -134,11 +137,30 @@ void destroy_label_layer(LabelLayer *label_layer) int label_layer_render(const LabelLayer *label_layer, Camera *camera, - float fa) + int active) { trace_assert(label_layer); trace_assert(camera); - (void) fa; + + size_t n = dynarray_count(label_layer->ids); + Point *positions = dynarray_data(label_layer->positions); + Color *colors = dynarray_data(label_layer->colors); + char **texts = dynarray_data(label_layer->texts); + + /* TODO(#891): LabelLayer doesn't show the final position of Label after the animation */ + for (size_t i = 0; i < n; ++i) { + if (camera_render_text( + camera, + texts[i], + vec(2.0f, 2.0f), + color_scale( + colors[i], + rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f)), + positions[i]) < 0) { + return -1; + } + } + return 0; } @@ -149,6 +171,7 @@ int label_layer_event(LabelLayer *label_layer, trace_assert(label_layer); trace_assert(event); trace_assert(camera); + /* TODO(#892): LabelLayer doesn't allow to modify and add labels */ return 0; } @@ -176,3 +199,26 @@ char **labels_layer_texts(const LabelLayer *label_layer) { return dynarray_data(label_layer->texts); } + +int label_layer_dump_stream(const LabelLayer *label_layer, FILE *filedump) +{ + trace_assert(label_layer); + trace_assert(filedump); + + size_t n = dynarray_count(label_layer->ids); + char *ids = dynarray_data(label_layer->ids); + Point *positions = dynarray_data(label_layer->positions); + Color *colors = dynarray_data(label_layer->colors); + char **texts = dynarray_data(label_layer->texts); + + fprintf(filedump, "%zd\n", n); + for (size_t i = 0; i < n; ++i) { + fprintf(filedump, "%s %f %f ", + ids + LABEL_LAYER_ID_MAX_SIZE * i, + positions[i].x, positions[i].y); + color_hex_to_stream(colors[i], filedump); + fprintf(filedump, "\n%s\n", texts[i]); + } + + return 0; +}