X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fgame%2Flevel%2Flava.c;h=a060d85c2a2360993c03bba2258ebe73c7ed590e;hb=7756ef2ba34d7d6db2b1a28a7642ecb898edf672;hp=b37f92d857e9d58ea1db015204e4f4f83e6b75ad;hpb=db8ba57cee42b621ee4890611af366417be3b7ce;p=nothing.git diff --git a/src/game/level/lava.c b/src/game/level/lava.c index b37f92d8..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,6 +10,7 @@ #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 @@ -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);