]> git.lizzy.rs Git - nothing.git/blobdiff - src/game/level/boxes.c
(#802) TODO
[nothing.git] / src / game / level / boxes.c
index 8275e5d387f4740ffbe93a301cce2ca65897ef48..462475e9fb169996797fd6ec30107bddeac63eab 100644 (file)
@@ -113,7 +113,6 @@ void boxes_float_in_lava(Boxes *boxes, Lava *lava)
     }
 }
 
-static
 int boxes_add_box(Boxes *boxes, Rect rect, Color color)
 {
     trace_assert(boxes);
@@ -166,3 +165,25 @@ boxes_send(Boxes *boxes, Gc *gc, struct Scope *scope, struct Expr path)
 
     return wrong_argument_type(gc, "string-or-symbol-p", target);
 }
+
+
+int boxes_delete_at(Boxes *boxes, Vec position)
+{
+    trace_assert(boxes);
+
+    for (size_t i = 0; i < boxes->count; ++i) {
+        const Rect hitbox = rigid_bodies_hitbox(
+            boxes->rigid_bodies,
+            boxes->body_ids[i]);
+        if (rect_contains_point(hitbox, position)) {
+            rigid_bodies_remove(boxes->rigid_bodies, boxes->body_ids[i]);
+            for (size_t j = i; j < boxes->count - 1; ++j) {
+                boxes->body_ids[j] = boxes->body_ids[j + 1];
+            }
+            boxes->count--;
+            return 0;
+        }
+    }
+
+    return 0;
+}