diff options
| author | Sébastien Crozet <sebcrozet@dimforge.com> | 2024-03-24 17:25:42 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2024-03-24 18:06:00 +0100 |
| commit | 2df7258570ce59aedd7fb4c0dea3d3290eb02a47 (patch) | |
| tree | c69050633cd88c06e2a1fcb840d544b9c92e3689 /src_testbed/graphics.rs | |
| parent | f351dad9387d5d3d1eef475e217862008eea3725 (diff) | |
| download | rapier-2df7258570ce59aedd7fb4c0dea3d3290eb02a47.tar.gz rapier-2df7258570ce59aedd7fb4c0dea3d3290eb02a47.tar.bz2 rapier-2df7258570ce59aedd7fb4c0dea3d3290eb02a47.zip | |
feat: update testbeds to bevy 0.13
Diffstat (limited to 'src_testbed/graphics.rs')
| -rw-r--r-- | src_testbed/graphics.rs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src_testbed/graphics.rs b/src_testbed/graphics.rs index 552d4c7..226be4d 100644 --- a/src_testbed/graphics.rs +++ b/src_testbed/graphics.rs @@ -22,6 +22,9 @@ pub type BevyMaterial = ColorMaterial; #[cfg(feature = "dim3")] pub type BevyMaterial = StandardMaterial; +pub type InstancedMaterials = HashMap<Point3<usize>, Handle<BevyMaterial>>; +pub const SELECTED_OBJECT_MATERIAL_KEY: Point3<usize> = point![42, 42, 42]; + pub struct GraphicsManager { rand: Pcg32, b2sn: HashMap<RigidBodyHandle, Vec<EntityWithGraphics>>, @@ -30,6 +33,7 @@ pub struct GraphicsManager { b2wireframe: HashMap<RigidBodyHandle, bool>, ground_color: Point3<f32>, prefab_meshes: HashMap<ShapeType, Handle<Mesh>>, + instanced_materials: InstancedMaterials, pub gfx_shift: Vector<Real>, } @@ -43,10 +47,15 @@ impl GraphicsManager { ground_color: point![0.5, 0.5, 0.5], b2wireframe: HashMap::new(), prefab_meshes: HashMap::new(), + instanced_materials: HashMap::new(), gfx_shift: Vector::zeros(), } } + pub fn selection_material(&self) -> Handle<BevyMaterial> { + self.instanced_materials[&SELECTED_OBJECT_MATERIAL_KEY].clone_weak() + } + pub fn clear(&mut self, commands: &mut Commands) { for sns in self.b2sn.values_mut() { for sn in sns.iter_mut() { @@ -54,6 +63,7 @@ impl GraphicsManager { } } + self.instanced_materials.clear(); self.b2sn.clear(); self.c2color.clear(); self.b2color.clear(); @@ -159,10 +169,11 @@ impl GraphicsManager { fn gen_color(rng: &mut Pcg32) -> Point3<f32> { let mut color: Point3<f32> = rng.gen(); - color *= 1.5; - color.x = color.x.min(1.0); - color.y = color.y.min(1.0); - color.z = color.z.min(1.0); + + // Quantize the colors a bit to get some amount of auto-instancing from bevy. + color.x = (color.x * 5.0).round() / 5.0; + color.y = (color.y * 5.0).round() / 5.0; + color.z = (color.z * 5.0).round() / 5.0; color } @@ -191,7 +202,7 @@ impl GraphicsManager { commands: &mut Commands, meshes: &mut Assets<Mesh>, materials: &mut Assets<BevyMaterial>, - components: &mut Query<(&mut Transform,)>, + components: &mut Query<&mut Transform>, handle: RigidBodyHandle, bodies: &RigidBodySet, colliders: &ColliderSet, @@ -214,7 +225,7 @@ impl GraphicsManager { commands: &mut Commands, meshes: &mut Assets<Mesh>, materials: &mut Assets<BevyMaterial>, - components: &mut Query<(&mut Transform,)>, + components: &mut Query<&mut Transform>, handle: RigidBodyHandle, bodies: &RigidBodySet, colliders: &ColliderSet, @@ -330,6 +341,7 @@ impl GraphicsManager { meshes, materials, &self.prefab_meshes, + &mut self.instanced_materials, shape, handle, *pos, @@ -345,7 +357,7 @@ impl GraphicsManager { &mut self, _bodies: &RigidBodySet, colliders: &ColliderSet, - components: &mut Query<(&mut Transform,)>, + components: &mut Query<&mut Transform>, _materials: &mut Assets<BevyMaterial>, ) { for (_, ns) in self.b2sn.iter_mut() { |
