X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flava.c;h=a060d85c2a2360993c03bba2258ebe73c7ed590e;hb=7756ef2ba34d7d6db2b1a28a7642ecb898edf672;hp=e1ae8e92c5b38e969a508094db331dca373c6a37;hpb=eaa7ee235a086ffe846f4400d0b3d42d9847b6eb;p=nothing.git diff --git a/src/game/level/lava.c b/src/game/level/lava.c index e1ae8e92..a060d85c 100644 --- a/src/game/level/lava.c +++ b/src/game/level/lava.c @@ -1,4 +1,4 @@ -#include +#include #include "system/stacktrace.h" #include @@ -10,11 +10,12 @@ #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; }; @@ -23,7 +24,7 @@ Lava *create_lava_from_line_stream(LineStream *line_stream) { trace_assert(line_stream); - Lt lt = {0}; + Lt *lt = create_lt(); Lava *lava = PUSH_LT(lt, nth_calloc(1, sizeof(Lava)), free); if (lava == NULL) { @@ -32,9 +33,9 @@ Lava *create_lava_from_line_stream(LineStream *line_stream) if (sscanf( line_stream_next(line_stream), - "%lu", + "%zu", &lava->rects_count) < 0) { - log_fail("Could not read amount of lavas\n"); + log_fail("Could not read amount of lava\n"); RETURN_LT(lt, NULL); } @@ -55,6 +56,34 @@ Lava *create_lava_from_line_stream(LineStream *line_stream) return lava; } +Lava *create_lava_from_rect_layer(const RectLayer *rect_layer) +{ + 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; + + 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(rects[i], colors[i]), destroy_wavy_rect); + if (lava->rects[i] == NULL) { + RETURN_LT(lt, NULL); + } + } + + return lava; +} + void destroy_lava(Lava *lava) { trace_assert(lava);