summaryrefslogtreecommitdiff
path: root/src/sim/rb_manager
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2026-08-24 20:15:21 -0700
committerKai Stevenson <kai@kaistevenson.com>2026-08-24 20:15:21 -0700
commite28f8b4ef5c0744912afd49d8d1ba9a94e144613 (patch)
treea38fe431647834ea21ddd03984e41e5d00c32d50 /src/sim/rb_manager
parent3bae37a2d439804aee543473ef9b44f18692a67f (diff)
fixes for small entities
Diffstat (limited to 'src/sim/rb_manager')
-rw-r--r--src/sim/rb_manager/mod.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/sim/rb_manager/mod.rs b/src/sim/rb_manager/mod.rs
index efb25f9..3711b80 100644
--- a/src/sim/rb_manager/mod.rs
+++ b/src/sim/rb_manager/mod.rs
@@ -80,13 +80,13 @@ impl RbManager {
fn polyline_from_marchable(
marchable: &impl Marchable,
- minimum_verts: Option<u32>,
+ minimum_verts_per_poly: Option<u32>,
) -> (Vec<Vec2>, Vec<[u32; 2]>) {
let polys = marching_squares_vertex_trace(marchable);
let mut vertices = Vec::new();
let mut indices = Vec::new();
- let minimum_verts = minimum_verts.unwrap_or(3);
+ let minimum_verts = minimum_verts_per_poly.unwrap_or(3);
let centre_offset = (marchable.size() / 2).as_vec2() - 0.5;
@@ -116,11 +116,15 @@ impl RbManager {
pub fn convex_hull_collider_from_marchable(
marchable: &impl Marchable,
- minimum_verts: Option<u32>,
+ minimum_verts_per_poly: Option<u32>,
) -> geometry::ColliderBuilder {
puffin::profile_function!();
- let (vertices, indices) = RbManager::polyline_from_marchable(marchable, minimum_verts);
- {
+ let (vertices, indices) =
+ RbManager::polyline_from_marchable(marchable, minimum_verts_per_poly);
+ // convex_decomposition will panic if we have fewer verts
+ if vertices.len() < 3 {
+ panic!("Too few vertices to build collider!");
+ } else {
puffin::profile_scope!("Convex decomposition");
// TODO there are some pathological cases here that are taking 5ms+
geometry::ColliderBuilder::convex_decomposition(&vertices, &indices)