]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/label_layer.c
(#964) Make LabelLayer display the ids
[nothing.git] / src / game / level / level_editor / label_layer.c
index 7c4527367059b9d0363b16b4e83d98db73c29298..76244fca74619fc2fa4d1a1d96fe1c56383d5772 100644 (file)
@@ -177,6 +177,7 @@ int label_layer_render(const LabelLayer *label_layer,
     }
 
     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);
@@ -184,11 +185,10 @@ int label_layer_render(const LabelLayer *label_layer,
     /* TODO(#891): LabelLayer doesn't show the final position of Label after the animation */
     for (size_t i = 0; i < n; ++i) {
         if (label_layer->state == LABEL_LAYER_EDIT_TEXT) {
-            // TODO(#965): LabelLayer Edit Field should be rendered inside of the world
-            if (edit_field_render(
+            if (edit_field_render_world(
                     label_layer->edit_field,
                     camera,
-                    camera_point(camera, positions[i])) < 0) {
+                    positions[i]) < 0) {
                 return -1;
             }
         } else {
@@ -203,6 +203,17 @@ int label_layer_render(const LabelLayer *label_layer,
                 return -1;
             }
         }
+
+        if (camera_render_text(
+                camera,
+                ids + i * LABEL_LAYER_ID_MAX_SIZE,
+                vec(1.0f, 1.0f),
+                color_scale(
+                    color_invert(colors[i]),
+                    rgba(1.0f, 1.0f, 1.0f, active ? 1.0f : 0.5f)),
+                vec_sub(positions[i], vec(0.0f, FONT_CHAR_HEIGHT))) < 0) {
+            return -1;
+        }
     }
 
     if (label_layer->selected >= 0) {
@@ -359,33 +370,19 @@ int label_layer_edit_text_event(LabelLayer *label_layer,
     trace_assert(label_layer->selected >= 0);
 
     switch (event->type) {
-    case SDL_TEXTINPUT: {
-        if (edit_field_text_input(
-                label_layer->edit_field,
-                &event->text) < 0) {
-            return -1;
-        }
-    } break;
-
-    case SDL_KEYDOWN:
-    case SDL_KEYUP: {
-        if (edit_field_keyboard(
-                label_layer->edit_field,
-                &event->key) < 0) {
-            return -1;
-        }
-
+    case SDL_KEYDOWN: {
         if (event->key.keysym.sym == SDLK_RETURN) {
             char *text =
                 (char*)dynarray_data(label_layer->texts) + label_layer->selected * LABEL_LAYER_TEXT_MAX_SIZE;
             memset(text, 0, LABEL_LAYER_TEXT_MAX_SIZE);
             memcpy(text, edit_field_as_text(label_layer->edit_field), LABEL_LAYER_TEXT_MAX_SIZE - 1);
             label_layer->state = LABEL_LAYER_IDLE;
+            return 0;
         }
     } break;
     }
 
-    return 0;
+    return edit_field_event(label_layer->edit_field, event);
 }
 
 int label_layer_event(LabelLayer *label_layer,