From 124cd74cb136d6b2153c87465f742dc690cf7351 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Sat, 27 Aug 2022 12:26:58 -0500 Subject: [PATCH] Use correct transform when computing offsets. --- src/sound/volumetric.rs | 52 +++++++++++------------------------------ 1 file changed, 13 insertions(+), 39 deletions(-) diff --git a/src/sound/volumetric.rs b/src/sound/volumetric.rs index bcc73fc..fa1a81d 100644 --- a/src/sound/volumetric.rs +++ b/src/sound/volumetric.rs @@ -8,32 +8,16 @@ use crate::{commands::RunIfExistsExt, core::GlobalTransformExt}; pub struct Volumetric; fn update( - mut commands: Commands, listener: Query<(&Collider, &GlobalTransform), With>, - mut sounds: Query< - ( - Entity, - Option<&Collider>, - Option<&Parent>, - &mut Transform, - &GlobalTransform, - ), - With, - >, - colliders: Query<&Collider>, + mut sounds: Query<(&Sound, &Parent, &mut Transform), With>, + colliders: Query<(&Collider, &GlobalTransform)>, ) { if let Ok((listener_collider, listener_global_transform)) = listener.get_single() { - for (sound_entity, sound_collider, parent, mut sound_transform, sound_global_transform) in - &mut sounds - { - let sound_collider = if sound_collider.is_some() { - sound_collider - } else if let Some(parent) = parent { - colliders.get(**parent).ok() - } else { - None - }; - if let Some(sound_collider) = sound_collider { + for (sound, parent, mut sound_transform) in &mut sounds { + if sound.paused { + continue; + } + if let Ok((sound_collider, sound_global_transform)) = colliders.get(**parent) { let closest = listener_global_transform.closest_points( listener_collider, sound_global_transform, @@ -41,23 +25,13 @@ fn update( ); if let ClosestPoints::WithinMargin(_p1, p2) = closest { let p2 = Vec3::new(p2.x, p2.y, 0.); - if p2.distance(sound_global_transform.translation()) >= 1. { - sound_transform.translation.x = - p2.x - sound_global_transform.translation().x; - sound_transform.translation.y = - p2.y - sound_global_transform.translation().y; - } + sound_transform.translation.x = p2.x - sound_global_transform.translation().x; + sound_transform.translation.y = p2.y - sound_global_transform.translation().y; } else if closest == ClosestPoints::Intersecting { - if sound_global_transform - .translation() - .distance(listener_global_transform.translation()) - >= 1. - { - sound_transform.translation.x = listener_global_transform.translation().x - - sound_global_transform.translation().x; - sound_transform.translation.y = listener_global_transform.translation().y - - sound_global_transform.translation().y; - } + sound_transform.translation.x = listener_global_transform.translation().x + - sound_global_transform.translation().x; + sound_transform.translation.y = listener_global_transform.translation().y + - sound_global_transform.translation().y; } } }