]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/lava.c
Merge pull request #857 from tsoding/813
[nothing.git] / src / game / level / lava.c
index 1e6456b7c7671d1b39e81d093de59def4ca4d318..b37f92d857e9d58ea1db015204e4f4f83e6b75ad 100644 (file)
@@ -4,7 +4,6 @@
 
 #include "color.h"
 #include "game/level/lava/wavy_rect.h"
-#include "game/level/player/rigid_rect.h"
 #include "lava.h"
 #include "math/rect.h"
 #include "system/lt.h"
@@ -25,11 +24,8 @@ Lava *create_lava_from_line_stream(LineStream *line_stream)
     trace_assert(line_stream);
 
     Lt *lt = create_lt();
-    if (lt == NULL) {
-        return NULL;
-    }
 
-    Lava *lava = PUSH_LT(lt, nth_alloc(sizeof(Lava)), free);
+    Lava *lava = PUSH_LT(lt, nth_calloc(1, sizeof(Lava)), free);
     if (lava == NULL) {
         RETURN_LT(lt, NULL);
     }
@@ -42,7 +38,7 @@ Lava *create_lava_from_line_stream(LineStream *line_stream)
         RETURN_LT(lt, NULL);
     }
 
-    lava->rects = PUSH_LT(lt, nth_alloc(sizeof(Wavy_rect*) * lava->rects_count), free);
+    lava->rects = PUSH_LT(lt, nth_calloc(1, sizeof(Wavy_rect*) * lava->rects_count), free);
     if (lava->rects == NULL) {
         RETURN_LT(lt, NULL);
     }
@@ -108,20 +104,21 @@ bool lava_overlaps_rect(const Lava *lava,
     return 0;
 }
 
-void lava_float_rigid_rect(Lava *lava, Rigid_rect *object)
+void lava_float_rigid_body(Lava *lava, RigidBodies *rigid_bodies, RigidBodyId id)
 {
     trace_assert(lava);
 
-    const Rect object_hitbox = rigid_rect_hitbox(object);
+    const Rect object_hitbox = rigid_bodies_hitbox(rigid_bodies, id);
     for (size_t i = 0; i < lava->rects_count; ++i) {
         const Rect lava_hitbox = wavy_rect_hitbox(lava->rects[i]);
         if (rects_overlap(object_hitbox, lava_hitbox)) {
             const Rect overlap_area = rects_overlap_area(object_hitbox, lava_hitbox);
             const float k = overlap_area.w * overlap_area.h / (object_hitbox.w * object_hitbox.h);
-            rigid_rect_apply_force(
-                object,
+            rigid_bodies_apply_force(
+                rigid_bodies,
+                id,
                 vec(0.0f, -k * LAVA_BOINGNESS));
-            rigid_rect_damper(object, vec(0.0f, -0.9f));
+            rigid_bodies_damper(rigid_bodies, id, vec(0.0f, -0.9f));
         }
     }
 }