6 #include "game/level/lava/wavy_rect.h"
9 #include "system/error.h"
10 #include "system/lt.h"
18 lava_t *create_lava_from_stream(FILE *stream)
22 lt_t *lt = create_lt();
27 lava_t *lava = PUSH_LT(lt, malloc(sizeof(lava_t)), free);
29 throw_error(ERROR_TYPE_LIBC);
33 if (fscanf(stream, "%lu", &lava->rects_count) < 0) {
34 throw_error(ERROR_TYPE_LIBC);
38 lava->rects = PUSH_LT(lt, malloc(sizeof(wavy_rect_t*) * lava->rects_count), free);
39 if (lava->rects == NULL) {
40 throw_error(ERROR_TYPE_LIBC);
44 for (size_t i = 0; i < lava->rects_count; ++i) {
45 lava->rects[i] = PUSH_LT(lt, create_wavy_rect_from_stream(stream), destroy_wavy_rect);
46 if (lava->rects[i] == NULL) {
56 void destroy_lava(lava_t *lava)
62 int lava_render(const lava_t *lava,
68 for (size_t i = 0; i < lava->rects_count; ++i) {
69 if (wavy_rect_render(lava->rects[i], camera) < 0) {
77 int lava_update(lava_t *lava, float delta_time)
81 for (size_t i = 0; i < lava->rects_count; ++i) {
82 if (wavy_rect_update(lava->rects[i], delta_time) < 0) {
90 bool lava_overlaps_rect(const lava_t *lava,
95 for (size_t i = 0; i < lava->rects_count; ++i) {
96 if (rects_overlap(wavy_rect_hitbox(lava->rects[i]), rect)) {
104 void lava_float_rigid_rect(const lava_t *lava, rigid_rect_t *rigid_rect)