Skip to content

Commit

Permalink
Move Volume and GlobalVolume to own file (#16838)
Browse files Browse the repository at this point in the history
# Objective

- Prework for reviving #9582.

## Solution

- Move the two types to volume.rs and made it compile.
- Also `#[reflect(Debug)]` on `Volume` while I'm here. 

## Testing

- Ran example locally.
- Rely on CI.
  • Loading branch information
mgi388 authored Dec 16, 2024
1 parent 90b2ba1 commit 74e793d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 46 deletions.
47 changes: 1 addition & 46 deletions crates/bevy_audio/src/audio.rs
Original file line number Diff line number Diff line change
@@ -1,37 +1,11 @@
#![expect(deprecated)]

use crate::{AudioSource, Decodable};
use crate::{AudioSource, Decodable, Volume};
use bevy_asset::{Asset, Handle};
use bevy_derive::Deref;
use bevy_ecs::prelude::*;
use bevy_math::Vec3;
use bevy_reflect::prelude::*;

/// A volume level equivalent to a non-negative float.
#[derive(Clone, Copy, Deref, Debug, Reflect)]
pub struct Volume(pub(crate) f32);

impl Default for Volume {
fn default() -> Self {
Self(1.0)
}
}

impl Volume {
/// Create a new volume level.
pub fn new(volume: f32) -> Self {
debug_assert!(volume >= 0.0);
Self(f32::max(volume, 0.))
}
/// Get the value of the volume level.
pub fn get(&self) -> f32 {
self.0
}

/// Zero (silent) volume level
pub const ZERO: Self = Volume(0.0);
}

/// The way Bevy manages the sound playback.
#[derive(Debug, Clone, Copy, Reflect)]
pub enum PlaybackMode {
Expand Down Expand Up @@ -197,25 +171,6 @@ impl SpatialListener {
}
}

/// Use this [`Resource`] to control the global volume of all audio.
///
/// Note: changing this value will not affect already playing audio.
#[derive(Resource, Default, Clone, Copy, Reflect)]
#[reflect(Resource, Default)]
pub struct GlobalVolume {
/// The global volume of all audio.
pub volume: Volume,
}

impl GlobalVolume {
/// Create a new [`GlobalVolume`] with the given volume.
pub fn new(volume: f32) -> Self {
Self {
volume: Volume::new(volume),
}
}
}

/// A scale factor applied to the positions of audio sources and listeners for
/// spatial audio.
///
Expand Down
2 changes: 2 additions & 0 deletions crates/bevy_audio/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ mod audio_output;
mod audio_source;
mod pitch;
mod sinks;
mod volume;

/// The audio prelude.
///
Expand All @@ -51,6 +52,7 @@ pub mod prelude {
pub use audio::*;
pub use audio_source::*;
pub use pitch::*;
pub use volume::*;

pub use rodio::{cpal::Sample as CpalSample, source::Source, Sample};
pub use sinks::*;
Expand Down
48 changes: 48 additions & 0 deletions crates/bevy_audio/src/volume.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use bevy_derive::Deref;
use bevy_ecs::prelude::*;
use bevy_reflect::prelude::*;

/// Use this [`Resource`] to control the global volume of all audio.
///
/// Note: changing this value will not affect already playing audio.
#[derive(Resource, Default, Clone, Copy, Reflect)]
#[reflect(Resource, Default)]
pub struct GlobalVolume {
/// The global volume of all audio.
pub volume: Volume,
}

impl GlobalVolume {
/// Create a new [`GlobalVolume`] with the given volume.
pub fn new(volume: f32) -> Self {
Self {
volume: Volume::new(volume),
}
}
}

/// A volume level equivalent to a non-negative float.
#[derive(Clone, Copy, Deref, Debug, Reflect)]
#[reflect(Debug)]
pub struct Volume(pub(crate) f32);

impl Default for Volume {
fn default() -> Self {
Self(1.0)
}
}

impl Volume {
/// Create a new volume level.
pub fn new(volume: f32) -> Self {
debug_assert!(volume >= 0.0);
Self(f32::max(volume, 0.))
}
/// Get the value of the volume level.
pub fn get(&self) -> f32 {
self.0
}

/// Zero (silent) volume level
pub const ZERO: Self = Volume(0.0);
}

0 comments on commit 74e793d

Please sign in to comment.