diff options
| author | Thierry Berger <contact@thierryberger.com> | 2024-06-03 15:20:24 +0200 |
|---|---|---|
| committer | Thierry Berger <contact@thierryberger.com> | 2024-06-03 15:20:24 +0200 |
| commit | e1ed90603e618e28f48916690d761e0d8213e2ad (patch) | |
| tree | 8399da9825ca9ee8edd601b1265e818fa303b541 /src_testbed/graphics.rs | |
| parent | fe336b9b98d5825544ad3a153a84cb59dc9171c6 (diff) | |
| parent | 856675032e76b6eb4bc9e0be4dc87abdbcfe0421 (diff) | |
| download | rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.gz rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.tar.bz2 rapier-e1ed90603e618e28f48916690d761e0d8213e2ad.zip | |
Merge branch 'master' into collider-builder-debug
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() { |
