Use correct transform when computing offsets.

This commit is contained in:
Nolan Darilek 2022-08-27 12:26:58 -05:00
parent 1020f818b9
commit 124cd74cb1

View File

@ -8,32 +8,16 @@ use crate::{commands::RunIfExistsExt, core::GlobalTransformExt};
pub struct Volumetric;
fn update(
mut commands: Commands,
listener: Query<(&Collider, &GlobalTransform), With<Listener>>,
mut sounds: Query<
(
Entity,
Option<&Collider>,
Option<&Parent>,
&mut Transform,
&GlobalTransform,
),
With<Volumetric>,
>,
colliders: Query<&Collider>,
mut sounds: Query<(&Sound, &Parent, &mut Transform), With<Volumetric>>,
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;
}
}
}