From 524dce750590f3654b526f239615f5775d86276a Mon Sep 17 00:00:00 2001 From: NiseVoid Date: Wed, 19 Jun 2024 17:43:40 +0200 Subject: [PATCH] Use a well defined type for sides in RegularPolygon (#13837) # Objective - Primitives should not use poorly defined types like `usize`, especially since they are serializable ## Solution - Use `u32` instead of `usize` - The generic array types do not need to be changed because this size is not actually stored or serialized anywhere --- ## Migration Guide - `RegularPolygon` now uses `u32` instead of `usize` for the number of sides --- crates/bevy_gizmos/src/primitives/dim2.rs | 8 +++++++- crates/bevy_math/src/primitives/dim2.rs | 4 ++-- crates/bevy_render/src/mesh/primitives/dim2.rs | 9 +++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/crates/bevy_gizmos/src/primitives/dim2.rs b/crates/bevy_gizmos/src/primitives/dim2.rs index 9acca8356b..9fc8a691cf 100644 --- a/crates/bevy_gizmos/src/primitives/dim2.rs +++ b/crates/bevy_gizmos/src/primitives/dim2.rs @@ -852,7 +852,13 @@ where } let points = (0..=primitive.sides) - .map(|p| single_circle_coordinate(primitive.circumcircle.radius, primitive.sides, p)) + .map(|p| { + single_circle_coordinate( + primitive.circumcircle.radius, + primitive.sides as usize, + p as usize, + ) + }) .map(rotate_then_translate_2d(angle, position)); self.linestrip_2d(points, color); } diff --git a/crates/bevy_math/src/primitives/dim2.rs b/crates/bevy_math/src/primitives/dim2.rs index fb1543b07c..c589a00ee5 100644 --- a/crates/bevy_math/src/primitives/dim2.rs +++ b/crates/bevy_math/src/primitives/dim2.rs @@ -1642,7 +1642,7 @@ pub struct RegularPolygon { /// The circumcircle on which all vertices lie pub circumcircle: Circle, /// The number of sides - pub sides: usize, + pub sides: u32, } impl Primitive2d for RegularPolygon {} @@ -1664,7 +1664,7 @@ impl RegularPolygon { /// /// Panics if `circumradius` is negative #[inline(always)] - pub fn new(circumradius: f32, sides: usize) -> Self { + pub fn new(circumradius: f32, sides: u32) -> Self { assert!( circumradius.is_sign_positive(), "polygon has a negative radius" diff --git a/crates/bevy_render/src/mesh/primitives/dim2.rs b/crates/bevy_render/src/mesh/primitives/dim2.rs index 03e8165f54..353010cbc6 100644 --- a/crates/bevy_render/src/mesh/primitives/dim2.rs +++ b/crates/bevy_render/src/mesh/primitives/dim2.rs @@ -56,8 +56,9 @@ impl CircleMeshBuilder { impl MeshBuilder for CircleMeshBuilder { fn build(&self) -> Mesh { - RegularPolygon::new(self.circle.radius, self.resolution) + Ellipse::new(self.circle.radius, self.circle.radius) .mesh() + .resolution(self.resolution) .build() } } @@ -401,7 +402,7 @@ impl From for Mesh { /// A builder used for creating a [`Mesh`] with a [`RegularPolygon`] shape. pub struct RegularPolygonMeshBuilder { circumradius: f32, - sides: usize, + sides: u32, } impl Meshable for RegularPolygon { type Output = RegularPolygonMeshBuilder; @@ -419,7 +420,7 @@ impl MeshBuilder for RegularPolygonMeshBuilder { // The ellipse mesh is just a regular polygon with two radii Ellipse::new(self.circumradius, self.circumradius) .mesh() - .resolution(self.sides) + .resolution(self.sides as usize) .build() } } @@ -427,7 +428,7 @@ impl MeshBuilder for RegularPolygonMeshBuilder { impl Extrudable for RegularPolygonMeshBuilder { fn perimeter(&self) -> Vec { vec![PerimeterSegment::Flat { - indices: (0..self.sides as u32).chain([0]).collect(), + indices: (0..self.sides).chain([0]).collect(), }] } }