diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2026-08-24 20:15:21 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2026-08-24 20:15:21 -0700 |
| commit | e28f8b4ef5c0744912afd49d8d1ba9a94e144613 (patch) | |
| tree | a38fe431647834ea21ddd03984e41e5d00c32d50 /src/sim/rb_manager | |
| parent | 3bae37a2d439804aee543473ef9b44f18692a67f (diff) | |
fixes for small entities
Diffstat (limited to 'src/sim/rb_manager')
| -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) |
