diff options
Diffstat (limited to 'src/sim/rb_manager/mod.rs')
| -rw-r--r-- | src/sim/rb_manager/mod.rs | 14 |
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) |
