 74e793d1e1
			
		
	
	
		74e793d1e1
		
			
		
	
	
	
	
		
			
			# 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.
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| 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);
 | |
| }
 |