aboutsummaryrefslogtreecommitdiff
path: root/src_testbed/graphics.rs
diff options
context:
space:
mode:
authorThierry Berger <contact@thierryberger.com>2024-06-03 15:20:24 +0200
committerThierry Berger <contact@thierryberger.com>2024-06-03 15:20:24 +0200
commite1ed90603e618e28f48916690d761e0d8213e2ad (patch)
tree8399da9825ca9ee8edd601b1265e818fa303b541 /src_testbed/graphics.rs
parentfe336b9b98d5825544ad3a153a84cb59dc9171c6 (diff)
parent856675032e76b6eb4bc9e0be4dc87abdbcfe0421 (diff)
downloadrapier-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.rs26
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() {