]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/level_editor/point_layer.c
Merge pull request #902 from tsoding/893
[nothing.git] / src / game / level / level_editor / point_layer.c
index d3db0936c830e2e9bb25473e7625ae8e5fbe4b5d..d774f9d85ecf1d44a84c1c9a2b4b18f71c67a0ba 100644 (file)
@@ -1,4 +1,6 @@
-#include <SDL2/SDL.h>
+#include <stdio.h>
+
+#include <SDL.h>
 
 #include "dynarray.h"
 #include "game/camera.h"
@@ -122,7 +124,8 @@ void destroy_point_layer(PointLayer *point_layer)
 }
 
 int point_layer_render(const PointLayer *point_layer,
-                       Camera *camera)
+                       Camera *camera,
+                       float fa)
 {
     trace_assert(point_layer);
     trace_assert(camera);
@@ -138,6 +141,10 @@ int point_layer_render(const PointLayer *point_layer,
                 trans_mat(points[i].x, points[i].y),
                 scale_mat(POINT_LAYER_ELEMENT_RADIUS)));
 
+        const Color color = color_scale(
+            colors[i],
+            rgba(1.0f, 1.0f, 1.0f, fa));
+
         if (i == point_layer->selected) {
             const Triangle t0 = triangle_mat3x3_product(
                 equilateral_triangle(),
@@ -145,12 +152,12 @@ int point_layer_render(const PointLayer *point_layer,
                     trans_mat(points[i].x, points[i].y),
                     scale_mat(15.0f)));
 
-            if (camera_fill_triangle(camera, t0, color_invert(colors[i])) < 0) {
+            if (camera_fill_triangle(camera, t0, color_invert(color)) < 0) {
                 return -1;
             }
         }
 
-        if (camera_fill_triangle(camera, t, colors[i]) < 0) {
+        if (camera_fill_triangle(camera, t, color) < 0) {
             return -1;
         }
 
@@ -356,3 +363,26 @@ const char *point_layer_ids(const PointLayer *point_layer)
     trace_assert(point_layer);
     return dynarray_data(point_layer->ids);
 }
+
+int point_layer_dump_stream(const PointLayer *point_layer,
+                            FILE *filedump)
+{
+    trace_assert(point_layer);
+    trace_assert(filedump);
+
+    size_t n = dynarray_count(point_layer->ids);
+    char *ids = dynarray_data(point_layer->ids);
+    Point *points = dynarray_data(point_layer->points);
+    Color *colors = dynarray_data(point_layer->colors);
+
+    fprintf(filedump, "%ld\n", n);
+    for (size_t i = 0; i < n; ++i) {
+        fprintf(filedump, "%s %f %f ",
+                ids + ID_MAX_SIZE * i,
+                points[i].x, points[i].y);
+        color_hex_to_stream(colors[i], filedump);
+        fprintf(filedump, "\n");
+    }
+
+    return 0;
+}