From faec3d5d46c88e2949179dd2789899e5cf26ed48 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 12 Oct 2020 18:33:58 +0200 Subject: Start adding cylinders. --- src_testbed/engine.rs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index 217da48..ca2d71f 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -26,6 +26,7 @@ use rapier::geometry::{Collider, ColliderHandle, ColliderSet, Shape}; //#[cfg(feature = "fluids")] //use crate::objects::FluidRenderingMode; use crate::objects::capsule::Capsule; +use crate::objects::cylinder::Cylinder; use crate::objects::mesh::Mesh; use rand::{Rng, SeedableRng}; use rand_pcg::Pcg32; @@ -392,6 +393,14 @@ impl GraphicsManager { color, window, ))), + #[cfg(feature = "dim3")] + Shape::Cylinder(cylinder) => out.push(Node::Cylinder(Cylinder::new( + handle, + cylinder.half_height, + cylinder.radius, + color, + window, + ))), } } -- cgit From 865ce8a8e5301b23ca474adaaffe8b43e725803e Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 20 Oct 2020 11:55:33 +0200 Subject: Collider shape: use a trait-object instead of an enum. --- src_testbed/engine.rs | 65 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 24 deletions(-) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index ca2d71f..ca1a2b8 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -350,33 +350,44 @@ impl GraphicsManager { color: Point3, out: &mut Vec, ) { - match collider.shape() { - Shape::Ball(ball) => { - out.push(Node::Ball(Ball::new(handle, ball.radius, color, window))) - } - Shape::Polygon(poly) => out.push(Node::Convex(Convex::new( - handle, - poly.vertices().to_vec(), - color, - window, - ))), - Shape::Cuboid(cuboid) => out.push(Node::Box(BoxNode::new( + let shape = collider.shape(); + + if let Some(ball) = shape.as_ball() { + out.push(Node::Ball(Ball::new(handle, ball.radius, color, window))) + } + + // Shape::Polygon(poly) => out.push(Node::Convex(Convex::new( + // handle, + // poly.vertices().to_vec(), + // color, + // window, + // ))), + + if let Some(cuboid) = shape.as_cuboid() { + out.push(Node::Box(BoxNode::new( handle, cuboid.half_extents, color, window, - ))), - Shape::Capsule(capsule) => { - out.push(Node::Capsule(Capsule::new(handle, capsule, color, window))) - } - Shape::Triangle(triangle) => out.push(Node::Mesh(Mesh::new( + ))) + } + + if let Some(capsule) = shape.as_capsule() { + out.push(Node::Capsule(Capsule::new(handle, capsule, color, window))) + } + + if let Some(triangle) = shape.as_triangle() { + out.push(Node::Mesh(Mesh::new( handle, vec![triangle.a, triangle.b, triangle.c], vec![Point3::new(0, 1, 2)], color, window, - ))), - Shape::Trimesh(trimesh) => out.push(Node::Mesh(Mesh::new( + ))) + } + + if let Some(trimesh) = shape.as_trimesh() { + out.push(Node::Mesh(Mesh::new( handle, trimesh.vertices().to_vec(), trimesh @@ -386,21 +397,27 @@ impl GraphicsManager { .collect(), color, window, - ))), - Shape::HeightField(heightfield) => out.push(Node::HeightField(HeightField::new( + ))) + } + + if let Some(heightfield) = shape.as_heightfield() { + out.push(Node::HeightField(HeightField::new( handle, heightfield, color, window, - ))), - #[cfg(feature = "dim3")] - Shape::Cylinder(cylinder) => out.push(Node::Cylinder(Cylinder::new( + ))) + } + + #[cfg(feature = "dim3")] + if let Some(cylinder) = shape.as_cylinder() { + out.push(Node::Cylinder(Cylinder::new( handle, cylinder.half_height, cylinder.radius, color, window, - ))), + ))) } } -- cgit From d513c22d33ab44b0048355bcfd1db4173b3f7ece Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 20 Oct 2020 14:16:01 +0200 Subject: Add cone support. --- src_testbed/engine.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index ca1a2b8..1908745 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -26,6 +26,7 @@ use rapier::geometry::{Collider, ColliderHandle, ColliderSet, Shape}; //#[cfg(feature = "fluids")] //use crate::objects::FluidRenderingMode; use crate::objects::capsule::Capsule; +use crate::objects::cone::Cone; use crate::objects::cylinder::Cylinder; use crate::objects::mesh::Mesh; use rand::{Rng, SeedableRng}; @@ -419,6 +420,17 @@ impl GraphicsManager { window, ))) } + + #[cfg(feature = "dim3")] + if let Some(cone) = shape.as_cone() { + out.push(Node::Cone(Cone::new( + handle, + cone.half_height, + cone.radius, + color, + window, + ))) + } } /* -- cgit From 64958470950cd9832a669b1bd5d70a2aeb6a85ef Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 20 Oct 2020 15:57:54 +0200 Subject: Add rounded cylinder. --- src_testbed/engine.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index 1908745..7bdc812 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -411,7 +411,7 @@ impl GraphicsManager { } #[cfg(feature = "dim3")] - if let Some(cylinder) = shape.as_cylinder() { + if let Some(cylinder) = shape.as_cylinder().or(shape.as_rounded().map(|r| &r.shape)) { out.push(Node::Cylinder(Cylinder::new( handle, cylinder.half_height, -- cgit From 949e3f5384a366c3bff5415c5db4635e811a580e Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 20 Oct 2020 16:22:53 +0200 Subject: Fix many warnings. --- src_testbed/engine.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index 7bdc812..d6edea5 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -9,11 +9,10 @@ use na::Point3; use crate::math::Point; use crate::objects::ball::Ball; use crate::objects::box_node::Box as BoxNode; -use crate::objects::convex::Convex; use crate::objects::heightfield::HeightField; use crate::objects::node::{GraphicsNode, Node}; use rapier::dynamics::{RigidBodyHandle, RigidBodySet}; -use rapier::geometry::{Collider, ColliderHandle, ColliderSet, Shape}; +use rapier::geometry::{Collider, ColliderHandle, ColliderSet}; //use crate::objects::capsule::Capsule; //use crate::objects::convex::Convex; //#[cfg(feature = "fluids")] @@ -26,7 +25,9 @@ use rapier::geometry::{Collider, ColliderHandle, ColliderSet, Shape}; //#[cfg(feature = "fluids")] //use crate::objects::FluidRenderingMode; use crate::objects::capsule::Capsule; +#[cfg(feature = "dim3")] use crate::objects::cone::Cone; +#[cfg(feature = "dim3")] use crate::objects::cylinder::Cylinder; use crate::objects::mesh::Mesh; use rand::{Rng, SeedableRng}; -- cgit From 8c872dc0af9ece127a87b4adb112b0e1ed6ab249 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 27 Oct 2020 09:20:40 +0100 Subject: Replace the Rounded type by a non-generic RoundCylinder type. --- src_testbed/engine.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src_testbed/engine.rs') diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index d6edea5..b02f146 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -412,7 +412,10 @@ impl GraphicsManager { } #[cfg(feature = "dim3")] - if let Some(cylinder) = shape.as_cylinder().or(shape.as_rounded().map(|r| &r.shape)) { + if let Some(cylinder) = shape + .as_cylinder() + .or(shape.as_round_cylinder().map(|r| &r.cylinder)) + { out.push(Node::Cylinder(Cylinder::new( handle, cylinder.half_height, -- cgit