- if (wavy_rect_overlaps(lava->rects[i], object)) {
- return wavy_rect_overlap_area(lava->rects[i], object);
+ 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_bodies_apply_force(
+ rigid_bodies,
+ id,
+ vec(0.0f, -k * LAVA_BOINGNESS));
+ rigid_bodies_damper(rigid_bodies, id, vec(0.0f, -0.9f));