use crate::attributes_3d::attributes3d;
use crate::components::velocity::Velocity;
use bevy::ecs::error::Result;
use bevy::math::Vec3;
use bevy::prelude::{Component, Deref, DerefMut, GlobalTransform, Query};
use libfmod::{EventInstance, StopMode};
#[derive(Component, Deref, DerefMut)]
pub struct AudioSource {
#[deref]
pub event_instance: EventInstance,
pub despawn_stop_mode: StopMode,
}
impl AudioSource {
pub(crate) fn update_3d_attributes(
mut query: Query<(&AudioSource, &GlobalTransform, Option<&Velocity>)>,
) -> Result {
for (audio_source, transform, vel_component) in query.iter_mut() {
let mut velocity = Vec3::ZERO;
if let Some(vel_component) = vel_component {
velocity = vel_component.current_velocity;
}
audio_source.set_3d_attributes(attributes3d(
transform.translation(),
velocity,
*transform.forward(),
*transform.up(),
))?;
}
Ok(())
}
pub fn toggle(&self) -> crate::Result<()> {
let pause_state = self.event_instance.get_paused()?;
self.event_instance.set_paused(!pause_state)?;
Ok(())
}
}