]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/lava.c
Merge pull request #1255 from tsoding/1253
[nothing.git] / src / game / level / lava.c
index c1b686474fb1eecb75f4ac06d7e68fba7aebdc79..ec580d4c075fe526ffac321a4f0ba7d5ee13990e 100644 (file)
@@ -1,4 +1,4 @@
-#include <SDL2/SDL.h>
+#include <SDL.h>
 #include "system/stacktrace.h"
 #include <stdio.h>
 
@@ -7,54 +7,43 @@
 #include "lava.h"
 #include "math/rect.h"
 #include "system/lt.h"
-#include "system/line_stream.h"
 #include "system/nth_alloc.h"
 #include "system/log.h"
+#include "game/level/level_editor/rect_layer.h"
 
 #define LAVA_BOINGNESS 2500.0f
 
 struct Lava {
-    Lt lt;
+    Lt *lt;
     size_t rects_count;
     Wavy_rect **rects;
 };
 
-Lava *create_lava_from_line_stream(LineStream *line_stream)
+Lava *create_lava_from_rect_layer(const RectLayer *rect_layer)
 {
-    trace_assert(line_stream);
-
-    Lt lt = {0};
-    if (lt == NULL) {
-        return NULL;
-    }
+    Lt *lt = create_lt();
 
     Lava *lava = PUSH_LT(lt, nth_calloc(1, sizeof(Lava)), free);
     if (lava == NULL) {
         RETURN_LT(lt, NULL);
     }
+    lava->lt = lt;
 
-    if (sscanf(
-            line_stream_next(line_stream),
-            "%lu",
-            &lava->rects_count) < 0) {
-        log_fail("Could not read amount of lavas\n");
-        RETURN_LT(lt, NULL);
-    }
-
-    lava->rects = PUSH_LT(lt, nth_calloc(1, sizeof(Wavy_rect*) * lava->rects_count), free);
+    lava->rects_count = rect_layer_count(rect_layer);
+    lava->rects = PUSH_LT(lt, nth_calloc(lava->rects_count, sizeof(Wavy_rect*)), free);
     if (lava->rects == NULL) {
         RETURN_LT(lt, NULL);
     }
 
+    const Rect *rects = rect_layer_rects(rect_layer);
+    const Color *colors = rect_layer_colors(rect_layer);
     for (size_t i = 0; i < lava->rects_count; ++i) {
-        lava->rects[i] = PUSH_LT(lt, create_wavy_rect_from_line_stream(line_stream), destroy_wavy_rect);
+        lava->rects[i] = PUSH_LT(lt, create_wavy_rect(rects[i], colors[i]), destroy_wavy_rect);
         if (lava->rects[i] == NULL) {
             RETURN_LT(lt, NULL);
         }
     }
 
-    lava->lt = lt;
-
     return lava;
 }
 
@@ -66,7 +55,7 @@ void destroy_lava(Lava *lava)
 
 /* TODO(#449): lava does not render its id in debug mode */
 int lava_render(const Lava *lava,
-                Camera *camera)
+                const Camera *camera)
 {
     trace_assert(lava);
     trace_assert(camera);