-#include <SDL2/SDL.h>
+#include <SDL.h>
#include "system/stacktrace.h"
#include <stdio.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;
};
{
trace_assert(line_stream);
- Lt lt = create_lt();
- if (lt == NULL) {
- return NULL;
- }
+ Lt *lt = create_lt();
Lava *lava = PUSH_LT(lt, nth_calloc(1, sizeof(Lava)), free);
if (lava == NULL) {
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);
}
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);